我正在创建一个用于对 PDF 文档进行数字签名的库。在我的探索过程中,我偶然发现了另一个问题。
在 Acrobat 中我收到错误:
Error during signature verification.
Adobe Acrobat error.
Expected a dict object.
我知道它需要一个字典对象。但我不知道在哪里。
当我将图像添加到签名的 AP
时,就会出现此问题。
为此,我的实现基于规范,并且“Insert multiple digital approval signatures without invalidating the previous one ”
大部分内容似乎都可以正常工作,但是当图像存在时,就会导致错误。图像正确可见。
当前工作:
(这是对错误所在部分的非常简短的概述,可能略有不同,但希望这会有所帮助)
- 我更新了签名注释。添加指向包含正常外观的对象的链接。
16 0 obj
<<
/Type/Annot
/Subtype/Widget
...snip...
/AP<<
/N 21 0 R
>>
>>
- 将图像添加为 XObject
20 0 obj
<<
/Type/XObject
/Subtype/Image
...snip...
/Length 29569
>>
stream
...snip...
endstream
endobj
- 添加 XObject(正常外观)
21 0 obj
<<
/Type/XObject
/Subtype/Form
/Resources<<
/XObject<<
/UserSignature272 20 0 R
>>
>>
/BBox[0 0 135 37.5]
/Length 44
>>stream
q
135 0 0 37.5 0 0 cm
/UserSignature272 Do
Q
endstream
endobj
我认为问题发生在 obj (21 0)
中的某个地方,但我不确定。
这是一个可用于测试的最小文件。 https://drive.google.com/file/d/17sdz2xJy3VhN6i9YiuPrJ6x2s5kU2sra/view?usp=sharing
欢迎任何帮助或提示。
(这篇文章是 PDF Digital Signature has "Bad parameter" in Acrobat 的延续,但涉及同一主题领域的不同问题。)
最佳答案
您在这里遇到了 Adobe Acrobat 的错误:如果您从签名外观流中显示 XObject,它会期望该 XObject 有一个资源条目。这对于表单 XObjects 可能有意义,但对于像您的情况那样的图像 XObjects 则不然。
解决方法是向图像 XObject 添加一个空的资源字典。
我通过替换 /BBox[1 0 0 1 0 0]
来检查这一点在您的图像 XObject 中(无论如何都不需要)/Resources<< >>
.
当 Adobe Acrobat 创建自己的签名外观时,它会在此处创建表单 XObjects 的层次结构,其中包含资源字典,包括“层”的字典。我假设 Adobe Reader 看到 Do 运算符尝试收集有关此类“层”的信息,但没想到会立即遇到图像 XObject。
关于PDF签名: "Expected a dict object",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72935931/