【PDF】PDF文件体详解

PDF文件体详解

文件体是PDF文档的核心内容区域,包含了构成文档视觉和结构的所有数据。它由一系列PDF对象组成,这些对象通过对象编号和生成号进行唯一标识。
PDF文件体 基本对象类型 核心功能对象 组织结构 布尔对象 数值对象 字符串对象 名称对象 数组对象 字典对象 流对象 空对象 页面对象 内容流对象 字体对象 资源字典 图像对象 文档目录 页面树 资源管理 内容流 定义页面属性 绘制指令 字体信息 资源集合 Catalog对象 Pages对象 Font/XObject Stream数据


文件体的基本结构

对象定义语法

pdf 复制代码
对象号 生成号 obj
<<
  对象内容
>>
endobj

示例

pdf 复制代码
4 0 obj
<<
  /Type /Page
  /Parent 3 0 R
  /Resources 5 0 R
  /Contents 6 0 R
  /MediaBox [0 0 612 792]
>>
endobj

PDF对象的八大类型

1. 布尔对象 (Boolean)

表示真或假的值

pdf 复制代码
true
false

2. 数值对象 (Numeric)

包括整数和实数

pdf 复制代码
42          % 整数
-100        % 负整数
3.14        % 实数
123.456     % 实数

3. 字符串对象 (String)

分为文字字符串和十六进制字符串

文字字符串

