itext
Формы: iText 5 vs iText 7
Поиск…
замечания
iText 5 - это библиотека, которая органично выросла. Многие разработчики внесли код. Например: один разработчик внес свой код для создания полей формы с нуля, используя такие классы, как TextField
и PdfFormField
; другой разработчик внес свой код для изменения существующих полей формы, используя класс AcroField
и ряд методов setFieldProperty()
.
В iText 5 классы, используемые для создания полей формы, не могут использоваться для изменения полей формы и наоборот. Между двумя наборами классов нет никакой связи. Это сложно для многих пользователей. Например: некоторые пользователи обнаруживают класс TextField
и предполагают, что могут использовать этот класс для изменения свойств существующего текстового поля. Это не так, им нужно использовать класс AcroFields
.
Все это исправлено в iText 7. Мы создали новый набор классов, таких как PdfFormField
и его подкласс PdfTextField
которые можно использовать для создания нового поля, а также для обновления существующего поля формы.
Методы поля формы iText 7 могут быть закодированы, чтобы сделать ваш код более компактным, и они гораздо более интуитивно понятны, чем соответствующие методы в iText 5. Создание более функциональной формы формы было одной из основных причин перезаписи iText с нуля.
FormCreation.java (iText 5)
В этом примере iText 5 мы создадим текстовое поле, и мы добавим его в PDF:
public void manipulatePdf(String src, String dest) throws DocumentException, IOException {
PdfReader reader = new PdfReader(src);
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(dest));
TextField tf = new TextField(stamper.getWriter(),
new Rectangle(110, 780, 180, 806), "text");
tf.setBorderColor(BaseColor.BLUE);
tf.setBorderWidth(2);
tf.setTextColor(BaseColor.RED);
tf.setFontSize(12);
tf.setText("Text field");
PdfFormField field = tf.getTextField();
stamper.addAnnotation(field, 1);
stamper.close();
reader.close();
}
Источник: developers.itxtpdf.com
FormCreation.java (iText 7)
В этом примере iText 7 мы создадим текстовое поле, и мы добавим его в PDF:
public void manipulatePdf(String src, String dest) throws IOException {
PdfReader reader = new PdfReader(src);
PdfDocument pdf = new PdfDocument(reader, new PdfWriter(dest));
PdfAcroForm form = PdfAcroForm.getAcroForm(pdf, true);
PdfFormField tf = PdfTextFormField.createText(
pdf, new Rectangle(110, 780, 70, 26), "text", "Text Field")
.setBorderColor(Color.BLUE)
.setBorderWidth(2)
.setColor(Color.RED)
.setFontSize(12);
form.addField(tf);
pdf.close();
}
Источник: developers.itxtpdf.com
FormFilling.java (iText 5)
В этом примере iText 5 мы изменим свойства и значение текстового поля:
public void manipulatePdf(String src, String dest) throws DocumentException, IOException {
PdfReader reader = new PdfReader(src);
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(dest));
AcroFields fields = stamper.getAcroFields();
fields.setFieldProperty("text", "textcolor", BaseColor.BLUE, null);
fields.setFieldProperty("text", "bordercolor", BaseColor.RED, null);
fields.setFieldProperty("text", "fontsize", 14, null);
fields.setField("text", "Field Text");
stamper.close();
reader.close();
}
Источник: developers.itxtpdf.com
FormFilling.java (iText 7)
В этом примере iText 7 мы изменим свойства и значение текстового поля:
public void manipulatePdf(String src, String dest) throws IOException {
PdfReader reader = new PdfReader(src);
PdfDocument pdf = new PdfDocument(reader, new PdfWriter(dest));
PdfAcroForm form = PdfAcroForm.getAcroForm(pdf, true);
PdfFormField tf = form.getFormFields().get("text");
tf.setBorderColor(Color.RED)
.setColor(Color.BLUE)
.setFontSize(14)
.setValue("Field Text");
pdf.close();
}
Источник: developers.itxtpdf.com