OCRmyPDF|免费给扫描PDF补上可搜索的文本层
【免费下载链接】OCRmyPDFOCRmyPDF adds an OCR text layer to scanned PDF files, allowing them to be searched项目地址: https://gitcode.com/GitHub_Trending/oc/OCRmyPDF
扫描合同想找一条款,搜索框却什么都搜不到——因为 PDF 里塞的是图片,不是文字。OCRmyPDF 就是干这一件事的开源工具:给扫描版 PDF 补一层不可见的 OCR 文本,版式像素级不变,但从此可搜索、可复制、可建索引。Linux、macOS、Windows 全平台支持,完全免费。
3分钟:装好并转出第一份可搜索PDF
最短路径三步,全部是单行命令。
先装工具(它调用 Tesseract 做识别、Ghostscript 做图像处理,所以两者是前置依赖):
pip install ocrmypdf⚠️ Debian/Ubuntu 用户更省事:
sudo apt install ocrmypdf tesseract-ocr ghostscript一条命令把程序和依赖全装好。
转换本身一条命令,输入扫描件、输出可搜索版:
ocrmypdf input_scan.pdf output_searchable.pdf验证是否成功——从输出文件里把文字抽出来,搜一个你确定在原图里的词:
pdftotext output_searchable.pdf - | grep "关键词"能匹配到,文本层就是真的嵌进去了;没装 poppler-utils 的话,直接在任意 PDF 阅读器里 Ctrl+F 搜同一个词也行。
按场景用
中英混排文档加文本层
一份文件中文为主、夹杂英文缩写,识别引擎只认单一语言时混排内容会认成乱码——所以要把语言组合告诉它:
ocrmypdf -l chi_sim+eng --deskew mixed.pdf mixed_ocr.pdf-l chi_sim+eng:用+指定多个语言(建议:先用tesseract --list-langs确认语言包已装)--deskew:识别前先测出页面倾斜角并校正(建议:扫描件常开,歪斜会直接拉低识别率)
💡 Tesseract 支持 100+ 种语言,但语言包要单独装:
sudo apt install tesseract-ocr-chi-sim,macOS 用brew install tesseract-lang。
批量OCR一个文件夹的PDF
几十个文件挨个敲命令不现实,官方文档推荐用 GNU Parallel(先apt install parallel)并行跑:
parallel --tag -j 2 ocrmypdf '{}' 'output/{}' ::: *.pdf-j 2:同时最多跑 2 个进程(建议:单个文件内部--jobs已用满多核,外层留 2 个并发即可)--tag:每行输出前打印文件名(建议:批量必开,报错时能定位到具体文件)
💡 递归整个目录树、原地更新,以及 Windows 批处理和 Docker 的现成写法,见官方批量文档。
生成PDF/A存档版
要留十年的文件,普通 PDF 存在字体丢失、JS 依赖这些定时炸弹,归档标准是 PDF/A。默认输出已是 best-effort PDF/A-2b,想要压缩更狠的存档版:
ocrmypdf --output-type pdfa --optimize 3 archive.pdf archive_pdfa.pdf--output-type pdfa:强制 PDF/A 输出(建议:存档场景显式声明,比默认 auto 更稳)--optimize 3:最高档图像优化(建议:体积优先时开 3,日常用默认 1)
💡 PDF/A 为什么适合长期存档(禁用 JS、字体必须内嵌等细节),官方文档有专门一节。
它内部怎么干活
整条流水线五步:先分析每页需要多大分辨率才能不丢信息;用 pypdfium2 或 Ghostscript 把页面栅格化成位图;Tesseract 在位图上识别文字,产出带坐标的中间结果;再把文字精确叠回原图正下方——这是复制粘贴时字符位置准的原因;最后 Ghostscript 压缩图像、按 PDF/A 打包,输入输出都经过校验。页面里已有的文字和矢量内容不会被破坏,文字层是以"插入"而非"重画"的方式进文件的。
速查与FAQ
- 低清扫描件识别率偏低→ 嵌入图 DPI 不够,识别引擎拿到的像素糊。加
--oversample 600先重采样再识别。 - 页面歪斜或整体转了 90°→ 扫描时没对齐。加
--deskew --rotate-pages自动校正。 - 担心已有文本层的页被重复 OCR→ 默认行为就是跳过含文字的页,不会重复做。只有要整页强制重扫时才加
--force-ocr。 - 处理慢、还嫌体积大→ 默认开着 PDF/A 转换和图像优化。求快就
--output-type pdf --optimize 0。 - 黑白文档想再压小→ 加
--jbig2-lossy,JBIG2 有损压缩对文字图损失很小。 - 只要纯文字副本→ 加
--sidecar,会同步写出同名 .txt 文件。
写进自己程序里也现成:ocrmypdf.ocr('in.pdf', 'out.pdf', language='eng'),完整参数签名见 src/ocrmypdf/api.py。
同类工具怎么选
| 能力 | OCRmyPDF | Adobe Acrobat | 在线OCR服务 | Tesseract 裸跑 |
|---|---|---|---|---|
| 开源免费 | ✅ MPL-2.0 | ❌ 商业收费 | ⚠️ 限量免费 | ✅ |
| 输出 PDF/A 存档 | ✅ 默认 | ⚠️ 部分支持 | ❌ | ❌ 需自己拼 |
| 文字层位置精准、可直接复制 | ✅ | ✅ | ⚠️ 视服务而定 | ❌ 只出纯文本 |
| 批量/脚本自动化 | ✅ 纯命令行 | ⚠️ 付费功能 | ❌ 逐个上传 | ✅ 要自己写 |
| 数据不出本机 | ✅ | ✅ | ❌ 上传云端 | ✅ |
批量处理、要 PDF/A、文件敏感不能上云——这三个条件里占两个就选 OCRmyPDF。要交互式编辑界面,Acrobat 更顺手;只是临时转一个文件又不想装环境,在线服务够用;要深度定制识别管线再考虑 Tesseract 裸跑。
下一步
它把"扫描 PDF 搜不到字"变成一条命令的事:免费、本地跑、默认输出可存档格式。挑一份你最常翻的扫描合同,按上面的 3 分钟流程跑一遍,然后搜一个你确定在里面的词。
【免费下载链接】OCRmyPDFOCRmyPDF adds an OCR text layer to scanned PDF files, allowing them to be searched项目地址: https://gitcode.com/GitHub_Trending/oc/OCRmyPDF
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考