修复PDF
对损坏的 PDF 进行尽力而为的恢复:损坏的 xref 表、被截断的下载、损坏的文件头。全程在你的浏览器中运行。
选择一个损坏的 PDF
或把一个 PDF 拖到这里 —— 修复在你的浏览器中本地运行
—
尽力而为的恢复。并非所有 PDF 都能修复 —— 如果页面内容本身已被破坏, 修复可能会产生一个能打开但内容为空的文件。
修复报告
- 恢复方法—
- 修复前页数—
- 修复后页数—
- 修复前大小—
- 修复后大小—
Your file is ready
Processed entirely in your browser — the file never left your device.
如何修复 PDF
三个步骤。文件永远不会离开你的浏览器。
打开损坏的文件
选择或拖入无法打开的 PDF。它只会在你浏览器的内存中被读取。
运行修复
我们先尝试标准加载器,然后是容错加载器,最后从原始字节重建 xref 表。
下载修复后的副本
你会得到一个新的 PDF,以及一份诊断报告,显示哪条恢复路径起了作用。
修复 PDF 是如何工作的
从结构上看,一个 PDF 文件由三部分组成:一个文件头(%PDF-1.x)、
一系列间接对象(页面、字体、内容流),以及末尾的一个
xref 表,它说明“对象 N 位于字节偏移 X 处”。
当一个 PDF 无法打开时,几乎总是发生了两种情况之一:
xref 出了问题(下载被截断、保存不完整、偏移指向了
错误的位置),或者某个间接对象损坏了(压缩有误、
缺少长度、流被破坏)。
我们分三个阶段尝试修复。第一阶段是用 pdf-lib 进行严格加载:
这能解决文件其实没问题的简单情形。第二阶段是
容错加载:我们让 pdf-lib(以及 @cantoo/pdf-lib 分支,它的
xref 解析器稍微宽松一些)忽略个别损坏的对象并继续处理。
第三阶段是最后手段:我们遍历原始字节,寻找每一个
N G obj … endobj 块,构建一个全新的、指向
我们找到的那些对象的 xref 表,然后用这个合成的文件
再次尝试容错加载器。
这个工具能修复什么
- 被截断的下载,其中 xref 和文件尾因结尾丢失而缺失。
- 错误的 xref 偏移 —— 常见于不完整的保存或处理不当的增量更新。
- 开头被加入的垃圾数据(我们会重新定位
%PDF-文件头)。 - 顺序错乱的对象,在第三方工具以错误方式写入文件之后。
这个工具不能修复什么
- 密码未知的加密文件。 修复纠正的是结构,而非访问权限。请改用解锁 PDF。
- 损坏的内容流。 如果页面真正的绘图指令已损坏,修复可能会产生一个能打开但显示为空白的文件。
- 没有可恢复对象的文件。 如果文件头之后只剩垃圾数据,就没有任何东西可供重建。
隐私与安全
损坏的 PDF 往往是某个重要文件出了问题的结果: 一份无法打开的最终合同、一份 Acrobat 拒绝加载的 税务文档、一份下载后莫名其妙损坏的对账单。 大多数在线修复服务会把你的文件上传到它们的服务器。 由于本工具全程在浏览器中运行,没有任何上传步骤, 所以即使是包含机密内容的文件,也能在不离开你设备的情况下 被修复。
常见问题
一个 PDF 是一系列间接对象(页面、字体、流)外加一个用于索引它们的“xref”交叉引用表。当 PDF 损坏时,通常是这两部分之一出了问题——对象没事但索引坏了,或者反过来。我们首先尝试标准的 PDF 加载器。如果失败,我们会逐字节遍历原始数据,定位每一个对象标记,并重建一个指向它们的全新 xref 表。然后用最具可移植性的 PDF 设置(不使用对象流)重新序列化输出,使其能在每个阅读器中打开。
不会。损坏的 PDF 完全由 pdf-lib 和我们的字节级修复程序在你的浏览器中解析。没有服务器步骤,所以即使是包含机密内容的文件也能安全修复。
修复是尽力而为的。如果页面内容流本身被破坏,文件可能能加载但渲染为空白——这属于数据丢失,工具无法凭空恢复。如果文件根本没有任何可恢复的间接对象(一切都被覆盖,或在第一个对象之后被截断),我们会抛出明确的错误,而不是生成一个虚假的结果。
不一定。修复后的文件通常与原文件大小相近。如果原文件使用了对象流(一种压缩特性),修复后的副本可能会稍大一些,因为我们为了最大兼容性而不使用对象流来重新输出它。
只能恢复结构性损坏,无法恢复密码。如果你有一个既损坏又有密码保护的 PDF,请先修复它,然后用我们的解锁 PDF 工具配合正确的密码来处理。