首页>>技术分享>>Linux>PDF文件格式的解析

PDF文件格式的解析

大路 Linux 2023-10-12 139

PDF文件格式


PDF文件主要由四部分组成


  • 文件头


一般就是表示该pdf文件遵循的pdf文件版本,例如1.3, 1.7等


  • 文件内容


实际存储文件内容的部分, 按obj 对象进行存储, 每个obj对象有一个编号, 但是不一定是顺序存储的。


  • 交叉引用表


记录每个obj在整个文件中的位置, 通过偏移量进行定位。 一个文件可以有多个交叉表


  • 文件尾


相对于文件头来说,文件尾存储了最关键的文件meta信息,1. 交叉引用表在整个文件重的偏移位置 2. 文档的根对象的编号 3. 文档中具备的对象的个数


解析过程


首先解析文件尾,得到交叉应用表和根对象编号。然后通过交叉引用表以及根对象编号,逐层解析文档, 构建文档数。注意根目录中一半都存在/PAGES对象, 这个代表了页面的根节点。


对象类型


包括直接对象和间接对象两种,直接对象就是直接存储实际内容了,间接对象是通过一个指向另一个对象的指针.


主要说一下最重要的页面对象,其实页面对象存储的数据可以简化理解为一个dict, 包括实际文字内容,图像媒体信息,字体样式等各种资源(可以通过指定一个对象,间接表示)


一个文档示例


%PDF-1.3

1 0 obj

  << /Type /Catalog

     /Pages 2 0 R

  >>

endobj



2 0 obj

  << /Type /Pages

     /Kids [3 0 R]

     /Count 1

  >>

endobj



3 0 obj

  << /Type /Page

     /Parent 2 0 R

     /MediaBox [0 0 600 400]

     /Resources << >>

  >>

endobj



xref

0 4

00000000000 65535 f

00000000010 00000 n

00000000069 00000 n

00000000141 00000 n

trailer

  << /Root 1 0 R

     /Size 4

  >>

startxref

249

%%EOFΩ


标签:
上一篇:libevent