目前我正在用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));
}
}
答案 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();