PDFSub
定价APIMergeCompressEditE-Sign银行对账单博客
返回博客
指南PDF格式PDF标准PDF/APDF/XPDF/UA结构解析

PDF文件格式详解:结构、图层与标准

2026年5月16日
T
Todd Lahman
Founder, PDFSub

PDF内部究竟包含什么?一张标注图解和术语表,涵盖四个物理部分(文件头、正文、交叉引用表、尾部)、六个内容图层(文本、图像、字体、注释、矢量图、签名)、元数据以及在此基础上构建的ISO标准(PDF/A、PDF/X、PDF/UA、PDF/E、PDF/VT)。


PDF并非单一实体。它是一个二进制容器,在磁盘上具有特定结构,内部包含一组内容图层,并在其之上构建了一系列ISO标准。用十六进制编辑器打开它,结构会以明文形式显示在最初几行。用查看器打开,图层则会渲染成单一页面。

本指南是一份标注参考:包括物理文件结构、正文所包含的内容图层、围绕一切的元数据,以及为特定用例而约束它的标准(PDF/A、PDF/X、PDF/UA、PDF/E、PDF/VT)。

Anatomy of a PDF file: header, body objects, cross-reference table, trailer, content layers, and metadata

想在您的博客上使用此图表? 复制此嵌入代码:


四个物理部分

磁盘上的每个PDF都具有相同的四部分结构,顺序如下:

1. 文件头 (Header)

文件的第一行。总是以%PDF-开头,后跟版本号:

%PDF-1.7

版本范围从1.0(1993年发布)到2.0(2017年发布,当前)。文件头后跟一个注释行,包含二进制字节,用于向FTP和其他传输工具指示这是一个二进制文件。

2. 正文 - 间接对象 (Body - Indirect Objects)

文件的主体部分。每个页面、字体、图像、注释和表单字段都是一个编号的间接对象:

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 /Contents 4 0 R /Resources << ... >> >>
endobj

每个对象都有一个ID(0 obj之前的数字)、一个代号(0,用于增量更新),以及在<<和>>之间用于字典(dictionaries)或stream和endstream之间用于二进制流(图像数据、字体数据、压缩内容)的载荷。

对象之间使用<id> <gen> R语法(例如,3 0 R表示“对象3,代号0”)相互引用。这就是页面如何引用其使用的字体,或者目录如何引用页面树的根。

3. 交叉引用表 (Cross-Reference Table - xref)

一个字节偏移查找表。对于正文中的每个对象,xref记录了它在文件中的绝对字节位置:

xref
0 6
0000000000 65535 f
0000000017 00000 n
0000000089 00000 n
0000000172 00000 n
0000000299 00000 n
0000000453 00000 n

这就是PDF能够随机访问的原因。查看器可以读取xref,直接跳转到对象3的字节偏移处,而无需解析文件的其余部分即可渲染该页面。这就是为什么即使源文件有500页,单个章节的PDF也能瞬间打开的原因。

4. 尾部 (Trailer)

最后一部分。告诉解析器在哪里找到xref以及哪个对象是根对象:

trailer
<< /Size 6 /Root 1 0 R /Info 7 0 R >>
startxref
1893
%%EOF

startxref的值是xref表的字节偏移量。%%EOF标记是文件的实际结束。尾部使得增量更新成为可能:在文件末尾追加一个新的xref+尾部,就可以在不重写整个文件的情况下添加对象。


六个内容图层

在正文内部,内容分布在六种图层类型中。每个渲染的PDF页面都是这些图层的复合体:

1. 文本 (Text)

字形位置命令和字体引用,而非文本字符串。PDF存储的指令是“在位置(120, 540)处,从字体F3绘制字形42”,而不是“在此处绘制字母A”。这就是为什么文本可选择和可搜索的原因:查看器通过ToUnicode映射(或针对CJK字体的CMap)将字形ID反向映射到Unicode码点。

当文本缺少ToUnicode映射时,就会出现经典的“文本可选但复制出来是乱码的PDF”问题。文本可见,但字形到Unicode的映射已损坏或缺失。

2. 图像 (Images)

以嵌入流(embedded streams)的形式存储,格式有多种:

  • JPEG (DCTDecode过滤器):照片,最常见
  • JPEG2000 (JPXDecode):压缩率更高,不太常见
  • PNG等效 (FlateDecode + Predictor):屏幕截图,线条艺术
  • CCITT Group 4 (CCITTFaxDecode):黑白扫描文本,用于归档扫描
  • JBIG2 (JBIG2Decode):二值图像,常用于OCR文档

