我尝试将pdf中的表单字段(PDAcroForm.flatten()
)展平,然后再将其从.xfdf
文件中填充出来。
预期的结果是将可编辑框替换为仅文本。
但是,我从PDF中将文本展平后(output02.pdf)填满后,所有添加的文本现在都完全消失了,所以我得到了一个空格,而不是表单值({{3} }。
放入output03.pdf,其中包含PDF文件(输入和生成的输出),但这只是拼合的一部分:
// in Main.java, function flatten()
PDDocument pdf_document = PDDocument.load(new File("output02.pdf")); //from step before, merged & filled pdf files.
List<PDField> the_fields = new ArrayList<PDField>();
for (PDField field: pdf_document.getDocumentCatalog().getAcroForm().getFieldTree()) {
the_fields.add(field);
}
System.out.println("Flattening fields: " + Arrays.stream(the_fields.toArray()).map(field -> ((PDField)field).getFullyQualifiedName()).collect(Collectors.joining(", ","[","]")));
pdf_document.getDocumentCatalog().getAcroForm().flatten(the_fields, true);
pdf_document.save(new File("output03.pdf"));
complete example on github 填写的文本也消失了
修改:
通过表单菜单在现有PDF上使用Adobe Acrobat Pro
10.1.1
创建这些表单元素,然后将pdf保存为sample5.pdf
和test.pdf
。
答案 0 :(得分:2)
这是自2.0.5 two years ago起修复的错误。由于该错误,xfdf文件中的字段值被分配为名称,而不是字段字典的/ V条目(用于值)中的字符串。因此,该字段的外观流中没有任何要显示的内容。因此,展平后什么也没有。
始终使用最新版本的PDFBox。我在所有项目中都使用maven versions plugin。