深入解析 PDF 文件结构
我们通常将 PDF (Portable Document Format) 视为一种“所见即所得”的文档格式,但其内部结构远比表面看起来要复杂。一个 PDF 文件并非简单的文本流,而是一个由多个对象组成的、结构化的数据库。当我们用文本编辑器打开一个 PDF 文件时,看到的往往是大量看似乱码的字符和一些特定关键词,这正是 PDF 文件的源代码。 本文将以一段 PDF 文件原始内容为例,深入剖析其内部构造。 PDF 文件的四大组成部分 一个标准的 PDF 文件通常由四个部分顺序组成: 文件头 (Header):文件的第一行,用于声明 PDF 的版本。 文件体 (Body):包含文档所有数据的核心部分,由一系列对象 (Objects) 组成。 交叉引用表 (Cross-Reference Table):记录每个对象在文件中的字节偏移量,实现对对象的快速随机访问。 文件尾 (Trailer):提供查找交叉引用表和关键对象(如文档目录)的入口点。 1. 文件头 (Header) 文件头非常简单,就是文件的第一行,格式为 %PDF-X.Y,其中 X.Y 代表 PDF 规范的版本号。 %PDF-1.7 这行代码明确指出该文件遵循 PDF 1.7 版本的规范。% 符号在 PDF 中通常表示注释,但文件头是唯一的例外。 2. 文件体 (Body) 文件体是 PDF 的核心,由一系列间接对象 (Indirect Objects) 构成。每个对象都有一个唯一的对象编号 (Object Number) 和一个生成号 (Generation Number),通常为 0。 一个典型的对象定义格式如下: <对象编号> <生成号> obj ... 对象内容 ... endobj 例如,示例中的 1 0 obj 和 3 0 obj 都是对象定义: ...