我正在尝试务实地创建一个可见的 PDF 签名。不可见的签名有效,但是当我添加 AP(外观)对象时,我在 Acrobat Reader 中收到错误消息:“对象标签格式错误”。
我制作的相关 XObject 如下所示:
38 0 obj
<</F 132/Type/Annot/Subtype/Widget/Rect[343.0 142.0 543.0 192.0]/FT/Sig/DR<<>>/T(signature38)/V 40 0 R/AP <</N 41 0 R>>>>
endobj
39 0 obj << /Length 52 /Type /XObject /Subtype /Form /Resources << /XObject << /n2 42 0 R /n0 43 0 R >> /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] >> /BBox [0.0 0.0 200.0 50.0] /FormType 1 >> stream q 1 0 0 1 0 0 cm /n0 Do Q q 1 0 0 1 0 0 cm /n2 Do Q endstream endobj
40 0 obj
<</Contents <...>
/Type/Sig/SubFilter/adbe.pkcs7.detached/Location()/M(D:19700101010000+01'00')
/ByteRange [0000000000 0000064440 0000068536 0000220176]/Filter/Adobe.PPKLite/Reason()/ContactInfo()>>
endobj
41 0 obj << /Length 27 /Type /XObject /Subtype /Form /Resources << /XObject << /FRM 39 0 R >> /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] >> /BBox [0.0 0.0 200.0 50.0] /FormType 1 >> stream q 1 0 0 1 0 0 cm /FRM Do Q endstream
endobj
42 0 obj << /Length 31 /Type /XObject /Subtype /Form /BBox [0.0 0.0 200.0 50.0] /Matrix [1.0 0.0 0.0 1.0 0.0 0.0] /Resources << /XObject << /img1 44 0 R >> /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] >> /FormType 1 >>
stream q 200 0 0 50 0 0 cm /img1 Do Q
endstream
endobj
43 0 obj << /Length 0 /Type /XObject /Subtype /Form /BBox [0.0 0.0 200.0 50.0] /Resources << >> /FormType 1 >> stream endstream endobj
44 0 obj << /Length 218095 /Type /XObject /Subtype /Image /Filter /DCTDecode /BitsPerComponent 8 /Width 1300 /Height 1261 /ColorSpace /DeviceRGB
stream
-JPEG bytes-
endstream
我似乎找不到其中的错误,但我一定遗漏了一些东西。我阅读了Adobe 的整个文档以及其他一些博客,并据此编写了我的代码。
**更新: **
我根据 mkl 的评论更改了代码:
38 0 obj
<</F 132/Type/Annot/Subtype/Widget/Rect[343.0 142.0 543.0 192.0]/FT/Sig/DR<<>>/T(signature38)/V 40 0 R/P 3 0 R/AP <</N 41 0 R>>>>
endobj
39 0 obj
<<
/Length 52
/Type /XObject
/Subtype /Form
/Resources <<
/XObject <<
/n2 42 0 R
/n0 43 0 R
>>
/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
>>
/BBox [0.0 0.0 200.0 50.0]
/FormType 1
>>
stream
q 1 0 0 1 0 0 cm /n0 Do Q q 1 0 0 1 0 0 cm /n2 Do Q
endstream
endobj
40 0 obj
<<content>>
endobj
41 0 obj
<<
/Length 27
/Type /XObject
/Subtype /Form
/Resources <<
/XObject <<
/FRM 39 0 R
>>
/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
>>
/BBox [0.0 0.0 200.0 50.0]
/FormType 1
>>
stream
q 1 0 0 1 0 0 cm /FRM Do Q
endstream
endobj
42 0 obj
<<
/Length 31
/Type /XObject
/Subtype /Form
/BBox [0.0 0.0 200.0 50.0]
/Matrix [1.0 0.0 0.0 1.0 0.0 0.0]
/Resources <<
/XObject <<
/img1 44 0 R
>>
/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
>>
/FormType 1
>>
stream
q 200 0 0 50 0 0 cm /img1 Do Q
endstream
endobj
43 0 obj
<<
/Length 0
/Type /XObject
/Subtype /Form
/BBox [0.0 0.0 200.0 50.0]
/Resources <<
>>
/FormType 1
>>
stream
endstream
endobj
44 0 obj << /Length 9451 /Type /XObject /Subtype /Image /Filter /DCTDecode /BitsPerComponent 8 /Width 1300 /Height 1261 /ColorSpace /DeviceRGB
stream
--JPEG bytes--
endstream
在这里你可以下载我的PDF。
更新 2:我的外部参照表似乎存在错误,它们没有指向正确的 XObjects,这就是我收到错误的原因。但是,现在即使我的 PDF 没有损坏并且签名正常(adobe 会告诉签名无法验证,因为证书是自签名的,但没关系)。
但是现在,我有另一个问题:图像没有出现。它是可点击的并且可以工作,但它都是空白的。
此处提供了 PDF 的新版本。