PDF 文档 (.pdf)

ISO 标准

便携式文档格式 (PDF) 是一种普及的数字文档标准,旨在确保文档在不同应用软件、硬件和操作系统上呈现一致。

将 PDF 转换为 JPG

免费的浏览器端 PDF 转 JPG 转换器。在您的设备上即时转换文件。

在线压缩 PDF

隐私保护 - 文件不会离开您的设备

检查与元数据

操作系统和文件分析器通过检查开头的二进制字节序列来识别 PDF 文件:

选择或将文件拖放到此处

隐私保护 - 文件不会离开您的设备

或粘贴 Ctrl+V
零网络传输隐私保证: 上传至外部服务器的数据为 0 字节。所有处理均在您的浏览器沙箱中本地完成。

字节级文件头签名 (魔数)

操作系统和文件分析器通过检查开头的二进制字节序列来识别 PDF 文件:

十六进制签名 (偏移量 0):

25 50 44 46

ASCII 表示形式: %PDF

标准化: ISO 32000-1 (2008) / ISO 32000-2 (2020)

技术规格

容器架构二进制/ASCII 混合对象层级结构与交叉引用表
压缩方式FlateDecode (Deflate), DCTDecode (JPEG), CCITT Fax, JBIG2, JPXDecode
字节序大端序(网络字节序),用于二进制对象流
色彩空间sRGB, Display P3, DeviceCMYK, 灰度, 专色(Pantone)
通道与结构多层矢量图形、排版信息、光栅流及嵌入式元数据
最大尺寸200 x 200 英寸(PDF 1.6+ 中的 UserUnit 允许高达 15,000,000 英寸)
透明度全 alpha 透明度、混合模式及不透明度蒙版
流式传输与渐进式加载线性化 PDF(“快速 Web 浏览”)允许通过 HTTP Range 请求按字节范围流式传输。

技术对比矩阵:PDF 对比同类产品

技术属性PDF (当前)DOCXEPUBHTML5
视觉布局保真度有助于保留布局,但渲染效果会因阅读器和输出设备而异。基于流式排版;随 Word 版本和已安装字体而变化可重排的阅读器布局;无法保证固定排版流体 CSS 盒模型;取决于屏幕的渲染方式
自包含性100% 独立,包含嵌入的字体、光栅流和矢量资源自包含的 XML 容器(系统字体通常不会嵌入)自包含的 ZIP 容器(打包的 XHTML/CSS 资产)需要外部 HTTP 资源,除非通过 MHTML 打包
加密签名内置于 ISO 规范中的原生 PAdES 和 X.509 加密数字签名支持 Office XML DSig 数字签名需要自定义数字容器签名需要 Web Crypto API 或外部 TLS 传输保障
移动端响应性固定页面画布(在小屏幕上需要缩放和平移)出色的响应式文本重排专为移动端流式电子阅读而设计利用 CSS 媒体查询的原生响应式布局
标准化开放国际标准 (ISO 32000-2:2020)ECMA-376 / ISO/IEC 29500W3C / IDPF 开放标准W3C 动态标准 / WHATWG

常见损坏模式与十六进制恢复指南

Acrobat 或 PDF 查看器报告“文件已损坏且无法修复”,或打开后页面完全空白。

根本原因: ASCII 模式下的 FTP 或 HTTP 传输转换了二进制字节序列(将 0x0A 替换为 0x0D 0x0A),破坏了交叉引用表(xref)中的字节偏移量。

恢复方法: 现代 PDF 修复工具(例如 qpdf --repair 或 File2File.app 修复)会线性重新扫描文件、重建对象字典并重新生成新的 xref 表。

PDF 查看器无法加载文档或在最后一页崩溃。

根本原因: 下载中断或磁盘写入不完整,丢失了 '%%EOF' 标记和尾部字典。

恢复方法: 使用 'tail -c 128 document.pdf' 检查文件尾部。如果缺少 %%EOF,请验证根目录对象是否存在,并附加指向最高有效对象编号的人工 xref 表。

嵌入式字体渲染为无法辨认的符号、空白块 (.notdef) 或问号。

根本原因: 非嵌入式的子集字体引用了查看机器上缺失的系统字体,或者 ToUnicode CMap 表损坏。