图像可以被下采样、重新压缩或替换,而不影响其他内容。

3. 字体 (Fonts)

嵌入为完整的字体程序、子集(仅包含使用的字形)或按名称引用(必须安装在查看器的系统上)。子集是默认选项——它能显著减小文件大小。支持的字体格式:Type1、TrueType、OpenType和CIDFont(用于CJK)。

当字体被引用但未嵌入且未安装在查看器的系统上时,查看器会替换为相似字体——这通常看起来不正确。PDF/A要求所有字体都必须嵌入,以防止这种情况。

4. 注释 (Annotations)

高亮、评论、链接、图章、水印和表单字段都属于注释。它们叠加在页面内容之上,可以添加、编辑或删除,而不会改变底层页面。

表单字段是一种特殊情况:一个交互式控件注释(可见部分)加上一个字段字典(数据部分)。当您填写表单并保存时,只有字段字典会发生变化——页面本身不受影响。

5. 矢量图形 (Vector Graphics)

使用类似PostScript的操作符(moveto、lineto、curveto)绘制的线条、形状、曲线和路径。可以无限缩放而不会损失质量。PDF中的大多数CAD导出、图表和示意图都是矢量图形。

6. 数字签名 (Digital Signatures)

基于PKI的签名,绑定到文件的字节范围。签名字典指定“字节0到12,547以及14,200到文件末尾是签名的”——中间一小段范围保留给签名值本身。任何对签名字节范围的更改都会使签名无效,这就是PDF如何检测签名后的篡改。

有些PDF有多个签名,以增量更新的形式叠加——每个签名者都会签署他们收到文件时的版本,从而保持链条的完整性。


元数据:两个并行系统

PDF有两个元数据系统,它们经常不一致:

标准/信息字典 (/Info Dictionary)

存储在尾部。字段包括:Title(标题)、Author(作者)、Subject(主题)、Keywords(关键词)、Creator(用户创建文档的应用)、Producer(生成PDF的应用)、CreationDate(创建日期)、ModDate(修改日期)。纯文本字符串,易于任何PDF工具读取。

XMP元数据流 (XMP Metadata Stream)

一个独立的XML流(Adobe XMP,基于RDF/XML),支持更丰富的模式:Dublin Core、IPTC、自定义领域特定模式(颜色配置文件、版权注册、手稿版本控制)。

现代PDF生成器会同时写入两者。旧的PDF只有/Info。有些PDF拥有来自先前版本的过时/Info和来自近期编辑的准确XMP——反之亦然。在审计PDF的合规性或进行取证时,请同时检查两者。


基于PDF构建的ISO标准

基础PDF规范是ISO 32000。有几个派生标准为特定用例约束PDF:

标准 用途 约束
PDF/A 长期归档 所有字体嵌入,无JavaScript,无音频/视频,色彩空间设备无关。符合级别:PDF/A-1、A-2、A-3(允许文件附件)
PDF/X 印前制作 CMYK色彩,嵌入字体和色彩配置文件,无透明度(PDF/X-1a)或受控透明度(PDF/X-4)
PDF/UA 可访问性 标记结构树,语言元数据,图像的替代文本,逻辑阅读顺序
PDF/E 工程 3D模型(U3D、PRC格式),CAD特定元数据
PDF/VT 可变事务打印 针对大批量个性化邮件优化

一个PDF可以同时符合多个标准——PDF/A-2u(带Unicode映射的归档)加上PDF/UA(可访问性)在政府和法律档案中很常见。


线性化PDF(Web优化)

“线性化”或“Web优化”的PDF会重新排序正文,使第一页的对象提前出现在文件开头。Web查看器在仅下载约50KB后即可渲染第一页,而无需等待整个文件下载。尾部在文件开头重复,并附带一个提示表,告诉查看器每页的起始位置。

大多数现代PDF生成器支持将线性化作为“另存为Web”选项。该格式会增加2-5%的文件大小,以换取在慢速连接上的快速首页渲染。


加密与权限

PDF可以通过密码(或证书)进行加密,并授予细粒度的权限:打印、复制文本、修改、填写表单、提取以实现可访问性。加密存储在尾部的/Encrypt字典中。

