【发布时间】:2018-03-15 21:38:57
【问题描述】:
我正在使用 iText7 生成一些带有可编辑表单字段的 PDF 文档。 我的代码使用以下代码将字段添加到 PDF 文档:
@Override
public void draw(DrawContext drawContext) {
super.draw(drawContext);
PdfAcroForm form = PdfAcroForm.getAcroForm(drawContext.getDocument(), true);
PdfFormField field = isMultiline
? PdfFormField.createMultilineText(drawContext.getDocument(), getOccupiedAreaBBox(), fieldName, "")
: PdfFormField.createText(drawContext.getDocument(), getOccupiedAreaBBox(), fieldName, "");
field.setFontSize(defaultFontSize - 1);
form.addField(field);
}
以上是一个iText自定义渲染器类的draw方法。
生成的 PDF 文档按预期工作。我可以在 Adobe Acrobat Reader 中打开它,填写可编辑字段,保存它,重新打开它等等。
我的一个要求是允许以编程方式展平表单(显然是在人类用户填写之后),以便此后禁用编辑。
我用这段代码来做这个:
PdfDocument pdf = ... // Read a PDF stream and get the document object
PdfAcroForm form = PdfAcroForm.getAcroForm(pdf, false);
form.flattenFields();
pdf.close()
现在的问题是,当我用 PDF 阅读器打开拼合的 PDF 时,这些字段是空白的。
我进行了一些调试,似乎只有当我尝试平展使用 Adobe Reader(版本 XI)编辑(和保存)的字段时才会出现此问题。
如果我以编程方式编辑字段,例如使用 iText 的 PdfFormField#setValue(String) 方法,扁平化的 PDF 可以很好地呈现值。
似乎 Adobe Reader 正在设置表单字段的某些属性,以防止它们被正确展平......真的是这样吗?有什么办法可以解决吗?
【问题讨论】:
标签: java pdf itext7 acrobat pdf-form