PDF 分页 字体 标签 详解

来源:互联网 发布:大数据金融运行模式 编辑:程序博客网 时间:2024/05/06 22:07

%PDF-1.6    PDF版本号
---------------------------------------------------------------------------------
1  0  obj
<< /Type  /Catalog
  /Outlines  2 0 R
  /Pages  3 0 R
>>
endobj

前面那个1 是对象号 0 代表 如果这个对象被修改将会增加1 后面的obj是关键字 (记住咯  下面就不讲了)
<< >> 字典符号 用于括内容
其中,“/Type  /Catalog”说明了该对象的类型是/Catalog(即“目录”对象),它是PDF文档的根对象。

“/Type”中除了有“/Catalog(目录对象)”外,还有“/Outlines(书签大纲对象)”、“/Pages (页面组对象)”以及“页面组对象/Pages”中含有的若干“/Page(页面对象)”等。
“2 0 R”和“3 0 R”都是对对象的“间接引用”。“2 0 R”就是在引用“2 0 obj”对象,“3 0 R”就是在引用“3 0 obj”对象。
---------------------------------------------------------------------------------
2  0  obj
<< /Type  /Outlines
   /First 10 0 R
  /Last 11 0 R
  /Count  2
>>
endobj

标签对象 
/First 是第一个标签的意思  引用  第10个对象 
/Last 最后一个标签 引用的是 第11个对象
/Count 是标签数量
----------------------------------------------------------------------------------

 3  0  obj
<<  /Type  /Pages
  /Kids  [  4 0 R 8 0 R ]
  /Count  2
>>
页数组 对象 用来记录 多少个页
--------------------------------------------------------------------------------
4  0  obj
<<  /Type  /Page
  /Parent  3 0 R
  /MediaBox  [  0  0  612  792  ]
  /Contents  5 0 R
  /Resources  <<  /ProcSet  6 0 R
  /Font  <<  /F1  7 0 R  >> >>
>>
endobj

页对象
/Parent是指向哪个页数组对象 这里是3 对象 同样 3对象里的页数组里也包含 4对象
/MediaBox  设置页面 大小
/Contents  内容显示 对象5
/Resources 指定输入的类型 对象6
/Font 字体
---------------------------------------------------------------------------------
5  0  obj
<<  /Length  73  >>
stream
BT
/F1  28  Tf
100 600 Td
5 Tr
50 Tz
30 Tw
1 0 0 rg
0 0 1 RG
(Hello  Xiao Hui!)Tj
ET
endstream
endobj

页面输入内容对象
/Length             内容的长度
stream   endstream  关键字 内容流对
BT ET               字体关键字对
/F1  28  Tf         指定字体 大小
100 600 Td          指定字体在页面的所在位置
5 Tr 50 Tz 30 Tw 1 0 0 rg 0 0 1 RG  字体样式
(Hello  Xiao Hui!)Tj  输入内容
-------------------------------------------------------------------------------------

6  0  obj
[  /PDF  /Text  ]
endobj

输入内容的类型
--------------------------------------------------------------------------------------
7  0  obj
<<  /Type/Font/Subtype/Type1/Name/F1/BaseFont/Helvetica/Encoding/MacRomanEncodin
>>
endobj
字体的样式
-------------------------------------------------------------------------------------

8  0  obj
<<  /Type  /Page
  /Parent  3 0 R
  /MediaBox  [  0  0  612  792  ]
  /Contents  9 0 R

  /Resources  <<  /ProcSet  6 0 R
  /Font  <<  /F1  7 0 R  >> >>
>>
endobj

第二页内容  引用 对象9里的内容 详解看对象4
------------------------------------------------------------------------------------
9  0  obj
<<  /Length  73  >>
stream
BT
/F1  38  Tf
100 100 Td
2 Tr
50 Ts
5 Tc
1 0 0 rg
0 0 1 RG
(Hello Hai Ming!)Tj
ET
endstream
endobj

第二页 所显示的内容 详解看 对象5
--------------------------------------------------------------------------------
10 0 obj
<< /Title (xiaohui)/Parent 2 0 R/A 13 0 R /Next 11 0 R /First 16 0 R /Last 16 0 R /Count 1>>
 
开头标签
/Title 标签名
/Parent  指定标签属于哪个对象 这里指 对象2
/A  点击触发事件
/Next  指定下个标签 (必须有这个 要不下面的标签出不来)
/First  /Last 子级标签的 头 和尾
/Count 标签数量
--------------------------------------------------------------------------------
11 0 obj
<< /Title (xiaojie)/A 12 0 R /Parent 2 0 R /Prev 10 0 R /F 0/C[ 0 0 0]
>>
endobj

尾标签
意思同上
/Prev  指定上一个标签 (必须有)
---------------------------------------------------------------------------------
12 0 obj
<</Type/Action/S/GoTo/D 14 0 R>>
endobj
对象10 的触发事件
-------------------------------------------------------------------------------
13 0 obj
<</Type/Action/S/GoTo/D 15 0 R>>
endobj

对象11 的触发事件

---------------------------------------------------------------------------------

14 0 obj
[ 8 0 R/FitH 418.17]
endobj

当点击xiaohui标签的时候 页面将跳到 对象14里的方位
--------------------------------------------------------------------------------
15 0 obj
[ 4 0 R/FitH 701.125]
endobj
当点击haiming 和xiao jie标签的时候 页面将跳到 对象15里的方位

--------------------------------------------------------------------------------
16 0 obj
<< /Title (HAI Ming)/A 12 0 R /Parent 1 0 R /F 0/C[ 0 0 0]
>>
endobj

标签 xiaohui 的子标签
-------------------------------------------------------------------------------
xref
0  18
0000000000  65535  f
0000000009  00000  n
0000000074  00000  n
0000000120  00000  n
0000000179  00000  n
0000000322  00000  n
0000000422  00000  n
0000000364  00000  n
0000000466  00000  n
0000000496  00000  n
0000000555  00000  n
0000000666  00000  n
0000000411  00000  n
0000000377  00000  n
0000000454  00000  n
0000000423  00000  n
0000000511  00000  n
0000000644  00000  n

交叉引用表如果这个表被破坏,那整个PDF文档就不能被Adobe Acrobat Reader打开了,但Foxit Reader的容错率比较强,它还是可以打开的,所以建议大家把上面的文件保存后,用Foxit Reader打开

第二行“0  18”这两个数,第一个“0”表示“交叉引用表”的起始对象号(这个文件是0,为PDF自定义的对象0,无特殊作用),第二个“18”表示“交叉引用表”的对象总数(包含刚才自定义的0对象)。
其余的行,每行为一个对象。
“0000000000  65535  f”这一行比较特殊。“0000000000”表示该对象在的起始位置为0,生成数为65535,f表示该对象未被引用,这是PDF的规定。
剩下的行中,n表示该对象已被引用
----------------------------------------------------------------------------------------------
trailer
<<  /Size  18
  /Root  1 0 R
>>
startxref
625
%%EOF

这是PDF文件的“文件尾”部分,以trailer对象的开始,“trailer <<  >>”里面是一个字典
“/Size  18”表示该PDF文件中的obj对象总数。
“/Root 1 0 R”表示该PDF文件中的根对象,为“1 0 obj”。
“Startxref 625”表示“交叉引用表”的偏移地址,可以用它来定位PDF文档中所有的对象的相对地址。
一般放在文件最后,是文件结束标志。

原创粉丝点击