恢复方法: 通过 Ghostscript 重新嵌入缺失的字体子集(gs -o fixed.pdf -sDEVICE=pdfwrite -dEmbedAllFonts=true broken.pdf)或将文本元素转换为矢量曲线。

安全分析与解析器攻击向量

PDF 是计算领域中最复杂的格式之一,具有活动脚本、嵌入式文件和动态流。现代浏览器在隔离进程中通过沙盒运行 PDF 渲染器(例如 Chrome PDFium)。

已知攻击向量

  • 嵌入式的 Acrobat JavaScript (JS API) 在文档打开时执行任意代码或实施钓鱼攻击。
  • 配置为执行外部系统二进制文件或 Shell 脚本的启动操作 (/Launch)。
  • 传统 Type 1 和 TrueType 字体解析引擎中的字体渲染漏洞会触发缓冲区溢出。
  • 通过恶意 URI 操作(/URI)或表单提交实施的服务器端请求伪造(SSRF)和 NTLM 哈希凭据窃取。

防御性最佳实践: 切勿在启用了 Adobe Acrobat JavaScript 执行的情况下打开不受信任的 PDF。对于网页查看,请始终通过在浏览器沙盒中运行的 WebAssembly/PDF.js 引擎进行渲染,或将不受信任的 PDF 转换为经过清理的 PDF/A-1b 文档。

历史渊源与里程碑

2020ISO 32000-2:2020 发布,正式确立了现代 PDF 2.0 的增强功能。
2008Adobe 将 PDF 规范移交给国际标准化组织,作为 ISO 32000-1 发布。
1993随 Adobe Acrobat 一同推出 PDF 1.0,支持文本、链接和字体。
1991John Warnock 博士在 Adobe 发起 Camelot 项目,以解决数字文档的可移植性问题。

核心优势与特点

  • 旨在让页面布局在不同系统中保持一致,但显示效果可能因字体、阅读器和打印设置而异。
  • 支持数字加密签名、涂黑标记以及 DRM 访问权限。
  • 将矢量图形、可缩放字体和压缩光栅流组合到一个自包含的容器中。

技术局限与劣势

  • 固定布局的页面画布使得在小型智能手机上进行自动响应式重排变得具有挑战性。
  • 复杂的内部对象流层级结构若不经过压缩并清除未引用对象,可能会导致文件体积臃肿。
  • 嵌入式 JavaScript 和动态启动操作功能带来了广泛的攻击面。

趣味技术冷知识

  • 最初的 Camelot 项目论文设想,用户可以从任何应用程序将文档以电子方式直接输出到任何显示器。
  • 每个 PDF 文件都以字符串“%%EOF”结尾,标记文件结束。
  • 全球联邦法院和国家档案馆强制要求使用 PDF/A (ISO 19005) 进行长期的法律保存。

常见技术问题

为什么 PDF 页面在不同屏幕和打印机上看起来可能相似?

PDF 使用固定坐标保存页面内容,有助于保留布局。不过,显示效果仍可能因字体、阅读器、色彩管理和打印机设置而异。

标准 PDF 和 PDF/A 之间有什么区别?

PDF/A (ISO 19005) 专为长期存档而设计。它严格禁止可能危及未来可读性的功能,例如 JavaScript、外部字体链接、加密、声音/视频嵌入以及依赖设备的色彩空间。所有字体和颜色配置文件必须 100% 嵌入。

现代文档中的 PDF 压缩是如何工作的?

PDF 使用针对内容类型定制的多种离散压缩过滤器。文本、矢量命令和字体度量使用 FlateDecode (zlib/deflate) 进行压缩。摄影图像使用 DCTDecode (JPEG) 或 JPXDecode (JPEG 2000),而双层单色扫描文本则使用 JBIG2 或 CCITT Fax Group 4 压缩。

为什么在删除页面或图像后,PDF 文件的大小通常仍然很大?

修改 PDF 时,许多编辑器会执行“增量更新”:它们把新对象流和 xref 表附加到文件末尾,保留旧对象以便快速撤销。若要真正缩小文件体积,则需要优化文档并清除未引用的对象。