当前位置: 首页 > news >正文

【PDF】PDF文件体详解

PDF文件体详解

文件体是PDF文档的核心内容区域,包含了构成文档视觉和结构的所有数据。它由一系列PDF对象组成,这些对象通过对象编号和生成号进行唯一标识。

PDF文件体
基本对象类型
核心功能对象
组织结构
布尔对象
数值对象
字符串对象
名称对象
数组对象
字典对象
流对象
空对象
页面对象
内容流对象
字体对象
资源字典
图像对象
文档目录
页面树
资源管理
内容流
定义页面属性
绘制指令
字体信息
资源集合
Catalog对象
Pages对象
Font/XObject
Stream数据

文件体的基本结构

对象定义语法

对象号 生成号 obj
<<对象内容
>>
endobj

示例

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)

表示真或假的值

true
false

2. 数值对象 (Numeric)

包括整数和实数

42          % 整数
-100        % 负整数
3.14        % 实数
123.456     % 实数

3. 字符串对象 (String)

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

文字字符串

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

十六进制字符串

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

4. 名称对象 (Name)

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

/Type
/Page
/F1
/Length
/ASCII85Decode

5. 数组对象 (Array)

有序的对象集合

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

6. 字典对象 (Dictionary)

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

<</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)

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

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

8. 空对象 (Null)

表示空值

null

核心对象类型详解

页面对象 (Page Object)

定义页面的基本属性

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)

包含绘制页面的操作指令

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)

定义文档中使用的字体

4 0 obj
<</Type /Font/Subtype /Type1/BaseFont /Helvetica/Encoding /WinAnsiEncoding
>>
endobj

资源字典 (Resource Dictionary)

集中管理页面资源

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

对象引用机制

直接引用

4 0 R        % 引用对象4,生成号0

间接对象定义

1 0 obj      % 定义对象1
(Indirect String)
endobj

引用使用

2 0 obj
<</Title 1 0 R    % 引用对象1的内容
>>
endobj

文件体的组织结构

典型对象层次结构

% 文档目录
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. 内容分层

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

实际应用示例

创建简单页面

% 页面内容流
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格式能够处理复杂文档内容的技术基础。

http://www.dtcms.com/a/548913.html

相关文章:

  • C++ STL list 容器学习笔记:双向链表的 “小火车“ 操控指南
  • Visual Studio Code (VS Code) 官方下载渠道
  • 网站制作的相关术语有哪些建一个网站多少钱
  • 企业网站建设属于什么费用搜索引擎优化的英文缩写
  • 告别“凭感觉”告警,金仓数据库替换MongoDB让运维更精准
  • 机器学习从业者大语言模型微调指南
  • Neo4j图数据库:简述增删改查
  • Mac版Color Folder v3.8安装教程(附dmg文件安装步骤和搜索关键词)
  • 金仓KES MongoDB兼容性深度解析与实践
  • Fiddler抓包实战教程 从安装配置到代理设置,详解Fiddler使用方法与调试技巧(HTTPHTTPS全面指南)
  • 对电子商务网站建设的感想4399网页游戏大全
  • 珠海专业医疗网站建设请人做ppt的网站
  • 印团网网站是哪家做的平面设计年终总结
  • 【u-boot】u-boot的I2C驱动框架剖析
  • JFrog vs Nexus vs Hadess,制品管理工具一文纵评
  • 【Docker】容器常用命令
  • Linux《Socket编程UDP》
  • Java IO 流进阶:Buffer 与 Channel 核心概念解析及与传统 IO 的本质区别
  • 【Linux基础开发工具 (一)】详解Linux软件生态与包管理器:从yum / apt原理到镜像源实战
  • 镇江网站营销推广电商怎么做如何从零开始视频
  • opencv 学习: 01 初识图片处理
  • 从 Wot UI 出发谈 VSCode 插件的自动化发布
  • Rust专项——用 Weak 打破引用环:树与图结构实战
  • c#调Lua返回个字符串
  • 单元测试(JUnit、Mockito、PowerMock )
  • 不只是语法糖:解构作为 Rust 安全与清晰度的基石
  • 企业微信消息群发助手(企业微信自建应用)winform.netcore实现(详细配置)
  • 基于Vue的教育学习网站04y8688l(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
  • 移动端网站生成器中国电商平台排行榜前100
  • Excel正则表达式.获取字符