PdfTextFormField - 2个同步字段 - 如何填写初始值? - 用于Java的iText 7.1.0

时间:2018-01-13 17:07:58

标签: itext7

目前我正在用iText编写几个评估程序。

我遇到了2个字段的问题,这两个字段应始终具有相同的值(2个字段的1个重复)。

在最终版本中,这些字段位于不同的页面上 位置。

使用field.SetValue设置值会产生错误。使用设置值 widget1.setContents什么都不做。

有人知道如何解决这个问题吗?

谢谢,Dirk

import java.awt.Desktop;
import java.io.File;
import java.io.IOException;

import com.itextpdf.forms.PdfAcroForm;
import com.itextpdf.forms.fields.PdfFormField;
import com.itextpdf.forms.fields.PdfTextFormField;
import com.itextpdf.kernel.geom.Rectangle;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfPage;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.kernel.pdf.annot.PdfWidgetAnnotation;

public class problem2 {
    public static void main(String[] args) throws IOException {
        String fnPdf = "results/problem2.pdf";
        PdfWriter writer = new PdfWriter(fnPdf);
        PdfDocument pdf = new PdfDocument(writer);
        PdfPage page = pdf.addNewPage();
        PdfAcroForm form = PdfAcroForm.getAcroForm(pdf, true);
        PdfTextFormField field = PdfFormField.createText(pdf);
        field.setFieldName("fName");
        // field.setValue("test"); // produces an error
        Rectangle rect1 = new Rectangle(40, 200, 150, 20);
        PdfWidgetAnnotation widget1 = new PdfWidgetAnnotation(rect1);
        widget1.setContents("test"); // no error but does'nt work
        page.addAnnotation(widget1);
        Rectangle rect2 = new Rectangle(240, 200, 150, 20);
        PdfWidgetAnnotation widget2 = new PdfWidgetAnnotation(rect2);
        widget2.setContents("test"); // no error but does'nt work
        page.addAnnotation(widget2);
        form.addField(field, page);
        field.addKid(widget1);
        field.addKid(widget2);
        pdf.close();
        Desktop.getDesktop().open(new File(fnPdf));
    }
}

1 个答案:

答案 0 :(得分:2)

您需要稍微更改执行操作的顺序。 @mkl是正确的,因为你首先必须设置结构,然后更改字段的值。

如果您这样做,则无需使用setContents,只需拨打setValue即可。

另外,请确保小部件是间接对象:widget.makeIndirect(pdf);

生成所需字段的完整代码段,其中包含两个共享字段值的小部件:

PdfWriter writer = new PdfWriter(fnPdf);
PdfDocument pdf = new PdfDocument(writer);
PdfPage page = pdf.addNewPage();
PdfAcroForm form = PdfAcroForm.getAcroForm(pdf, true);
PdfTextFormField field = PdfFormField.createText(pdf);
field.setFieldName("fName");

Rectangle rect1 = new Rectangle(40, 200, 150, 20);
PdfWidgetAnnotation widget1 = new PdfWidgetAnnotation(rect1);
widget1.makeIndirect(pdf);
page.addAnnotation(widget1);
field.addKid(widget1);

Rectangle rect2 = new Rectangle(240, 200, 150, 20);
PdfWidgetAnnotation widget2 = new PdfWidgetAnnotation(rect2);
widget2.makeIndirect(pdf);
page.addAnnotation(widget2);
field.addKid(widget2);

field.setValue("test");

form.addField(field, page);
pdf.close();