为什么此pdf中的预告片不符合PDF标准?

时间:2017-03-08 09:45:28

标签: pdf

pdf ISO 32000-1的第7.5.5节说

  

PDF文件的预告片使符合本标准的阅读器能够快速找到交叉引用表格   特殊物品。合规读者应从其末尾阅读PDF文件。文件的最后一行应包含   只有文件结束标记,%% EOF。前两行应包含,每行一个,按顺序,   关键字startxref和从文件开头到开头的解码流中的字节偏移量   最后一个交叉引用部分中的xref关键字。 startxref行前面应有预告片   字典,由关键字预告片组成,后跟一系列以双角括起来的键值对   括号(<<>>)(使用LESS-THAN SIGNs(3Ch)和GREATER-THAN SIGNs(3Eh))。

但我发现this pdf文件不符合此规则,但可以通过pdfviewer打开而不会有任何问题。具体来说,此文件的最后5行是

trailer
<</Size 352/ID[<9257C760F49955A23047D72C37914E79>       <82F1302E14912449A9BB43536F853CD6>]>>
startxref
116
%%EOF

显然这个预告片字典不正确,因为标准说这个字典必须包含一个以Root为键的条目,而这个预告片没有。然后我发现偏移116指向另一个外部参照表,它几乎位于文件的开头,后跟另一个确实包含Root entry的预告片。

xref
352 24
0000000016 00000 n
0000001914 00000 n
0000001980 00000 n
0000002147 00000 n
... ...
trailer
<</Size 376/Root 353 0 R/Info 351 0 R/ID[<9257C760F49955A23047D72C37914E79><82F1302E14912449A9BB43536F853CD6>]/Prev 4183097>>

1 个答案:

答案 0 :(得分:1)

您描述的内容看起来像线性化的PDF。因此,您已经参考了PDF规范,因此您还应该查看附件F(规范性)线性化PDF ,特别是 F.3.11主要交叉引用和预告片(第11部分

  

主要预告片没有上一个条目,不得包含尺寸以外的任何条目。

因此,至少对于线性化的PDF,预告片不需要具有您正在寻找的条目。严格来说,样本文件的最终预告片实际上存在不同的错误:它包含 ID 条目,尽管要求不包含大小以外的任何条目

在F.3.1中,您将找到线性化PDF结束的示例:

trailer
<< /Size 43>>% Trailer need not contain other entries; in particular,
% it should not have a Prev entry
% Offset of first-page cross-reference table (part 3)
startxref
257
%%EOF