PDF 未知签名图标

PDF Unknown signing icon

我正在以编程方式签署 PDF。每个新签名都以增量方式添加,我在 %EOF 之后添加签名字典,然后像这样更新 AcroForm(抱歉,我在工作,所以我无法上传 PDF):

... // ORIGINAL FILE

trailer
<<
/Size 11
/Root 1 0 R
/Info 10 0 R
>>

startxref
2714
%%EOF
1 0 obj 
<</Type /Catalog /Outlines 2 0 R /Pages 3 0 R /AcroForm <</Fields [11 0 R ] /SigFlags 3 >> /Names 14 0 R >>
endobj

...

11 0 obj 
<</Type /Annot /SubType /Widget /Rect [0 0 0 0 ] /P 4 0 R /F 4 /FT /Sig /T (Signature) /Ff 0 /V <</Type /Sig /Filter /Adobe.PPKLite /SubFilter /adbe.pkcs7.detached /ByteRange [0 3729 15473 422                   ] /Contents <308209...> 
/M (D:20170801165520+02'00') >> >>
endobj

...

trailer
<</Size 15 /Root 1 0 R /Info 10 0 R /Prev 2714 >>
startxref
15609
%%EOF
1 0 obj 
<</Type /Catalog /Outlines 2 0 R /Pages 3 0 R /AcroForm <</Fields [15 0 R ] /SigFlags 3 >> /Names 14 0 R >>
endobj

...

15 0 obj 
<</Type /Annot /SubType /Widget /Rect [0 0 0 0 ] /P 4 0 R /F 4 /FT /Sig /T (Signature) /Ff 0 /V <</Type /Sig /Filter /Adobe.PPKLite /SubFilter /adbe.pkcs7.detached /ByteRange [0 16632 28376 387                  ] /Contents <3082062...> 
/M (D:20170802094848+02'00') >> >>
endobj
16 0 obj 

...

<</Size 18 /Root 1 0 R /Info 10 0 R /Prev 15609 >>
startxref
28476
%%EOF

也许问题是我有多个具有相同 ID 的对象,而我的最后一个 AcroForm 仅引用最后一个签名?我希望能够多次签署一个文件,但我遇到了问题。第一次签名没问题,并显示此横幅:

然后我又尝试用另一个证书对同一个文件签名,这让我在签名旁边看到这个垃圾桶图标,并说它已被删除,正如您在此处看到的那样:

我正在使用 Zend_PDF 解析文件并添加签名。

编辑: 感谢@mkl,Adobe Reader 现在可以识别 2 个签名。我的 AcroForms 现在看起来像这样:

2714
%%EOF
1 0 obj 
<</Type /Catalog /Outlines 2 0 R /Pages 3 0 R /AcroForm <</Fields [11 0 R ] /SigFlags 3 >> /Names 14 0 R >>
endobj

... 

15610
%%EOF
1 0 obj 
<</Type /Catalog /Outlines 2 0 R /Pages 3 0 R /AcroForm <</Fields [11 0 R 15 0 R ] /SigFlags 3 >> /Names 14 0 R >>
endobj

...

而且我有这个令人惊讶的错误,因为我没有修改任何关于 ByteRange 的内容并且我手工验证它们是正确的。是关于我的新修改吗?

添加第一个签名时,您将 AcroForm 字典设置为

/AcroForm <</Fields [11 0 R ] /SigFlags 3 >> 

第二个,你设置为

/AcroForm <</Fields [15 0 R ] /SigFlags 3 >>

即您从中删除了 11 0 R 并向其中添加了 15 0 R。因此,您确实删除了表单结构中的第一个签名字段。

您应该只添加新的签名字段:

/AcroForm <</Fields [11 0 R 15 0 R ] /SigFlags 3 >>

此外,您的两个签名字段同名

11 0 obj 
<<
    ...
    /T (Signature) 
    ...
>>
endobj
...
15 0 obj 
<<
    ...
    /T (Signature)
    ...
>>
endobj

很明显,不同的表单字段必须有不同的名称。