3分钟给扫描PDF加上可搜索文字层:ocrmypdf命令行OCR完整指南
【免费下载链接】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/A 归档格式。
先认识 ocrmypdf:它到底帮你做什么
一句话定位:把"只能看图"的扫描 PDF 变成"能搜、能复制"的可搜索 PDF,同时不动原文档里已有的图像和布局。
三个最值钱的能力:
- 文字层精准贴合:识别出的文字以不可见图层贴在原始图像正下方,复制粘贴出来的顺序和版面一致,不会出现"文字对不上图"的尴尬
- 默认输出 PDF/A:符合 ISO 长期归档标准,文件还经过 VeraPDF 校验,适合法务、财务这类要留存多年的场景
- 本地全离线:文档不出本机,隐私敏感的数据(病历、合同、财报)可以放心处理
它内部用 Tesseract 做识别引擎,用 Ghostscript/pypdfium2 做页面栅格化,纯 Python 调度,Linux、macOS、Windows 通吃。
三分钟上手:从安装到第一份可搜索 PDF
第一步:装好工具链
ocrmypdf 本体是纯 Python,但它依赖两个外部程序:Tesseract(识别引擎)和 Ghostscript(PDF 处理)。用系统包管理器一条命令全搞定:
# Debian / Ubuntu sudo apt install ocrmypdf tesseract-ocr ghostscript # macOS(Homebrew) brew install ocrmypdf tesseract ghostscript第二步:跑通第一条命令
ocrmypdf 扫描合同.pdf 可搜索合同.pdf就这样,两个参数搞定:输入文件、输出文件。跑完你会得到一份默认 PDF/A 格式、带 OCR 文字层、且尺寸往往比原文件更小的新 PDF。打开它,Ctrl+F 搜任何词,能搜到了。
想看所有选项,内置帮助就够:ocrmypdf --help。
按场景拆解核心能力
批量处理:几十几百份文件怎么跑
单文件跑完再跑下一个太慢,官方推荐配 GNU Parallel 做文件级并发(docs/batch.md 有完整说明):
# 目录下所有 PDF 并发处理,每个文件独立输出到 output/ parallel --tag -j 2 ocrmypdf '{}' 'output/{}' ::: *.pdf要点:-j 2控制同时跑 2 个文件,因为每个 ocrmypdf 自己就会用满多核(--jobs N可控制单文件内的页数并发),并发数叠太多反而争抢 CPU。处理整棵目录树则用:
find . -name '*.pdf' | parallel --tag -j 2 ocrmypdf '{}' '{}'边界提醒:它适合"文件级"批量,不适合实时流式场景;上千页的单文件也能跑(官方称经百万级 PDF 实战检验),但耗时基本与页数线性相关。
多语言与混合内容:中英文混排、老文献
识别引擎是 Tesseract,支持 100+ 种语言,语言包单独安装、用 ISO 三字母代码声明:
# 装简体中文语言包 sudo apt install tesseract-ocr-chi-sim # 中英混排文档 ocrmypdf -l eng+chi_sim 期刊.pdf 期刊.pdf几个容易踩细节:
- 不指定
-l时默认只按英文识别,中文文档不装语言包会搜不到 - 老德文文献有专门的 Fraktur 字体包
deu_frak;维吾尔语、乌兹别克语等还有西里尔/拉丁变体包 - 混合语言是"提示"机制:你列出文档里会出现的所有语言,Tesseract 逐词判断,顺序不影响结果
归档合规与元数据管理:把扫描件变成能存十年的档案
默认行为已经是合规向的:输出 PDF/A-2b、字体内嵌、文件经校验。想再进一步:
ocrmypdf \ --title "2024年采购合同扫描件" \ --author "法务部" \ --pdfa-image-compression jpeg \ --optimize 2 \ 合同.pdf 合同.pdf--pdfa-image-compression控制 PDF/A 里图像的重压缩策略,--optimize 0~3控制体积优化力度——扫描件常常"越处理越小",因为优化器会重新编码低质量大图。边界:它不做脱敏/涂黑(虽然社区有配合 redaction 的用法),也不能给加密 PDF 直接加层,密码得先处理。
图像直接进、PDF 直接出
它不挑输入,JPG/PNG/HEIC 直接喂,自动转成单页可搜索 PDF——拍照存档场景非常顺手:
ocrmypdf 发票.jpg 发票.pdf实战:把一整箱扫描论文变成可检索档案库
需求:一个目录里 37 份中英混排扫描论文,部分页面有轻微歪斜和噪点,要求输出可搜索的 PDF/A,并统一写入标题元数据。
完整方案就三行:
# 1. 装多语言包 sudo apt install tesseract-ocr-chi-sim # 2. 并发处理整个目录,去歪+清理+双语识别+PDF/A find ./papers -name '*.pdf' | parallel --tag -j 2 \ ocrmypdf --deskew --clean -l eng+chi_sim '{}' '{}' # 3. 抽查一份,确认能搜到中文 pdftotext papers/某论文.pdf - | grep "摘要"--deskew校正倾斜,--clean在识别前清噪点(注意它只影响识别用图,不改最终版面;若想最终页面也清理,加--clean-final,但激进参数可能移动文字位置,详见 docs/advanced.md)。最后一步用pdftotext抽查,比肉眼看几十份可靠得多。
避坑指南:这 5 个坑最多人踩
- "page already has text" 报错:输入文件本身带文字(或已被 OCR 过),默认模式会直接拒绝。按需求三选一:
--mode force全部重扫(会栅格化矢量内容)、--mode skip跳过已有文字页、--mode redo剥掉旧 OCR 层重新识别。这是 docs/errors.md 里最高频的报错。 - "not a valid PDF":多为拷贝不完整的损坏文件。先用 Ghostscript 重写一遍再喂给它:
gs -o out.pdf -dSAFER -sDEVICE=pdfwrite input.pdf。 - Tesseract 报 "cannot open config file 'hocr'":Tesseract 安装不完整或 PATH 里混了多个版本,重装/清理后
tesseract --list-langs能列出语言包即恢复。 - 中文识别结果稀烂:99% 是忘了
-l chi_sim或没装语言包,默认纯英文模型对汉字基本无能为力。 - 速度不如老版本:新版默认开启了体积优化(PDF/A 转换 + 图像重编码),慢但更小。赶时间时用
--optimize 0 --output-type pdf --skip-big跳过优化,详见 docs/performance.md。
另有一条安全边界要记住:它不是恶意 PDF 防护工具,来源不明的 PDF 建议在 Docker 或虚拟机里跑(docs/pdfsecurity.md)。
横向对比:什么时候选 ocrmypdf
| 维度 | ocrmypdf | Adobe Acrobat(Pro) | 云端 OCR 服务(各类 API) |
|---|---|---|---|
| 成本 | 免费,MPL-2.0 | 订阅制 | 按量付费 |
| 数据是否出本机 | 完全本地 | 本地 | 上传云端 |
| PDF/A 输出 | 默认且自带校验 | 需手动 Prepress | 视服务而定 |
| 批量/脚本化 | 命令行 + 插件,天生适合 | GUI 为主 | 适合 API 集成 |
| 多语言 | 100+(Tesseract 语言包) | 好 | 好 |
| 识别精度上限 | Tesseract 水平(可换引擎插件) | 更高 | 通常更高 |
| 适合场景 | 批量、归档、隐私敏感 | 个人偶发、编辑排版 | 高精度、已上云流水线 |
选它:文件量大、要归档合规、数据不能出内网、流程要进 CI 或脚本。别选它:需要交互式涂改/表单编辑、对单页复杂版式(表格、公式密集)要求极致精度——这类需求可以考虑换装 PaddleOCR/EasyOCR 插件,或用商业方案。
生态与延伸资源
- 官方文档:安装、语言包、高级选项的权威来源
- docs/cookbook.md:常用组合的现成配方,抄作业首选
- docs/plugins.md 与 builtin_plugins/:插件机制源码,Tesseract、Ghostscript、优化器都在这里,可整体替换 OCR 引擎
- docs/api.md / api.py:想在 Python 里以库方式调用(而不是拼命令行)走这里
- misc/watcher.py 与 misc/webservice.py:文件监听自动 OCR、Streamlit 网页服务两个官方示例,搭无人值守管线直接用
- 问题反馈走仓库 issue 区,附最小复现命令和
--version输出,回复会快很多
写在最后
ocrmypdf 的价值不在"又有一个 OCR 工具",而在于它把整条链路——去歪、清噪、多语言识别、文字层贴合、PDF/A 校验、体积优化——收敛成了一条可靠的命令,让你把时间花在定义档案库上,而不是和单页异常搏斗。今晚装好它,明天你的扫描库存就能被全文搜索了。
【免费下载链接】OCRmyPDFOCRmyPDF adds an OCR text layer to scanned PDF files, allowing them to be searched项目地址: https://gitcode.com/GitHub_Trending/oc/OCRmyPDF
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考