pdf 复制代码
(Hello World)           % 简单字符串
(Embedded (nested))     % 嵌套括号
(Special\()             % 转义字符:\(
(Line1\nLine2)          % 换行符

十六进制字符串

pdf 复制代码
<48656C6C6F>            % "Hello"的十六进制表示
<FFFE0041>              % 带BOM的Unicode字符

4. 名称对象 (Name)

以斜杠开头,用于标识字典中的键和特殊值

pdf 复制代码
/Type
/Page
/F1
/Length
/ASCII85Decode

5. 数组对象 (Array)

有序的对象集合

pdf 复制代码
[0 0 612 792]                           % 页面尺寸数组
[(Hello) (World)]                       % 字符串数组
[1 0 R 2 0 R 3 0 R]                     % 引用对象数组
[/Title /Author /Subject]               % 名称数组

6. 字典对象 (Dictionary)

键值对集合,用双尖括号包裹

pdf 复制代码
<<
  /Type /Page
  /Parent 2 0 R
  /Resources <<
    /Font <<
      /F1 4 0 R
    >>
    /ProcSet [/PDF /Text]
  >>
  /MediaBox [0 0 612 792]
  /Contents 5 0 R
>>

7. 流对象 (Stream)

包含大量二进制数据,通常用于页面内容和图像

pdf 复制代码
7 0 obj
<<
  /Length 85
  /Filter /ASCII85Decode
>>
stream
6YV%f8kLZEQ8dEV5uX8dEV8dLh>5uX8dEV8dLh>5uX8dEV8dLh>5uX8dEV8dLh>5uX
endstream
endobj

8. 空对象 (Null)

表示空值

pdf 复制代码
null

核心对象类型详解

页面对象 (Page Object)

定义页面的基本属性

pdf 复制代码
3 0 obj
<<
  /Type /Page
  /Parent 2 0 R
  /Resources <<
    /Font <<
      /F1 4 0 R
      /F2 5 0 R
    >>
    /XObject <<
      /Im1 6 0 R
    >>
    /ProcSet [/PDF /Text /ImageB]
  >>
  /MediaBox [0 0 612 792]
  /CropBox [36 36 576 756]
  /Contents 7 0 R
  /Rotate 0
>>
endobj

内容流对象 (Content Stream)

包含绘制页面的操作指令

pdf 复制代码
7 0 obj
<<
  /Length 156
>>
stream
q
0.1 0.1 0.1 rg
BT
/F1 24 Tf
72 720 Td
(Hello PDF World) Tj
ET
Q
endstream
endobj

内容流操作符说明

  • q / Q:保存/恢复图形状态
  • BT / ET:开始/结束文本对象
  • Tf:设置字体和大小
  • Td:移动文本位置
  • Tj:显示文本
  • rg:设置填充颜色

字体对象 (Font Object)

定义文档中使用的字体

pdf 复制代码
4 0 obj
<<
  /Type /Font
  /Subtype /Type1
  /BaseFont /Helvetica
  /Encoding /WinAnsiEncoding
>>
endobj

资源字典 (Resource Dictionary)

集中管理页面资源

pdf 复制代码
8 0 obj
<<
  /Font <<
    /F1 9 0 R
    /F2 10 0 R
  >>
  /XObject <<
    /Image1 11 0 R
    /Form1 12 0 R
  >>
  /ExtGState <<
    /GS1 13 0 R
  >>
  /ProcSet [/PDF /Text /ImageB /ImageC]
>>
endobj

对象引用机制

直接引用

pdf 复制代码
4 0 R        % 引用对象4,生成号0

间接对象定义

pdf 复制代码
1 0 obj      % 定义对象1
(Indirect String)
endobj

引用使用

pdf 复制代码
2 0 obj
<<
  /Title 1 0 R    % 引用对象1的内容
>>
endobj

文件体的组织结构

典型对象层次结构

pdf 复制代码
% 文档目录
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 /Resources 4 0 R /Contents 5 0 R >> endobj

% 资源字典
4 0 obj << /Font << /F1 6 0 R >> >> endobj

% 内容流
5 0 obj << /Length 44 >> stream ... endstream endobj

% 字体对象
6 0 obj << /Type /Font /Subtype /Type1 /BaseFont /Helvetica >> endobj

文件体的关键特性

1. 对象独立性

  • 每个对象可以独立解析
  • 对象之间通过引用建立关系
  • 支持增量更新

2. 数据压缩

  • 流对象支持多种过滤器
  • 可选的压缩算法:
    • /FlateDecode (zlib压缩)
    • /ASCII85Decode (ASCII编码)
    • /LZWDecode (LZW压缩)

3. 资源管理

  • 字体、图像等资源可共享
  • 通过资源字典统一管理
  • 支持外部资源引用

4. 内容分层

  • 图形状态栈管理
  • 透明度支持
  • 图层组合操作

实际应用示例

创建简单页面

pdf 复制代码
% 页面内容流
10 0 obj
<<
  /Length 200
>>
stream
1.0 0.0 0.0 RG           % 设置红色描边
2 w                      % 设置线宽
100 100 m                % 移动到起点
200 200 l                % 画线到终点
S                         % 描边路径
0.0 0.0 1.0 rg           % 设置蓝色填充
100 500 100 50 re        % 绘制矩形
f                         % 填充路径
BT
/F1 12 Tf
100 400 Td
(Hello PDF!) Tj
ET
endstream
endobj

文件体通过这种结构化的对象组织方式,实现了文档内容的模块化管理和高效渲染,是PDF格式能够处理复杂文档内容的技术基础。

相关推荐
非凡ghost5 小时前
批量转双层PDF(可识别各种语言) 中文绿色版
前端·windows·pdf·计算机外设·软件需求
夏之繁花5 小时前
PDFelement 万兴PDF,简单好用的PDF阅读编辑批注器
pdf
打小就很皮...5 小时前
PDF 下载弹窗 content 区域可行性方案
前端·javascript·pdf
拓端研究室18 小时前
专题:2025机器人产业的变革与展望白皮书:人形机器人与工业机器人洞察|附130+份报告PDF、数据、绘图模板汇总下载
人工智能·机器人·pdf
qq_4203620318 小时前
PDF导出服务
前端·pdf·状态模式·node·puppeteer
家有两宝,感恩遇见19 小时前
pdf文件上传下载记录
pdf
一滴水的眼泪19 小时前
读取实验室原始记录单PDF内容
pdf
stayhungry_c1 天前
Quarto生成PDF无法正常显示中文的问题
python·macos·r语言·pdf
我命由我123451 天前
Android PDF 操作 - AndroidPdfViewer 弹出框显示 PDF
android·java·java-ee·pdf·android studio·android-studio·android runtime