如何修复损坏的PDF
损坏的PDF有内部结构损伤 — 交叉引用表、头部、对象流或尾部缺失或不一致, 导致阅读器无法定位页面。修复意味着从幸存的任何对象重建该结构。有时可行; 有时损伤太严重,页面会丢失。本指南解释四种损坏、可以重建损坏文件的本地工具, 以及修复不可能时的诚实回退方案。
四种PDF损坏
1. 头部损坏
PDF的第一行是%PDF-1.x(x是版本号)。如果此头部缺失或损坏, 查看器拒绝打开文件,因为无法将其识别为PDF。这是最容易修复的损伤: 在文本编辑器中打开文件,在最顶部添加头部行%PDF-1.7。 保存并尝试再次打开。
2. 交叉引用(xref)表损坏
xref表是PDF的索引 — 它告诉查看器每个对象(页面、字体、图像)在文件中的位置。 如果xref缺失或指向错误的偏移量,查看器无法找到页面。这是最常见的损坏形式, 通常由截断的下载或写入器在完成文件前崩溃引起。
修复:用ghostscript (gs -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=out.pdf in.pdf) 或Adobe Acrobat Preflight重建xref。两个工具都扫描文件中的对象并写入新的xref。 如果对象本身完好,这会完全修复文件。
3. 对象流损坏
现代PDF将多个对象打包到压缩对象流中以节省空间。如果流损坏,内部的对象不可恢复 — 它们消失了。症状包括文件打开但显示空白页面或缺失字体。修复工具可以重建xref, 但无法复活从未正确写入的对象。
修复:尝试ghostscript或Acrobat Preflight。如果修复后页面仍为空白, 这些页面的对象在原始损伤中丢失了。从备份恢复或从源应用重新导出。
4. 尾部损坏
尾部是文件末尾的小块,指向xref和根目录。没有有效尾部的文件不可读, 即使每个对象都完好。这通常发生在写入被中断时 — 文件在对象数据中间突然结束, 而不是以%%EOF结束。
修复:ghostscript和Acrobat通常可以重建缺失的尾部。 如果文件在对象中间结束,可能需要先截断损坏的对象,然后重建。qpdf --check命令报告哪些结构元素缺失。
本地修复工具
以下每个工具都在你的机器上运行。它们都不上传你的文档。这很重要: 损坏的文件可能仍包含可读的敏感内容,将其上传到"免费在线PDF修复"服务 会在你知道什么幸存之前将该内容发送到陌生人的服务器。
1. ghostscript(免费,跨平台,命令行)
最可靠的免费修复工具。它重新读取文件,重建xref和尾部,写入干净的副本。Windows上:
gswin64c -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=out.pdf in.pdf
在macOS和Linux上,将gswin64c替换为gs。 ghostscript无法修复损坏的对象流,但修复大多数xref和尾部损伤。
2. Adobe Acrobat Pro(付费,Preflight)
Acrobat Pro的Preflight功能有"修复PDF"配置,重建xref、重新嵌入缺失字体、 扁平化损坏的注释。打开文件,然后工具 > 印刷生产 > Preflight, 运行修复配置。Acrobat是最强大的修复工具但不是免费的。
3. PDF24 Creator(免费,Windows)
PDF24包含"修复PDF"工具,用GUI包装ghostscript。打开PDF24,选择修复PDF, 拖入文件,保存结果。如果你在Windows上不想使用命令行,这很有用。
4. Recovery Toolbox for PDF(付费,Windows)
专用商业修复工具,处理ghostscript无法修复的严重损伤。它逐字节扫描文件寻找 可识别的对象签名,重建它能重建的。仅在免费工具失败且文件足够重要以证明 许可费用合理时使用。
分步说明:用ghostscript修复
- 安装ghostscript。 Windows上从ghostscript.com下载。 macOS上
brew install ghostscript。Linux上使用包管理器。 - 打开终端。 导航到包含损坏PDF的文件夹。
- 运行修复命令。
gs -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=repaired.pdf corrupted.pdf - 检查结果。 在Acrobat Reader或预览中打开
repaired.pdf。 如果打开并显示所有页面,修复成功。 - 如果页面仍缺失, 原始对象流已损坏。从备份恢复或从源应用重新导出。
回退:用IXPDF提取未损坏的页面
当完全修复失败时,有时可以恢复未损坏的页面。打开提取页面,拖入损坏的文件, 尝试提取第1页。如果成功,尝试范围(1-5、6-10)直到遇到损坏部分。 IXPDF在浏览器中本地读取文件 — 无上传 — 并从它能解析的任何页面写入新PDF。 损坏区域的页面会失败;其余将被恢复。
常见错误
- 将损坏文件上传到在线修复服务。文件可能仍包含可读的敏感内容。使用本地工具。
- 覆盖唯一副本。始终将修复的文件写入新名称。在验证修复之前保留损坏的原始文件。
- 期望修复能恢复丢失的内容。如果对象流损坏,内容已消失。修复重建结构;它无法复活缺失的字节。
- 尝试修复密码保护文件。加密不是损坏。先解密(用密码),然后如需要再修复。