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
很明显,不同的表单字段必须有不同的名称。
我正在以编程方式签署 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
很明显,不同的表单字段必须有不同的名称。