详谈Pdf数据结构规范—--交叉引用表篇 今天我们仍然继续讲解pdf的数据结构规范,主题内容是关于pdf中的交叉引用表,何为pdf文件流中的交叉引用表呢?根据上一节的介绍,我们已经清楚的知道pdf文件主要由4个部分组成:1.文件头,2.文件体,3.交叉引用表,4.文件尾。要理解交叉引用表,根据我们的思维,我们还得从pdf文件流中的文件尾说起,文件尾以trailer标识符开始,如下列子所示: Trailer << /Size 9 /Root 1 3 R >> startxref 889 %%EOF 其中<< ….>>中表示trailer中的内容,size 8 表示本pdf文档中的obj对象数目有9个,root 1 3 r表示本文档中的根对象标示符是1,且已经被修改过3次。Startxref主要表示xref(交叉引用表)的在pdf文件流中的偏移位置,即当支持pdf的工具如阅读器,云夹pdf格式转换器(pdf转换成word)等相关的工具要很快的找到pdf中交叉引用表的偏移位置时,只需要直接读取文件流中末尾的位置,就可以通过交叉引用表的偏移地址直接访问交叉引用表。交叉引用表具体又能有什么功能呢,pdf数据结构规范为了方便访问pdf文件流中的任何一个obj,所以就将所有obj的偏移地址都存储了起来放到了交叉引用表中, 方便随机的访问每个obj,进而大大提高了效率,如下为交叉引用表文件流的一个案例 : xref 0 8 0000000000 65535 f 0000000009 00000 n 0000000074 00000 n 0000000120 00000 n 0000000179 00000 n 0000000322 00000 n 0000000415 00000 n 0000000445 00000 n xref表示交叉引用表的起点,0 8 表示本文档中对象号以1开始,并且总共有8个对象,几乎每一个pdf文档都是以0000000000 65535 f这样的数据为第一行的,说明对象0是的起始地址是0000000000, 最大产生号为65535,不能再更改。从这个交叉引用表的描述过程中,我们可以看到pdf文件流中的交叉引用表达到的效果是将每个对象的偏移地址量存储了起来,这样支持pdf的工具如云夹http://www.onlinedown.net/soft/292401.htm gillian |