我们有一个用于向PDF文档添加电子签名的API。由我们的API签名的PDF文档通常具有以下结构:
/Type/Annot/
/Type/Sig/
/Type/Font/BaseFont/Helvetica
/Type/Font/BaseFont/ZapfDingbats
/Type/XObject/Subtype/Form
/Type/Page/
/Type/Catalog/
xref
0 1
0000000000 65535 f
57 1
0000088682 00000 n
221 7
0000088804 00000 n
0000088450 00000 n
0000054970 00000 n
0000088289 00000 n
0000054837 00000 n
0000088111 00000 n
0000088211 00000 n
trailer
<</Size 228/Root 221 0 R/Info 222 0 R/ID [<e8f997fdc4d9ee619c59add6882586d8><d13406b4c1e0cb3de6c1e8dd21d6be13>]/Prev 50291>>
startxref
89038
%%EOF然而,当我们分析其他API输出时,我们也看到了如下结构:
/Type/Sig
/Type/XObject/Subtype/Form
/Type/Metadata/Subtype/XML
/Type/Catalog
/Type/ObjStm/N 4
34 0 obj
<</Length 52/Filter/FlateDecode/Size 35/Root 8 0 R/Info 6 0 R/ID [<4dc91a1875a6d707aec203bb021c93a0><b6fc5ae423a75860537207ff441de268>]/W[1 2 2]/Type/XRef/Index[0 2 6 1 8 2 28 7]/Prev 116>>stream
xœc``øÿŸq‘-ãB9 ±Şš‰A™QÈ]Pá%AXŒ ‚‰¤ =› ñ
endstream
endobj
startxref
45383
%%EOF我们在PDF Standart文档和将电子签名添加到PDF文档指南中都找不到任何关于这一区别的参考。您能提供关于何时使用哪种格式的信息吗?
提前感谢
发布于 2018-01-29 20:12:51
你的问题与iText完全无关,甚至与数字签名也无关。
让我们从PDF开始,像这样结束:
xref
0 1
0000000000 65535 f
57 1
0000088682 00000 n
221 7
0000088804 00000 n
0000088450 00000 n
0000054970 00000 n
0000088289 00000 n
0000054837 00000 n
0000088111 00000 n
0000088211 00000 n
trailer
<</Size 228/Root 221 0 R/Info 222 0 R/ID [<e8f997fdc4d9ee619c59add6882586d8><d13406b4c1e0cb3de6c1e8dd21d6be13>]/Prev 50291>>
startxref
89038
%%EOF您会看到文件结束标记(%%EOF)位于交叉引用表(startxref,在本例中,xref表从位置89038开始)的开始位置之前。
交叉引用表定义了PDF中每个对象的字节偏移量。在PDF 1.5之前的PDF版本中,交叉引用表格是以纯文本形式添加的,并且每个字节偏移量都是使用十位数字定义的。因此,文件的大小将被限制在10到10字节(大约10 10)。
PDF 1.5之前版本的PDF的最大大小约为10 10。
从PDF 1.5开始,您还可以拥有以下内容:
34 0 obj
<</Length 52/Filter/FlateDecode/Size 35/Root 8 0 R/Info 6 0 R/ID [<4dc91a1875a6d707aec203bb021c93a0><b6fc5ae423a75860537207ff441de268>]/W[1 2 2]/Type/XRef/Index[0 2 6 1 8 2 28 7]/Prev 116>>stream
xœc``øÿŸq‘-ãB9 ±Şš‰A™QÈ]Pá%AXŒ ‚‰¤ =› ñ
endstream
endobj
startxref
45383
%%EOF我们仍然有文件结束标记,并且我们仍然指向交叉引用表的起点,但是交叉引用表的条目不再以明文显示。它们是压缩的:xœc``øÿŸq‘-ãB9 ±Şš‰A™QÈ]Pá%AXŒ ‚‰¤ =› ñ
这允许您创建文件大小大于10 10的文件。所有这些都在ISO 32000-1和ISO 32000-2中进行了解释。
这是PDF规范的屏幕截图:

如果您有对文档进行数字签名的软件,但只支持PDF 1.5之前的格式,我会严重质疑该软件是否支持符合当今标准的数字签名。我最近看到一个项目,一个开发人员仍然使用SHA-1作为散列算法。幸运的是,我可以通过向他推荐blog about SHA-1来解释这是错误的,否则如果他的雇主发现了他(或者如果他的客户发现他正在为不再被认为是安全的签名付费而提起诉讼),他很可能已经被解雇了。
https://stackoverflow.com/questions/48500257
复制相似问题