PdfTextFormField - 2 个同步字段 - 如何填写初始值? - Java 的 iText 7.1.0
PdfTextFormField - 2 synchron Fields - How to fill in an initial value? - iText 7.1.0 for Java
目前我正在用 iText 编写几个评估程序。
我有 2 个字段的问题,它们应该始终具有相同的值(1 个字段的 2 个表示)。
在最终版本中,这些字段位于任意位置的不同页面上
位置。
用field.SetValue设置值会报错。设置值
widget1.setContents 什么都不做。
有人知道如何解决这个问题吗?
谢谢,德克
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));
}
}
您需要稍微更改执行操作的顺序。 @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();
目前我正在用 iText 编写几个评估程序。
我有 2 个字段的问题,它们应该始终具有相同的值(1 个字段的 2 个表示)。
在最终版本中,这些字段位于任意位置的不同页面上 位置。
用field.SetValue设置值会报错。设置值 widget1.setContents 什么都不做。
有人知道如何解决这个问题吗?
谢谢,德克
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));
}
}
您需要稍微更改执行操作的顺序。 @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();