OCRmyPDF 快速实战:给扫描PDF加可搜索文本层的完整路线
【免费下载链接】OCRmyPDFOCRmyPDF adds an OCR text layer to scanned PDF files, allowing them to be searched项目地址: https://gitcode.com/GitHub_Trending/oc/OCRmyPDF
手头攒了一百多页扫描件,想搜里面的关键词、复制几段文字,结果每页都得靠肉眼找。OCRmyPDF 把这些 PDF 加上不可见的 OCR 文本层,加完就能搜索和复制,全程本地离线、可整批跑,不碰网络也不上传。
先跑通,再理解:一条命令给扫描PDF加文本层 🏁
Debian/Ubuntu 上两条命令就能出第一个可搜索文件:
# 安装,自带 Tesseract 与 Ghostscript sudo apt install ocrmypdf # 给扫描件加英文文本层,输出可搜索 PDF ocrmypdf -l eng input.pdf output.pdf跑完 output.pdf 里原始图片一字未动,只是每页图下多了一层看不见、但能被选中的文字。它还能做这些:
- 歪斜与旋转校正:
--deskew扶正拍歪的页,--rotate-pages纠正 90/180 度方向错,适合手机翻拍的档案。 - 多语言混排:
-l eng+chi_sim一次识别中英穿插,底层 Tesseract 覆盖 100+ 种语言。 - 图像清理:
--clean调 unpaper 去背景杂点与阴影,低质量扫描件识别率明显上来。 - 长期存档输出:默认产出 PDF/A,字体与色域全内嵌,不依赖阅读环境。
- 多核并行:自动占满所有 CPU 核心,上千页的文件也能稳着跑完。
三种典型用法:批量扫描PDF、多语言与存档配方
三个配方按处理量从小到大排,照着改参数就能直接用,待处理对象长这样:
批量处理命令:整目录扫描件一次跑完
扫描件攒成一批、要统一加文本层时用这条:
mkdir output parallel --tag -j 2 ocrmypdf -l eng '{}' 'output/{}' ::: *.pdf-j 2限制同时只开 2 个进程——ocrmypdf 自己会用满 CPU,并行太多反而抢资源,2 是吞吐和稳定的平衡点;--tag给每条日志加文件名前缀,出错能直接定位到具体文件。
多语言参数怎么配:中英混排一次识别
合同、说明书里中英文穿插,单一语言包会漏字时:
# 中英混排 ocrmypdf -l eng+chi_sim contract.pdf contract_ocr.pdf # 老德文 Fraktur 花体字 ocrmypdf -l deu_frak old_book.pdf old_book_ocr.pdf语言包用+串起来,列全了才不漏;代码是 ISO 639-2 三字母码,chi_sim简体、chi_tra繁体、deu_frak专治老德文。
归档级输出配方:PDF/A 加最高档压缩
要送档案馆、法院或留十年以上的扫描件:
ocrmypdf -l eng \ --output-type pdfa \ --optimize 3 \ --title "2026年归档扫描件" \ scanned.pdf archived.pdf--output-type pdfa把字体和 ICC 色彩配置塞进文件本身,多年后照样能打开;--optimize 3走最高档压缩,输出常常比输入还小;--title写进元数据,归档后好检索。
环境适配与安装
离线机、Docker、语言包路径和依赖版本,一次说清:
- 离线安装(Linux):有网机
apt-get download ocrmypdf ghostscript tesseract-ocr取 .deb,拷到离线机dpkg -i *.deb。 - 离线安装(Windows):离线机用 winget 装 64 位 Python、Tesseract、Ghostscript,再
py -m pip install ocrmypdf。 - Docker:不想折腾依赖,
docker run --rm -i jbarlow83/ocrmypdf-alpine - - <in.pdf >out.pdf直接走。 - 语言包路径:Linux 在
/usr/share/tesseract-ocr/4.00/tessdata/,Windows 在C:\Program Files\Tesseract-OCR\tessdata\,缺哪个补哪个 .traineddata。 - 性能参数:
--jobs 8定并行页数,--pages 1-50只处理指定页,超大文件按页分批不爆内存。
| 项目 | 说明 | 关键参数 |
|---|---|---|
| Python | 运行 ocrmypdf 本体 | ≥3.10,推荐 3.12 |
| Ghostscript | PDF/A 转换的回退路径 | ≥9.54 |
| Tesseract | OCR 引擎 | ≥4.1.1 |
| 语言包 | 决定能识别哪些字 | -l指定的 .traineddata |
报错解法踩坑清单 🛠️
跑起来报错基本就这四种,对着改:
page already has text:文件已带文本层,加--force-ocr重扫、--skip-text跳过、或--redo-ocr清掉旧的再识别。not a valid PDF:文件损坏或被截断,用gs -o fixed.pdf -dSAFER -sDEVICE=pdfwrite input.pdf重写后再跑。Tesseract couldn't find a language data file:语言包没装全,确认对应 .traineddata 在 tessdata 目录里。- 识别率偏低:加
--clean --deskew先做图像预处理再识别。
参数与依赖的完整对照见 官方文档;想看文本层是怎么拼进 PDF 的,翻 核心源码。重要文档先拿 5 页试跑,确认识别效果再全量处理。
【免费下载链接】OCRmyPDFOCRmyPDF adds an OCR text layer to scanned PDF files, allowing them to be searched项目地址: https://gitcode.com/GitHub_Trending/oc/OCRmyPDF
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考