数字签名在Adobe Reader中不可见,但在Foxit Reader中可见

问题描述

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

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

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

解决方法

在示例PDF中,签名字段的名称由10个字节,9个字节(值0x00)和1个字节(值0x01)组成。显然,Adobe 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开头的非空字符串的值。我建议根本不使用