|
PDF Reference 学习札记 (三)
By Regina
——PDF的书签制作(中)
今天,讨论PDF Reference中书签的代码。
下面,我们的目标写代码,建立如下图所示的一个书签。
[attachment=185787]
对应的代码如下:
21 0 obj
<< /Type /Outlines
/First 22 0 R
/Last 29 0 R
/Count 6
>>
endobj
对象21是“根结点”,根结点没有Parent和Next结点,也没有Title。
22 0 obj
<< /Title ( Document )
/Parent 21 0 R
/Next 29 0 R
/First 25 0 R
/Last 28 0 R
/Count 4
/Dest [ 3 0 R /XYZ 0 792 0 ]
>>
endobj
(A)对象22,是“中间结点”(即“非根结点、叶子结点”),所以有First和Last,以表明其下子孙对象是从“对象25”到“对象28”,共有4个。
(B)在同级结点中,它有“无前趋结点(Prev)”,但有“后继结点(Next)——对象29”。
(C)/Dest 后面跟的参数是对书签的定位,参数形式如下:
/Dest [ page对象 /XYZ 页面X坐标 页面Y坐标 页面大小]
如果,其中某一项的值为null,说明该值的取值仍按照当前的值,不加以改变。
下面的代码一样分析,这里不再详述。
25 0 obj
<< /Title ( Section 1 )
/Parent 22 0 R
/Next 26 0 R
/Dest [ 3 0 R /XYZ null 701 null ]
>>
endobj
26 0 obj
<< /Title ( Section 2 )
/Parent 22 0 R
/Prev 25 0 R
/Next 28 0 R
/First 27 0 R
/Last 27 0 R
/Count 1
/Dest [ 3 0 R /XYZ null 680 null ]
>>
endobj
小结:
/Title ( 标题名 ) ——书签标题名称
/Parent 22 0 R ——根结点无Parent
/Prev 25 0 R ——当前结点对象的“前趋对象”
/Next 28 0 R ——当前结点对象的“后继对象”
/First 27 0 R ——如果当前结点非叶子结点,则表明“子孙结点的开始”
/Last 27 0 R ——如果当前结点非叶子结点,则表明“子孙结点的结束”
/Count 1 ——如果当前结点非叶子结点,则表明“子孙结点的总数”
/Dest [ 3 0 R /XYZ null 680 null ] —— 定位页面。
 |