☰
OCRmyPDF 扫描 PDF OCR 实战指南:从一键安装到批量归档
2026/9/30 3:06:46 网站建设 项目流程

OCRmyPDF 扫描 PDF OCR 实战指南:从一键安装到批量归档

【免费下载链接】OCRmyPDFOCRmyPDF adds an OCR text layer to scanned PDF files, allowing them to be searched项目地址: https://gitcode.com/GitHub_Trending/oc/OCRmyPDF

场景切入

手里攥着一沓 200 页的扫描版合同,想 Ctrl+F 找一句违约条款,结果一个关键词都搜不到——因为那些字只是图片。这正是扫描 PDF OCR 要解决的痛点:OCRmyPDF 会往图片底下贴一层可搜索的文本,让扫描件从「只能看」变成「能搜、能选、能复制」。它默认产出符合 ISO 标准的 PDF/A,文本位置又贴得准,复制粘贴不会错位。说白了,它就是把「图片 PDF」升级成「真正能用的 PDF」。

30 秒快速上手 🚀

先按你的系统装一下。三个平台各一条命令,装完就能跑。

apt install ocrmypdf # Linux(Debian/Ubuntu) brew install ocrmypdf # macOS(Homebrew) pip install ocrmypdf # Windows:先备好 Tesseract 与 Ghostscript

装好后,最小可用命令就长这样——输入一个文件,输出一个可搜索文件:

ocrmypdf input.pdf output.pdf

跑完你会在终端看到进度条从 0% 爬到 100%,然后得到output.pdf。把它丢进任意 PDF 阅读器,文字就能选中、能搜索了。Windows 用户注意:因为 Ghostscript 现在不再支持静默安装,得先从官网手动装好它和 Tesseract,再用pip装本体。

一条命令背后发生了什么 🔍

你敲下一条命令,OCRmyPDF 内部大致做了这几件事:

  1. 读取与修复:用 pikepdf 打开输入文件,顺手把坏掉的 PDF 自动修好。
  2. 逐页分析:判断每页的颜色空间、DPI,挑出真正需要 OCR 的页。
  3. 栅格化:把页面渲染成图像,默认优先用 pypdfium2,缺省时回退 Ghostscript。
  4. 调用 Tesseract 识别:跑 OCR,拿到每个字的文本和坐标。
  5. 文本层回填:把识别结果精确铺回原图对应位置,保证可复制、不错位。
  6. 可选预处理:--deskew、--clean之类在第 3 步之前生效,先把图修直修净。
  7. 合成存档格式:默认输出 PDF/A-2b,长期保存不跑偏。
  8. 校验输出:确认结果合法后写出文件。

一张典型的扫描文档输入,就是下面这种只有图像、没有文本的样式:

你可以试试加个--verbose,把上面每一步都打印出来看个明白:

ocrmypdf --verbose input.pdf output.pdf

常用参数速查

高频参数按功能分四组,先记这几张表就够用了。

语言 & 预处理

参数作用一句话备注
-l, --language指定 OCR 语言多语言用+连接,如-l eng+fra
-r, --rotate-pages自动纠正方向错乱的页扫描件歪 90° 很常见
-d, --deskew校正页面倾斜提升识别率
--clean用 unpaper 清理图像噪声需另装 unpaper

输出

参数作用一句话备注
--output-type选输出格式默认pdfa,可用pdf关掉存档
--sidecar额外导出纯文本带-输出到标准输出
--optimize图像压缩档位 0–3越高越小,档 2+ 用到 pngquant
--force-ocr强制对已有文本的页重扫原 OCR 失败时用

性能 & 调试

参数作用一句话备注
-j, --jobs指定并行核心数默认吃满所有 CPU 核心
--skip-big跳过超大页面防止内存爆掉
-v / -q详细 / 静默日志排错用-v,批量用-q
--redo-ocr剥掉旧文本层重扫想换更强引擎时用

