根据PDF 1.7规范,第3.4节(http://www.adobe.com/content/dam/Adobe/en/devnet/acrobat/pdfs/pdf_reference_1-7.pdf,第90页):
前面几节描述了各个对象的语法。这个 部分描述了如何在PDF文件中组织对象以提高效率 随机访问和增量更新。最初是一个规范的PDF文件 由四个元素组成(见图3.2):
标识PDF规范版本的单行标题 该文件符合
包含构成文档中包含的文档的对象的主体 文件
包含间接信息的交叉引用表 文件中的对象
提供交叉引用表位置的预告片 文件正文中的特殊对象
基本上,结构有标题,后面是正文内容,然后是交叉引用表,最后是预告片,它给出了外部参照表的位置。这里的关键部分是trailer
和xref
表位于文件的末尾,xref
表包含正文内容的相关元数据(主要是10位字节偏移量)。
鉴于外部参照表本身位于PDF文件最末端的 :
查看部分下载的PDF文件的屏幕截图:
答案 0 :(得分:4)
OP描述的PDF文件类型也称为"网络优化" (营销术语)或"线性化" (PDF术语中的技术术语)。
必须注意的是,它仅在满足两个额外条件(在文件的线性化特征之上)时才有效:
如果服务器不支持字节流,或者PDF文件未线性化,则整个文件 仍然 需要完全下载才能让观众查看显示任何页面。
OP引用的PDF文件结构说明不适用于线性化PDF文件。它们的组织方式略有不同:
关于其他结构,线性化PDF将其对象分为两组:
在第一组中是文档目录,所有文档级对象以及属于首先要显示的页面的所有对象(不一定是"第0页"!)。对象应按顺序编号。
第二组包含所有其他对象。
这些组应由 两个 xref
表格部分编制索引。
xref
部分紧跟在第一个间接对象之后,非常接近文件的开头。xref
部分位于文件的末尾(就像标准的非线性化PDF一样)。 %PDF-1.x
标题行后面的第一个对象应包含一个字典键,指示文件的/Linearized
属性。
这个整体结构允许一致的读者非常快速地学习完整的对象地址列表,而无需从头到尾下载完整的文件:
在下载完整文件之前,查看者可以非常快速地显示第一页。
用户可以点击缩略图页面预览(或文件ToC中的链接),以便在显示第一页后立即跳转到第445页,并且然后,观察者可以通过请求远程服务器通过字节范围请求来提供这些"无序的请求,来请求页面445所需的所有对象。这样观众可以更快地显示这个页面。 (当用户不按顺序阅读页面时,完整文档的下载仍将在后台进行...)
PDF"线性化的技术细节"可以在 Adobe's original PDF 1.7 Specification 的'规范' 附录F中找到(大约11 MByte - 这本身就是一个例子)线性化的PDF文件!)