使用 Acrobat Reader DC 填写并签名无法使用的 PDF 文件

Fill and sign for PDF file not working using Acrobat Reader DC

我在这里问这个问题是因为根据我所做的搜索,Adobe 的支持似乎几乎不存在。根据这个在线验证工具,我有:

https://www.pdf-online.com/osa/validate.aspx

完全有效的 PDF,由代码生成。但是,在使用 Acrobat Reader DC 时,我无法使用“填写并签名”- 尝试签名时,它会抛出此错误:

The operation failed because Adobe Acrobat encountered an unknown error

这是有问题的 PDF:

https://github.com/DelphiWorlds/MiscStuff/blob/master/Test/PDF/SigningNoWork.pdf

这是非常相似的一个,其中填写和签名工作:

https://github.com/DelphiWorlds/MiscStuff/blob/master/Test/PDF/SigningWorks.pdf

Foxit Reader 对它们中的任何一个都没有问题 - 填写并签名可以正常工作。

我会 post 文件的来源,但是因为它们有二进制数据,我认为指向它们的链接更好。

问题是:为什么第一个不行,第二个不行?

在您的非工作文件中,所有字体都定义为

/FirstChar 30
/LastChar 255

即有 226 个字形。但是,它们各自的 Widths 数组只有 224 个条目,因此它们是不完整的。

在向每个 Widths 数组添加两个条目后,这里的 Adob​​e Reader 不会 运行 在填写和签名期间再进入那个未知错误。


当 OP 询问我究竟如何更改这些宽度数组时:

我希望更改的副作用尽可能少,所以我很高兴看到有问题的字体词典中有一些空的 space,所以一个简单的十六进制编辑就足够了,不需要转移间接对象并更新交叉引用:

在对象 5、7、9 和 11 中的每个字体定义中,Widths 数组是最后一个字典条目值并以一些白色结尾 space, 在最后一个宽度之后我们有这些字节:

20 0D 0A 5D 0D 0A 3E 3E --- space CR NL ']' CR NL '>' '>'

我使用白色添加了两个 0 值 space:

20 30 20 30 20 5D 3E 3E --- space '0' space '0' space ']' '>' '>'

Acrobat Reader DC - 免费版本,如果您的文档附有元数据,则不允许您再进行填写和签名。

您需要购买 Pro DC 版本,大约 14.99 美元,才能继续使用此处填写并登录。

我刚刚与 Adob​​e 完成了为期 4 个月的电子邮件支持交换,这是他们的最终答复。