当前位置: 首页 > 知识库问答 >
问题:

PDF未知签名图标

吴正祥
2023-03-14

我以编程方式签名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现在可以识别这两个签名。我的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的任何内容,并且我手动验证它们是正确的。是关于我的新修改吗?

共有1个答案

姬英耀
2023-03-14

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

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

对于第二个,您将其设置为

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

也就是说,您从中删除了11 0r,并向其中添加了15 0r。因此,您确实从表单结构中删除了第一个签名字段。

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

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

此外,两个签名字段的名称相同

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

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

 类似资料:
  • 嗨,我试图读取一个PDF文件,这是由servlet上传。 这是密码 我的pdf是这样开始的%PDF-1.6 错误消息java.io.IOExcture:找不到PDF标头签名。

  • 问题内容: 我尝试运行以下代码。顺便说一句,我是python和sklearn的新手。 其中y是0和1的np.ndarray 我收到以下信息: 文件“ C:\ Anaconda3 \ lib \ site-packages \ sklearn \ linear_model \ logistic.py”,行> 1174,适合check_classification_targets(y) 文件“ C:\

  • Client=My application,Server=MSSP(移动签名服务提供商) 服务器仅对哈希值进行签名。 要签名数据: *Base64编码的SHA-384待签名数据摘要。(64个字符) *Base64编码的SHA-512待签名数据摘要。(88个字符) *要签名的Base64编码的DER编码的PKCS#1摘要信息。 注意:我使用MSSP(移动签名服务提供商)架构。对于SHA256算法,D

  • 我有一个关于计算PDF文档摘要以用于数字签名的快速问题(与我前面的一个问题有点相关,我试图弄清楚为什么您需要知道客户的证书以创建正确的摘要)。在Adobe关于PDF格式的文档中,指定了以下内容: 字节范围摘要应在文件中的一个字节范围内计算,该范围应由签名字典中的字节范围条目指示。这个范围应该是整个文件,包括签名字典,但不包括签名值本身(内容条目)。 因此,在这一点上,事情似乎相当简单,只需消化除/

  • 我正在使用iText 5.5.9和数字签名白皮书示例中给出的示例为PDF生成数字签名。 我得到了普通的数字签名外观。我需要的是一个数字签名,它显示一个图标,指示它的验证状态,就像这个例子中的黄色问号: 这个黄色问号会根据签名是否被验证而变成红色十字或绿色刻度。 在过去的两天里,我一直在搜索这篇文章,我看到的唯一区别是,我使用的数字证书是自签名的,而参考PDF中使用的数字证书是由Adobe Appr

  • 我正试图用BouncyCastle CMS签署一份PDF文件。签名有效,但Adobe Reader告诉我它还没有准备好LTV。 据我所知,CRL嵌入在CMS SignedData中。证书也被嵌入其中。还嵌入了时间戳。 签名是一个分离的签名,放在“预留空间”。 为什么签名还没有准备好?我是不是做错了什么? 签名测试-PDF:http://www.filedropper.com/outputx 代码: