pdfformfiller2填写后无法编辑PDF表单

Posted

技术标签:

【中文标题】pdfformfiller2填写后无法编辑PDF表单【英文标题】:PDF form not editable after being filled by pdfformfiller2 【发布时间】:2015-07-24 13:45:33 【问题描述】:

我目前正在编写一个脚本,将一组项目数据填充到模板 PDF 的给定表单字段中,然后将这些文档保存到存储库中以供项目成员进一步编辑(这些文档的字段比自动填充的字段多得多)。

模板-PDF 之前由我在 Adob​​e InDesign 中创建,然后在 Adob​​e 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,它只能在 Adob​​e Acrobat Pro 中再次编辑。由于脚本旨在自动运行,因此在脚本填充每个 PDF 后,我无法再次使用“扩展功能”保存每个 PDF。包装代码中是否有任何选项或修复来解决此问题?

顺便说一句。 pdfformfiller2 的“-flatten”选项被禁用。

【问题讨论】:

pdfformfiller2 不使用增量更新填写表单。因此,它会自动破坏 PDF 中存在的任何签名。一种特殊类型的签名,使用权签名,是用于授予“扩展​​功能”的机制。您可以尝试在将 new PdfStamper(reader, os, '\0') 替换为 new PdfStamper(reader, os, '\0', true) 后重新编译 pdfformfiller2,这利用了增量更新。不过,我还没有尝试过,pdfformfiller2 中可能还有其他的阻止程序。 要扩展 mkl 的评论,添加扩展权限必须是分发表单之前的最后一步。现在,还有另一个考虑因素:要求您的用户使用 Reader XI 或更新版本是否可以接受? (请注意,扩展权利(用于保存)仅适用于 Adob​​e Reader X 及更早版本)。因此,由您(和您的用户)决定您是否可以在没有扩展权利的情况下真正做到这一点(而不是需要 Reader XI 或更高版本)。 mkl 的修复成功了! :) @Max Wyss:我使用最新的 Adob​​e 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来填写的表单能保存

部分填写 PDF 表单,使其可编辑

Python PDF 表单展平

adobe acrobat 编辑后的pdf文件无法保存为啥

pdf文件怎么填写

在 PHP 中预填充 AcroForms PDF