PDF签名: "Expected a dict object"

标签 pdf digital-signature acrobat

我正在创建一个用于对 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 的延续,但涉及同一主题领域的不同问题。)

最佳答案

您在这里遇到了 Adob​​e Acrobat 的错误:如果您从签名外观流中显示 XObject,它会期望该 XObject 有一个资源条目。这对于表单 XObjects 可能有意义,但对于像您的情况那样的图像 XObjects 则不然。

解决方法是向图像 XObject 添加一个空的资源字典。

我通过替换 /BBox[1 0 0 1 0 0] 来检查这一点在您的图像 XObject 中(无论如何都不需要)/Resources<< >> .


当 Adob​​e Acrobat 创建自己的签名外观时,它会在此处创建表单 XObjects 的层次结构,其中包含资源字典,包括“层”的字典。我假设 Adob​​e Reader 看到 Do 运算符尝试收集有关此类“层”的信息,但没想到会立即遇到图像 XObject。

关于PDF签名: "Expected a dict object",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72935931/

相关文章:

ios - PDF CMap : Single Glyph to Multiple-Characters Mapping

image - 使用 perl PDF::Create 在 PDF 中插入 JPEG 图像

c++ - C++ 中的规范化 XML

python - 如何在 Python 中使用 PKCS11 签署文件?

javascript - Acrobat:如何使用 Javascript 插入简单文本?

javascript - 什么 JavaScript 会将元数据从 PDF 获取到 Acrobat 动态图章计算中?

powershell - 无法从 PowerShell 使用 Acrobat XI JSObject

Excel:导出为 PDF 不更新

php - 如何创建下载后将从数据库中删除的文件下载

c# - 从 RSA key 对获取私钥/公钥 base64 表示