PDF格式分析(三十)Linearized PDF 线性化 - Shared Object Hint Table(共享对象提示表)

共享对象提示表提供了查找共享对象所需的信息。共享对象物理上可以位于两个位置中的任何一个位置:
1、从第一页引用的对象应与第一页对象一起定位;
2、 所有其他共享对象应位于共享对象部分

共享对象提示表中的单个条目可以在以下条件下描述一组相邻对象:
1、只有组中的第一个对象从组外部引用;
2、组中的其余对象仅从同一组中的其他对象引用。
3、组中的对象应具有相邻的对象编号。

页偏移提示表、交互式表单提示表和逻辑结构提示表,应通过一个简单的索引,引用共享对象提示表中的条目,该索引是在该表中的顺序位置,从0开始计数。

共享对象提示表应由头部部分(表1)和一个或多个共享对象组条目(表2)组成。

共享对象组条目应该有两种序列:
1、用于位于第一页中的对象的条目,
2、随后用于位于共享对象部分中的对象的条目。
在两种情况下,条目应具有相同的格式。注意,组成每个共享对象组条目的项不必是连续的;它们可以与其他共享对象组的条目中的项分开。每个顺序的项目顺序如下:
a)第一组的第1项,第二组的第1项,依此类推
b)第一组的第2项,第二组的第2项,依此类推
c)第一组的第3项,第二组的第3项,依此类推
d)第一组的第4项,第二组的第4项,依此类推

与第一页相关联的所有对象(第6部分)应在共享对象提示表中具有条目,而不管它们是否实际共享。 第一个条目应引用第一页的开头,并且应具有包含所有初始非共享对象的对象计数和长度。 下一个条目应引用一组共享对象。 后续条目应包含共享或非共享对象的其他组,直到枚举了第一页中的所有共享对象。 (不应有任何引用非共享对象的条目。)

共享对象提示表,标题部分(表1)

item 大小(bits) 详细
1 32 共享对象部分中第一个对象的对象编号。
2 32 共享对象部分中第一个对象的位置。
3 32 第一页的共享对象条目数(包括非共享对象)。
4 32 共享对象部分的共享对象条目数,包括第一页的共享对象条目数。
5 16 表示共享对象组中最大对象数所需的位数。
6 32 共享对象组的最小长度(以字节为单位)。
7 16 表示共享对象组的最大长度和最小长度之间差值所需的位数(以字节为单位)。

共享对象提示表,共享对象组条目(表2)

item 大小(bits) 详细
1 表1,item 7 一个数字,当添加到最小共享对象组长度(表1,第6项)时,给出对象组的长度(以字节为单位)。 第一页的第一个对象的位置应在页面偏移提示表——标题部分中给出。 可以通过累积所有先前对象组的长度来确定后续对象组的位置。 之后,可以从共享对象提示表的标题部分获得共享对象部分中第一个对象的位置(表1,第2项)。
2 1 指示是否存在共享对象签名的标志; 如果签名存在,其值应为1,如果不存在则为0。
3 128 (仅当item 2为1时)共享对象签名,一个16字节的MD5哈希,唯一标识该组对象所代表的资源。注意:它使符合本标准的阅读器能够替换本地缓存的资源副本,而不是从PDF文件中读取它。 请注意,此签名与交互式表单中的签名字段无关。
4 表1, item 5 该组中的对象数 -1 。 第一页的第一个对象应该是其对象号,由文件开头的线性化参数字典中的O条目给出的对象。 后续条目的对象编号可以通过累积所有先前条目中的对象数来确定,直到枚举了第一页中的所有共享对象。之后,共享对象部分中的第一个对象具有可以从共享对象提示表的标题部分获得的数字(表1,第1项)。

猜你喜欢

转载自blog.csdn.net/steve_cui/article/details/82589431
pdf