1

我正在使用这个库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

4

1 回答 1

2

在您的示例 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 

但是只有这样, T入口的字符串值实际上包含了上面提到的9个0x00字节和1个0x01字节。这是必须更改为不以 0x00 开头的非空字符串的值。我建议根本不使用 < 0x20 的字节。此外,点 0x2e 不得在名称中使用,它保留用于分隔部分名称。

于 2020-11-03T10:12:41.030 回答