pdfformfiller2填写后无法编辑PDF表单
Posted
技术标签:
【中文标题】pdfformfiller2填写后无法编辑PDF表单【英文标题】:PDF form not editable after being filled by pdfformfiller2 【发布时间】:2015-07-24 13:45:33 【问题描述】:我目前正在编写一个脚本,将一组项目数据填充到模板 PDF 的给定表单字段中,然后将这些文档保存到存储库中以供项目成员进一步编辑(这些文档的字段比自动填充的字段多得多)。
模板-PDF 之前由我在 Adobe InDesign 中创建,然后在 Adobe Acrobat Pro 中使用“扩展功能”保存,以便在免费的 Acrobat Reader 和 pdfformfiller2 中进行编辑。
这个用于 iText 的小型 java-wrapper 可以用 utf8 文本填充 PDF-Forms,这与我的脚本配合得很好。我使用的命令是:
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 中存在的任何签名。一种特殊类型的签名,使用权签名,是用于授予“扩展功能”的机制。您可以尝试在将new PdfStamper(reader, os, '\0')
替换为 new PdfStamper(reader, os, '\0', true)
后重新编译 pdfformfiller2,这利用了增量更新。不过,我还没有尝试过,pdfformfiller2 中可能还有其他的阻止程序。
要扩展 mkl 的评论,添加扩展权限必须是分发表单之前的最后一步。现在,还有另一个考虑因素:要求您的用户使用 Reader XI 或更新版本是否可以接受? (请注意,扩展权利(用于保存)仅适用于 Adobe Reader X 及更早版本)。因此,由您(和您的用户)决定您是否可以在没有扩展权利的情况下真正做到这一点(而不是需要 Reader XI 或更高版本)。
mkl 的修复成功了! :) @Max Wyss:我使用最新的 Adobe Reader DC 进行了尝试,但它不允许我在填充文件后编辑/保存文件......
@cruzel 太好了,修复完成了工作。由于我没有对其进行测试,我只是将修复发布为评论,但当您确认它有效时,我很高兴将其作为实际答案。
【参考方案1】:
pdfformfiller2 不使用增量更新填写表格。因此,它会自动破坏 PDF 中存在的任何签名。 (有关信息安全的背景,请参见this answer。)
一种特殊类型的签名,即使用权签名,是用于授予“扩展功能”的机制。因此,正如观察到的那样,pdfformfiller2 破坏了“扩展功能”。
你可以尝试替换后重新编译pdfformfiller2
new PdfStamper(reader, os, '\0')
通过
new PdfStamper(reader, os, '\0', true)
利用增量更新。 (对于背景参见this answer;在追加模式中,iText PdfStamper
生成增量更新。iText 是 pdfformfiller2 使用的 PDF 库。)
【讨论】:
以上是关于pdfformfiller2填写后无法编辑PDF表单的主要内容,如果未能解决你的问题,请参考以下文章
Adobe Reader来填写的表单无法保存,我怎么做pdf表单才能使别人可以用Adobe Reader来填写的表单能保存