pdf ISO 32000-1的第 7.5.5 节说
\n\n\n\n\nPDF 文件的预告片使合格的读者能够快速找到交叉引用表和某些特殊对象。符合要求的读者应从末尾阅读 PDF 文件。文件的最后一行应仅包含文件结束标记 %%EOF。前面两行应按顺序包含每行一个关键字 startxref 和解码流中从文件开头到最后一个交叉引用部分中 xref 关键字开头的字节偏移量。startxref 行前面应有 Trailer\n 字典,由关键字 Trailer 后跟一系列用双尖括号括起来的键值对组成 (<<\xe2\x80\xa6>>)(使用 LESS-大于符号 (3Ch) 和大于符号 (3Eh))。
\n
但我发现了这个pdf文件不遵循这个规则,尽管它可以通过pdfviewer打开没有任何问题。具体来说,该文件的最后 5 行是
\n\ntrailer\n<</Size 352/ID[<9257C760F49955A23047D72C37914E79> <82F1302E14912449A9BB43536F853CD6>]>>\nstartxref\n116\n%%EOF\nRun Code Online (Sandbox Code Playgroud)\n\n显然这个预告片字典是不正确的,因为标准规定这个字典必须包含一个作为Root键的条目,而这个预告片没有。然后我发现偏移量116指向另一个外部参照表,该表几乎位于文件的开头,后面是另一个预告片,其中确实包含Root entry.
xref\n352 24\n0000000016 00000 n\n0000001914 00000 n\n0000001980 00000 n\n0000002147 00000 n\n... ...\ntrailer\n<</Size 376/Root 353 0 R/Info 351 0 R/ID[<9257C760F49955A23047D72C37914E79><82F1302E14912449A9BB43536F853CD6>]/Prev 4183097>>\nRun Code Online (Sandbox Code Playgroud)\n
你所描述的看起来像是一个线性化的PDF。由于您已经参考了 PDF 规范,因此您还应该查看附件 F(规范)线性化 PDF,特别是F.3.11 主要交叉参考和预告片(第 11 部分)部分:
主预告片没有Prev条目,并且不得包含除Size之外的任何条目。
因此,至少对于线性化 PDF,预告片不需要包含您正在查找的条目。严格来说,示例文件的最终预告片中实际上存在一个不同的错误:它包含一个ID条目,尽管要求它不得包含除Size之外的任何条目。
在 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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4615 次 |
| 最近记录: |