加密强度已发展:RC4 40位(早期PDF,今天可轻易破解)、RC4 128位(仍然较弱)、AES-128、AES-256。最初的Acrobat 5 RC4实现于2001年公开破解;现代PDF加密(AES-256、PDF 2.0)在与强密码一起使用时是可靠的。

注意:“权限”是建议性的。尊重这些权限的查看器会强制执行。忽略这些权限的查看器(或剥离加密的工具)则不会。


PDFSub如何读取PDF

PDFSub使用Rust的PDFium绑定(与驱动Chromium PDF查看器的引擎相同)处理PDF,并使用PaddleOCR处理扫描文档。有关完整的架构细节以及与基于云的工具的比较,请参阅浏览器 vs 云PDF安全性。

要将PDF转换为其他格式同时保留上述描述的结构:

  • PDF转Excel - 提取文本+表格,保留坐标
  • OCR PDF - 为扫描的PDF添加可搜索文本层
  • PDF转Word - 将文本重排为可编辑段落
  • 压缩PDF - 下采样图像,子集化字体

对于特定的归档工作流,请参阅如何将PDF转换为PDF/A。


延伸阅读

  • ISO 32000-2 (PDF 2.0规范) - 权威参考,付费
  • Adobe PDF参考档案 - PDF 1.7的免费参考
  • PDF协会 - 行业工作组,免费文章和合规性测试文件

关于PDF特定主题:律师的PDF合规指南、PDF/A转换指南。

返回博客

有疑问? 联系我们

PDFSub

您所需的一切 PDF 和文档工具,尽在一处。快速、安全且私密。

符合 GDPR符合 CCPA符合 SOC 2
由 PDFSub Engine 提供支持

PDF 工具

  • 合并 PDF
  • 拆分 PDF
  • 重排页面
  • 每张纸的页数
  • PDF 查看器
  • 提取页面
  • 提取图像
  • 替换图像
  • 旋转 PDF
  • 删除页面
  • 添加水印
  • 编辑 PDF
  • 盖章 PDF
  • PDF 表单填充器
  • 裁剪页面
  • 更改页面大小
  • 添加页码
  • 页眉和页脚
  • 压缩 PDF
  • 设为可搜索
  • Clean Scanned PDF
  • Photo to Document
  • Auto-Crop PDF
  • 修复 PDF
  • 编辑元数据
  • 移除元数据
  • PDF 转 Word
  • Word 转 PDF
  • PDF to Excel
  • Excel 转 PDF
  • PDF 转 PowerPoint
  • PowerPoint 转 PDF
  • HTML 转 PDF
  • HTML to Text
  • HTML to Markdown
  • PDF 转 HTML
  • EPUB 转 PDF
  • PDF 转 EPUB
  • 文本转 PDF
  • RTF 转 PDF
  • PDF 转 RTF
  • PDF 转文本
  • ODT 转 PDF
  • PDF 转 ODT
  • ODS 转 PDF
  • PDF 转 ODS
  • ODP 转 PDF
  • PDF 转 ODP
  • PDF/A 转换
  • 创建 PDF
  • 批量转换
  • PDF 转图像
  • 图像转 PDF
  • PDF 转 PNG
  • PNG 转 PDF
  • HTML to PNG
  • HTML to JPEG
  • HTML to WEBP
  • SVG 转 PDF
  • PDF 转 SVG
  • TIFF 转 PDF
  • WEBP 转 PDF
  • HEIC 转图像
  • WEBP 转 JPG
  • WEBP 转 PNG
  • Image Converter
  • ODG 转 PDF
  • 密码保护
  • 解锁 PDF
  • 编辑 PDF
  • PDF 电子签名
  • Share Document
  • 比较 PDF
  • 提取表格
  • 银行对账单转换器
  • 发票提取器
  • 收据扫描仪
  • 财务报告
  • OCR - 提取文本
  • 手写体转换
  • 摘要 PDF
  • 翻译 PDF
  • 与 PDF 聊天
  • 提取数据
  • 设计工作室

产品

  • 所有工具
  • 功能
  • 银行对账单
  • API
  • 定价
  • 常见问题
  • 博客

支持

  • 关于我们
  • 帮助中心
  • 联系我们
  • 常见问题

法律条款

  • 隐私政策
  • 服务条款
  • Cookie 政策

© 2026 PDFSub. 保留所有权利。

在美国制造,怀揣对全球用户的热忱