在 android 上用 itext 填充 pdf 表单字段后为空

pdf form fields empty after filling them with itext on android

在我的 android 应用程序中,我使用 itextg 从 pdf 文件填写表单域,如下所示:

PdfReader reader = new PdfReader(this.templateFile);
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(this.targetFile));
AcroFields form = stamper.getAcroFields();

for (String key : values.keySet()) {
    form.setField(key, values.get(key));
}

stamper.setFormFlattening(true);
stamper.close();    

我可以看到,formfields 的值实际上是在调试和检查压模时设置的。但是一旦我打开目标文件,我的所有字段都是空的。

如果我不展平我的表格,值会保留在字段中,这让我相信该值也会出现在展平 pdf 中,但根本不会显示。

顺便说一句,使用 FormFiller 形成 itext 演示 (http://itextpdf.com/itext-android-demos) 相同的 pdf 工作得很好!

这可能是由不同的原因造成的。

不是正确的 iTextG 版本

请参阅 Appearance issues with pdf interactive forms using iText 可以找到此答案的地方:

This seems to be a bug on some versions of iText. I had the same problem with iTextSharp version 5.5.5 and it was solved after I upgraded to version 5.5.9.

表单不知道它必须生成外观

参见Editable .pdf fields disappear (but visible on field focus) after save with evince通过更改外观设置解决问题的地方:

form.put(PdfName.NEEDAPPEARANCES, PdfBoolean.PDFTRUE);

或查看 iText 5.5 fails to fill form 指示 iText 创建外观的地方:

af.setGenerateAppearances(true);

我会先从 af.setGenerateAppearances(true); 开始。