PDF文件格式的解析
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
下一篇:frp后台运行和停止