修复PDF
救回打不开的PDF。文件索引会被重建;如果文档完全无法解析,也会把字节中仍可读取的内容全部恢复出来——并且不存储任何文件。
- 绝不存储
- 无需排队,无需等待
- 无需注册,无水印
使用方法
添加损坏的PDF
拖放打不开的文件,其他应用拒绝打开它也没关系。
修复
文件会被重新建立索引;如果无法解析,则逐个对象重建。
检查并下载
系统会告诉您恢复了多少页、做了哪些处理,然后您就可以下载修复后的文件。
通常是哪里坏了,以及两种恢复途径
大多数打不开的PDF其实并没有真正意义上的损坏。PDF末尾有一张交叉引用表——一份记录文件中每个对象字节偏移量的索引,阅读器要靠它才能找到任何内容。这份索引一旦出错,一份完好无损的文档也会变得打不开,因为虽然什么都在,却什么都找不到。下载中断、保存被打断、应用崩溃、文件被某个没有更新偏移量的程序编辑过、传输过程弄乱了换行符:这些都会破坏索引,却都不会触及内容。
第一轮处理正是利用了这一点。文件以宽松模式解析,在标注的偏移量与实际内容不符时忽略前者,然后重新写出,配上正确的索引、正确的数据流长度和干净的文件尾。绝大多数文件都靠这一步恢复,速度很快,页面内容也不会有任何改动——结果就是您的文档,重新装上了一份能用的目录。
当文件完全无法解析时,第二轮处理会像桌面恢复工具那样:从头到尾扫描原始字节,寻找对象头,收集所有看起来仍然像PDF对象的内容,并根据实际存在的内容而不是文件自称的内容重建索引。页面会告诉您运行的是哪一轮,因为这很重要——重建意味着原来的结构已无法读取,结果值得您先检查一遍再信任。
两轮处理都无法凭空生成不存在的数据,任何工具都做不到。如果下载停在了60%,后面40%的页面在文件中根本不存在;恢复会找回已下载的页面,然后停止。如果损坏发生在压缩数据流内部,这个数据流就无法解压,它所绘制的页面会恢复成空白,而相邻页面完好无损。在这里能恢复文档的一部分就是正常的好结果;能重新拿到原始文件,永远比修复一份被截断的副本更好。
如果您需要的是别的
qpdf 是这方面的标杆工具,第一轮处理做得更彻底:qpdf --replace-input damaged.pdf 会用正确的索引重写文件,还能处理宽松解析可能出错的加密文档、对象流和线性化文件。mutool clean -ggg in.pdf out.pdf 更进一步,会重建页面树并丢弃所有未被引用的内容。两者都免费,都能处理远超浏览器标签页容量的大文件,也都会告诉您它们修复了什么。
对于损坏到只能靠扫描对象的文件,Ghostscript往往最顽强:gs -o repaired.pdf -sDEVICE=pdfwrite broken.pdf 会解释页面内容,而不只是重新建立索引,有时能重建其他工具放弃的页面——代价是所有内容都会被重写,输出与幸存的内容不再是逐字节一致的。
常见问题
到底修复的是什么?
大多数“损坏”的PDF结构其实完好,只是交叉引用表坏了——这是记录每个对象位置的索引。下载不完整、保存中断、生成程序有缺陷都会导致这种情况,即使内容都还在,阅读器也会拒绝打开。重建这份索引,文档就能立刻恢复。
如果文件完全无法解析怎么办?
那就扫描原始字节寻找对象头,收集所有仍然存在的内容,再围绕它们写入全新的索引和文件尾——与桌面工具的恢复方式相同。结果在交给您之前会再打开一次,所以仍然无法加载的文件会被报告出来,而不会让您下载。
我的损坏文件会被存储吗?
不会。即使是恢复扫描也不存储任何内容,不会发送到任何地方。
能恢复下载到一半中断的文件吗?
通常可以——恢复到数据中断的位置为止。从未下载下来的页面无法凭空生成,所以您可能只能拿回文档的前一部分,而不是全部。
能修复受密码保护的PDF吗?
修复过程会忽略加密,所以受保护的文件只有在您也知道密码时才可能恢复为可读状态。这种情况请另外使用PDF解密。
小贴士: 修复只能恢复文件中仍然存在的内容——无法重建确实缺失的数据。如果文档被截断,截断处之后的页面就永久丢失了。压缩数据流内部受损的文件,恢复后可能会有部分页面是空白的。
把这个工具放到您的网站上
博客、课程页面或帮助文章均可免费使用。粘贴一段代码,访客就能直接在您的页面上使用。