itext
Moduli: iText 5 vs iText 7
Ricerca…
Osservazioni
iText 5 è una libreria che è cresciuta organicamente. Molti sviluppatori hanno contribuito con il codice. Ad esempio: uno sviluppatore ha contribuito al codice per creare campi modulo da zero, utilizzando classi come TextField
e PdfFormField
; un altro sviluppatore ha contribuito al codice per modificare i campi modulo esistenti, utilizzando la classe AcroField
e una serie di metodi setFieldProperty()
.
In iText 5, le classi utilizzate per creare campi modulo non possono essere utilizzate per modificare i campi modulo e viceversa. Non c'è alcuna relazione tra i due gruppi di classi. Questo è fonte di confusione per molti utenti. Ad esempio: alcuni utenti scoprono la classe TextField
e assumono che possano usare quella classe per modificare le proprietà di un campo di testo esistente. Questo non è il caso, hanno invece bisogno di usare la classe AcroFields
.
Tutto ciò è stato risolto in iText 7. Abbiamo creato un nuovo set di classi come PdfFormField
e la sottoclasse PdfTextField
che può essere utilizzato per creare un nuovo campo, nonché per aggiornare un campo modulo esistente.
I metodi del campo modulo di iText 7 possono essere concatenati per rendere il tuo codice più compatto e sono molto più intuitivi rispetto ai metodi corrispondenti in iText 5. Rendere la funzionalità del modulo più elegante è stato uno dei motivi principali per riscrivere iText da zero.
FormCreation.java (iText 5)
In questo esempio di iText 5, creeremo un campo di testo e lo aggiungeremo a un 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();
}
Fonte: developers.itextpdf.com
FormCreation.java (iText 7)
In questo esempio di iText 7, creeremo un campo di testo e lo aggiungeremo a un 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();
}
Fonte: developers.itextpdf.com
FormFilling.java (iText 5)
In questo esempio di iText 5, cambieremo le proprietà e il valore di un campo di testo:
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();
}
Fonte: developers.itextpdf.com
FormFilling.java (iText 7)
In questo esempio di iText 7, cambieremo le proprietà e il valore di un campo di testo:
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();
}
Fonte: developers.itextpdf.com