itext
Formularze: iText 5 vs iText 7
Szukaj…
Uwagi
iText 5 to biblioteka, która rozrosła się organicznie. Wielu programistów napisało kod. Na przykład: jeden programista PdfFormField
kod do utworzenia pól formularza od podstaw, używając klas takich jak TextField
i PdfFormField
; inny programista przyczynił się do zmiany istniejących pól formularza za pomocą klasy AcroField
i szeregu metod setFieldProperty()
.
W iText 5 klasy używane do tworzenia pól formularzy nie mogą być używane do zmiany pól formularzy i odwrotnie. Nie ma żadnego związku między tymi dwoma zestawami klas. Jest to mylące dla wielu użytkowników. Na przykład: niektórzy użytkownicy odkrywają klasę TextField
i zakładają, że mogą użyć tej klasy do zmiany właściwości istniejącego pola tekstowego. Tak nie jest, muszą zamiast tego AcroFields
klasy AcroFields
.
Wszystko to zostało naprawione w iText 7. Stworzyliśmy nowy zestaw klas, takich jak PdfFormField
i jego podklasa PdfTextField
które można wykorzystać do utworzenia nowego pola, a także do aktualizacji istniejącego pola formularza.
Metody pola formularza iText 7 można łączyć, aby uczynić kod bardziej zwartym, i są one znacznie bardziej intuicyjne niż odpowiednie metody w iText 5. Uczynienie funkcji formularza bardziej eleganckim było jednym z kluczowych powodów przepisania iText od zera.
FormCreation.java (iText 5)
W tym przykładzie iText 5 utworzymy pole tekstowe i dodamy je do pliku 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();
}
Źródło: developers.itextpdf.com
FormCreation.java (iText 7)
W tym przykładzie iText 7 utworzymy pole tekstowe i dodamy je do pliku 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();
}
Źródło: developers.itextpdf.com
FormFilling.java (iText 5)
W tym przykładzie iText 5 zmienimy właściwości i wartość pola tekstowego:
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();
}
Źródło: developers.itextpdf.com
FormFilling.java (iText 7)
W tym przykładzie iText 7 zmienimy właściwości i wartość pola tekstowego:
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();
}
Źródło: developers.itextpdf.com