三条组合命令,直接抄:

# 中文文档(先装 chi_sim 语言包) ocrmypdf -l chi_sim 合同.pdf 合同.pdf # 多语言混合 ocrmypdf -l eng+fra 双语文档.pdf 双语文档.pdf # 批量归档(并行 2 个任务,原地处理) find . -name '*.pdf' | parallel --tag -j 2 ocrmypdf '{}' '{}'

进阶技巧与组合玩法 🔧

sidecar 纯文本输出

不是所有场合都要 PDF,有时你只想要一段能喂给搜索或大模型的文本。--sidecar会在生成 PDF 的同时吐出一份.txt,配合--output-type none就纯出文本、不落 PDF。把 sidecar 设为-,文本直接走标准输出,方便管道串联。

ocrmypdf --sidecar - --output-type none 扫描件.pdf /dev/null

Docker 与 Paperless-ngx 集成

不想在本地装一堆依赖?官方 Docker 镜像把所有组件打包好了,而且支持把 PDF 从 stdin 读入、从 stdout 读出,彻底绕开文件权限问题。它也是 Paperless-ngx 这类文档管理系统背后做 OCR 的引擎,接进去就是「丢进去 → 自动识别 → 可检索」。详见 docs/docker.md。

docker run --rm -i jbarlow83/ocrmypdf-alpine \ --sidecar - - - < 扫描件.pdf > 文本.txt

自定义预处理流水线与批量监控

批量场景不用手写循环,docs/batch.md 给了parallel与find的现成套路。更进一步,仓库里自带一个目录监控脚本 misc/watcher.py:盯着输入文件夹,有新 PDF 进来就自动 OCR、按月归档、把原件挪走。想接更多能力,它还提供OCR_JSON_SETTINGS环境变量,把任意参数以 JSON 塞进去即可。

find . -name '*.pdf' -printf '%p\n' -exec ocrmypdf '{}' '{}' \;

除了命令行,它也是正经的 Python 库,参数集中在OcrOptions里做校验,调用示例见 src/ocrmypdf/_options.py:

import ocrmypdf from ocrmypdf import OcrOptions options = OcrOptions(input_file='in.pdf', output_file='out.pdf', deskew=True) ocrmypdf.ocr(options)

踩坑与排查 ⚠️

报错 page already has text

症状:ERROR - 1: page already has text!。原因:文件里已经有文本层了。解法:确认它其实能搜就不用动;确实要重扫就加--force-ocr,只想跳过就--skip-text。

提示 is not a valid PDF

症状:Input file 'x' is not a valid PDF。原因:文件损坏或复制不完整。解法:用 Ghostscript 重写一遍gs -o out.pdf -dSAFER -sDEVICE=pdfwrite in.pdf。

Tesseract 打不开 config 'hocr'

症状:Tesseract cannot open its config file 'hocr'。原因:手动拼的tessdata目录缺configs/子目录。解法:从完整 Tesseract 安装里把configs/拷进去,或直接改用系统包管理器装。

中文识别出一堆乱码

症状:结果全是方框或错字。原因:没装对应语言包,或语言代码写错。解法:先apt-get install tesseract-ocr-chi-sim,再ocrmypdf -l chi_sim。

内存不够 / 处理大文件卡死

症状:页数多时进程被系统杀掉。原因:默认吃满核心,大图页面耗内存。解法:-j 2降并行,或--skip-big跳过大页。

下一步

回到开头那沓搜不到字的合同:现在给它跑一条ocrmypdf -l chi_sim 合同.pdf 合同.pdf,Ctrl+F 就能命中条款了。先拿一个文件试水,顺了再上parallel批量归档。

【免费下载链接】OCRmyPDFOCRmyPDF adds an OCR text layer to scanned PDF files, allowing them to be searched项目地址: https://gitcode.com/GitHub_Trending/oc/OCRmyPDF

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询