我目前正在编写一个脚本,该脚本将一组项目数据填充到模板PDF的给定表单域中,然后将那些文档保存到资源库中,以供项目成员进行进一步编辑(文档具有比自动填充的域更多的域)。
模板PDF先前由我在Adobe InDesign中创建,然后在Adobe Acrobat Pro中与“扩展功能”一起保存,以使其可以在免费的Acrobat Reader和pdfformfiller2中进行编辑。
这个用于iText的小型Java包装器可以用utf8文本填充PDF表单,这与我的脚本很好地兼容。我使用的命令是:
java -jar pdfformfiller.jar doc1_template.pdf -f text_input.txt doc1_filled.pdf
问题在于,在用数据填充后,pdfformfiller2输出一个doc1_filled.pdf,该文档只能在Adobe Acrobat Pro中再次进行编辑。因为该脚本旨在自动运行,所以在脚本填充每个PDF后,我无法再使用“扩展功能”保存每个PDF。包装代码中是否有任何选项或修复程序可以解决此问题?
顺便说一句。 pdfformfiller2的选项“ -flatten”被禁用。
最佳答案
pdfformfiller2不会使用增量更新来填写表单。因此,它会自动破坏PDF中存在的所有签名。 (有关信息安全性的背景,请参见this answer。)
一种特殊类型的签名,即使用权签名,是用于授予“扩展功能”的机制。因此,正如观察到的那样,pdfformfiller2破坏了“扩展功能”。
您可以在替换后尝试重新编译pdfformfiller2
new PdfStamper(reader, os, '\0')
通过
new PdfStamper(reader, os, '\0', true)
利用增量更新。 (对于背景,请参见this answer;在附加模式下,iText
PdfStamper
会生成增量更新。iText是pdfformfiller2使用的PDF库。)