【问题标题】:Digital signature not visible in Adobe reader but visible in Foxit reader数字签名在 Adob​​e 阅读器中不可见,但在福昕阅读器中可见
【发布时间】:2021-02-15 06:05:57
【问题描述】:

我正在使用这个库 https://github.com/vbuch/node-signpdf 来签署一个 pdf 文档。签署文件后,我可以在使用 Foxit reader 打开 pdf 时看到签名,但在使用 Adob​​e reader DC 打开时看不到。我也尝试过 Adob​​e reader XI,但我也看不到它。 当我在 pdf xchange 查看器中打开文档时,出现此错误:non critical errors detected in the xref table.

任何想法可能是什么问题?

这是我签署的文件:https://drive.google.com/file/d/1AZvS4sP2Y3FwW4Deod87Dgxc9I0QZkoc/view?usp=sharing

【问题讨论】:

  • 请分享您签名的 PDF 文件以供分析。
  • 如何将文件附加到我的问题中?
  • 堆栈溢出不提供附加文件的方法。因此,人们通常使用文件共享服务(例如 google drive 或 drop box 上的公共共享;请不要使用在下载文件的过程中放置​​大量广告的服务)来托管文件并在此处共享访问 URL。
  • @mkl 谢谢你的解释。我将文件添加到问题中。

标签: pdf adobe digital-signature foxit


【解决方案1】:

在您的示例 PDF 中,签名字段的名称由 10 个字节、9 个值为 0x00 的字节和一个值为 0x01 的字节组成。显然 Adob​​e Reader 不喜欢该字段名称。

经过一些实验,Adobe Reader 似乎不喜欢以 0x00 字节开头的字段名称。

也许它包含一些以 c'ish 方式确定字符串长度并将 0x00 解释为字符串结尾的代码。因此,带有前导 0x00 字节的字段名称被解释为空字符串,Adobe Reader 也不接受字段名称。

因此,请使用由(特别是开头)一些有意义的字符组成的签名字段名称。由于验证器通常会显示签名字段的名称,因此无论如何这是个好主意。


就低级 PDF 对象而言:

签名字段对象如下所示:

18 0 obj
<<
/Type /Annot
/Subtype /Widget
/FT /Sig
/Rect [0 0 0 0]
/V 17 0 R
/T (         )
/F 4
/P 1 0 R
>>
endobj 

但只有like这个,T条目的字符串值实际上包含了上面提到的9个0x00字节和1个0x01字节。这是必须更改为不以 0x00 开头的非空字符串的值。我建议根本不使用

【讨论】:

  • 在哪里可以看到签名字段的名称?
  • 我在编辑器中打开了 pdf,但我看到的只是:/Name (����������)
  • 签名字段的名称是签名字段对象中 T 条目的值,但该条目在您的编辑器中应该看起来相似。不幸的是,我的 JavaScript 知识不足以清楚地指出这里有问题的代码。
  • 不错!我将 T 条目的第一个数字从 00 更改为 01,现在签名可见。非常感谢mkl!也许您可以将带有 T 字段的提示添加到您的答案中?
猜你喜欢
  • 2015-06-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-20
  • 1970-01-01
  • 1970-01-01
  • 2021-06-02
相关资源
最近更新 更多