itext
フォーム:iText 5とiText 7
サーチ…
備考
iText 5は有機的に成長した図書館です。多くの開発者がコードを提供しています。たとえば、ある開発者が、 TextField
やPdfFormField
などのクラスを使用して、最初からフォームフィールドを作成するためのコードをPdfFormField
。別の開発者が、 AcroField
クラスと一連のsetFieldProperty()
メソッドを使用して、既存のフォームフィールドを変更するコードを提供しました。
iText 5では、フォームフィールドの作成に使用されるクラスを使用してフォームフィールドを変更することはできず、その逆もあります。 2組のクラスの間には何の関係もありません。それは多くのユーザーにとって混乱します。たとえば、一部のユーザーはTextField
クラスを検出し、そのクラスを使用して既存のテキストフィールドのプロパティを変更できると想定します。そうでない場合は、 AcroFields
クラスを使用する必要があります。
このすべてはiText 7で修正されています。既存のフォームフィールドの更新だけでなく、新しいフィールドの作成にも使用できるPdfFormField
やそのサブクラスPdfTextField
など、新しいクラスのクラスを作成しました。
iText 7フォームフィールドメソッドは、コードをよりコンパクトにするために連鎖させることができ、iText 5の対応するメソッドよりもはるかに直感的です。フォーム機能をよりエレガントにすることは、iTextを一から書き直す重要な理由の1つでした。
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();
}
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();
}
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();
}
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();
}