← 返回首页

PDF 内部结构

PDF 文件解析序列图

sequenceDiagram autonumber participant Reader as PDF 阅读器 participant Header as 文件头 participant Body as 文档主体 participant XRef as 交叉引用表 participant Trailer as 文件尾 Reader->>Header: 读取版本标识 Note over Reader,Header: 确认 PDF 版本 (如%PDF-2.0) Reader->>Trailer: 定位文件尾 Note over Reader,Trailer: 回溯查找 startxref Reader->>XRef: 解析交叉引用表 Note over Reader,XRef: 获取所有对象偏移量 Reader->>Body: 读取 Catalog 对象 Note over Reader,Body: 文档根对象 Reader->>Body: 遍历 Pages 树 Note over Reader,Body: 加载所有页面 Reader->>Body: 解析内容流 Note over Reader,Body: 渲染文本和图像 Reader->>Reader: 完成文档显示
文件头

%PDF-2.0

文档主体

间接对象集合

交叉引用表

XRef 流/表

文件尾

startxref + %%EOF

PDF 对象层次结构

graph TD Catalog[Catalog
文档根对象] --> Pages[Pages
页面树节点] Pages --> Page1[Page
第 1 页] Pages --> Page2[Page
第 2 页] Page1 --> Content1[Contents
内容流] Page1 --> Resources1[Resources
资源字典] Resources1 --> Font1[Font
字体] Resources1 --> Image1[XObject
图像] Resources1 --> ColorSpace[ColorSpace
色彩空间]

8 种基本对象类型

  • Boolean - true 或 false
  • Integer - 有符号整数(如 42、-17)
  • Real - 浮点数(如 3.14、-0.001)
  • String - 文本字符串(如 (Hello) 或 <48656C6C6F>)
  • Name - 名称对象(如 /Type、/Length)
  • Array - 有序集合(如 [1 2 3])
  • Dictionary - 键值对集合(如 <</Key value>>)
  • Stream - 二进制数据流(带长度和过滤器)

文档结构对象

  • Catalog - 文档根对象,包含/Pages 引用
  • Pages - 页面树节点,包含/Kids 数组
  • Page - 单页对象,包含/MediaBox 和/Contents
  • Contents - 内容流,包含页面绘制指令
  • Resources - 资源字典,包含字体、图像等
  • Annotations - 注释数组,包含链接、批注等
  • Outlines - 书签/大纲树结构

PDF 对象语法示例

% 间接对象定义
10 0 obj
<<
  /Type /Catalog
  /Pages 20 0 R
  /ViewerPreferences <<
    /DisplayDocTitle true
  >>
  /OpenAction [30 0 R /Fit]
>>
endobj

% 流对象(带压缩)
5 0 obj
<<
  /Length 1234
  /Filter /FlateDecode
>>
stream
xúePMK...
endstream
endobj
组成部分 说明 格式示例 作用
文件头 标识 PDF 版本,必须是文件的第一行 %PDF-2.0
%âãÏÓ
版本声明,第二行是二进制标记
间接对象 PDF 的基本构建单元,有唯一对象号 1 0 obj
<<...>>
endobj
存储所有 PDF 数据
流对象 包含二进制数据的对象,可压缩 stream
...数据...
endstream
存储内容流、图像等
XRef 表 记录所有对象的字节偏移量 xref
0 10
...条目...
实现快速随机访问
Trailer 包含文档根对象引用 trailer
<</Root 1 0 R>>
解析入口点