[TOC] <br/><br/><br/> # <b style="color:#4F4F4F;">简介说明</b> ``` 版本:PDF 作用:PDF(Portable Document Format,便携式文档结构) ``` <br/> # <b style="color:#4F4F4F;">排版元素</b> <br/> # <span style="color:#619BE4">%PDF-[version]</span> ***** 头部标识pdf版本号,分辨率一般是72像素/英寸,即72DPI,其中pdf [mediabox] 标识了像素单位大小 <br/> # <span style="color:#619BE4">obj</span> ***** pdf文件中用到的所有对象,包括文本/图象/音乐/视频/字体/超连接/加密信息等等 <br/> ### 示例内容 <span style="color:red;">1. 举例说明</span> ![pdf_obj](https://img.kancloud.cn/f7/0d/f70d88eb63ec4054e68d470c5884fab2_818x374.png) <br/> # <span style="color:#619BE4">xref</span> ***** 交叉参考表 <br/> ### 示例内容 <span style="color:red;">1. 举例说明</span> ``` xref     0   5     0000000000   65535   f     0000000009   00000   n     0000000074   00000   n     0000000120   00000   n     0000000179   00000   n   其中,xref是开始标志,表示以下为引用表内容; 0   5表示从对象号为0的开始,  连续有5个对象(0,1,2,3,4),分别用5行来表示. 每行的前10个数字代表这个对象相对文件头的偏移地址, 后面5个数字只有当这个对象被删除的时候才有用,表示这个对象被删除后又被重新生成后的对象号, 最后一位f或n表示对象是否被使用(n表示使用,f表示被删除或没有用)   ``` <br/> # <span style="color:#619BE4">trailer</span> ***** 整个pdf文件的入口点 <br/> ### 示例内容 <span style="color:red;">1. 举例说明</span> ``` trailer   <<   /Size   8   /Root   1   0   R   >>   startxref   553   %%EOF         /size   :这个pdf中总共使用了多少个对象     /root   :这个pdf文件的catalog对象的对象号,这是pdf中最顶层的对象     /startxref:   后面的数字表示cross   reference   table的开始位置     /%%EOF   :文件结束符.   ``` <br/> # <span style="color:#619BE4">type</span> ***** pdf支持的8种类型 <br/> ### 示例内容 <span style="color:red;">1. 举例说明</span> ![pdf_type](https://img.kancloud.cn/8f/5f/8f5fc2b4f5e6c38f65327fa2a0b6daf4_817x1593.png) <br/> <span style="color:red;">2. 文档结构</span> ``` +--------------------------+ | +----------------------+ | | | Header | | <-----文件头,表示版本.%PDF-1.M | | | | | +----------------------+ | | | | | | | Body | | <-----文件体,由一系列PDF对象组成 | | | | | | | | | | | | | | | | | | | | | +----------------------+ | | | Cross-reference | | <-----交叉引用表,包含指向所有间接 | | table | | 对象的文件位置索引的列表 | | (xref) | | | +----------------------+ | | | Trailer | | <-----包含文件的根节点信息和 | | | | 文件解析的起点信息 | +----------------------+ | +--------------------------+ ``` <span style="color:red;">3. 实例分析</span> ``` %PDF-1.6 # 文件头,表示该文档符合 PDF 1.6 规范 , % 表示注释 %鲣 # (binary data)二进制, 主要用来表示文件内容是 text 还是 binary 12 0 obj # object 对象, 12是顺序号,0是生成号, obj 为关键词 <</Filter /FlateDecode # 过滤器类别,处理stream 和 endstream 之间的数据时候需要用到的, FlateDecode表示使用zip算法 /Length 1732>> # 表示 stream 和 endstream 之间数据的长度 stream # stream的内容部分 ...... endstream endobj # 标识该对象结束 1 0 obj <</Contents 12 0 R /Parent 2 0 R /MediaBox [0 0 595 842] /Resources 7 0 R /Rotate 0 /Type /Page>> endobj 2 0 obj <</Kids [1 0 R] /Type/Pages /Count 1>> endobj ...... 9 0 obj <</Fields [11 0 R] /XFA [5 0 R] /DA (/Helv 0 Tf 0 g )>> endobj 11 0 obj <</T (gapejess[0]) /Kids [4 0 R]>> endobj 13 0 obj <</AcroForm 9 0 R /Lang (en-us) /Pages 2 0 R /Type/Catalog>> endobj 5 0 obj <</Length 3602 /Filter/FlateDecode>> stream ...... endstream endobj xref # 标识交叉引用表开始 0 14 # 说明下面对象编号是从0开始,总共有14个对象, 从 0 到 13 0000000000 65535 f # 第0个对象,规定生成号为65535,f 表示 free entry,对象不存在或者删除 0000003079 00000 n # 第1个对象,偏移地址为3079,生成号为0表示未被修改过, n 表示 in use 0000003191 00000 n 0000003245 00000 n 0000003695 00000 n 0000003955 00000 n 0000003515 00000 n 0000003347 00000 n 0000003446 00000 n 0000003756 00000 n 0000001823 00000 n 0000003827 00000 n 0000000017 00000 n 0000003878 00000 n trailer # 标识文件尾trailer对象开始 <</Root 13 0 R # 表明根对象的对象号为13,即交叉表中的最后一个对象 /ID [<4E76CDCEDB1E2EC4AC47475DB4EE376E> <C8B1AEBC2C6615E39860F1C150A2847C>] /Size 14 # 表明PDF文件的对象数目 /Info 8 0 R>> startxref 7630 # 交叉引用表的偏移地址,相对于文件开始 %%EOF # 标识文件结束 ``` <br/>