给扫描 PDF 加可搜索文本层:OCRmyPDF 实战指南
2026/9/1 9:58:30 网站建设 项目流程

给扫描 PDF 加可搜索文本层:OCRmyPDF 实战指南

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

OCRmyPDF 是一个命令行工具,用 Tesseract 引擎给扫描 PDF 添加可搜索的 OCR 文本层,输出带文本层、可校验的 PDF/A 文件,原始图像内容保持不变。

场景很常见:你拿到一份 200 页的扫描版论文或合同扫描件,Ctrl+F 没有任何反应,想要检索三个关键词,只能一页页人工翻。

它是什么,解决什么问题

OCRmyPDF 做的事只有一件:把扫描图像上的文字识别成文本层,叠在原始图像下面,让 PDF 变得可搜索、可选择、可复制。

它不做的事同样明确:不识别手写体,不重排版面,不转成 Word 或 HTML,也不做文档问答。

典型痛点场景:

  • 扫描件无法检索:整份文档只是图像,关键词搜索、全文索引全部失效
  • 别家工具复制出来文字错行串行:文本层定位不准,多栏版式下复制粘贴基本不可用
  • 归档有合规要求:需要长期保存且符合 ISO 标准的 PDF/A 格式
  • 文档量大需要批量处理:几十上百份扫描件要靠脚本和并行跑批

截图中的Total file size ratio: 2.16 savings: 53.8%一行是输出文件相对输入的压缩比,Output file is a PDF/A-2b是校验结论

安装与首次运行

支持 Linux、macOS、Windows 和 FreeBSD,Docker 镜像也有。三种平台的安装命令:

平台安装命令
Linux(Debian / Ubuntu)sudo apt install ocrmypdf
Linux(Fedora)sudo dnf install ocrmypdf
macOS(Homebrew)brew install ocrmypdf
Windows(winget)winget install jbarlow83.ocrmypdf
Windows(Python 环境)pipx install ocrmypdf

安装完成后跑最简转换:

ocrmypdf 输入.pdf 输出.pdf

输出里看到Done以及Output file is a PDF/A-2b即成功。再在 PDF 阅读器里选中一段文字复制出来,能粘出正确内容就算跑通。

核心能力拆解

文本层精确定位

OCR 结果按原文字坐标叠在图像下方,复制粘贴时文字顺序与版面一致。

ocrmypdf 输入.pdf 输出.pdf

多栏报纸、带表格和脚注的文档最需要这一点——定位一旦错位,跨栏复制出来就是乱码式的串行文本。

多语言混排识别

默认识别英文(eng),支持 Tesseract 的 100 多种语言包,多个语言用+连接。

# 中文文档(Debian/Ubuntu 需先装语言包) sudo apt install tesseract-ocr-chi-sim ocrmypdf -l chi_sim 中文文档.pdf 输出.pdf # 英文法文混排,Tesseract 会逐页检测实际语言 ocrmypdf -l eng+fra 混合文档.pdf 输出.pdf

适合处理外文文献、多语言混排档案,以及给中文扫描文档批量加文本层的用户;语言包安装方法见 语言文档。

扫描质量自动矫正

提供一组可选的图像预处理:--rotate-pages按文本方向自动旋转页面,--deskew校正整页倾斜,--clean去除扫描噪点和黑边,--remove-background去除灰色底色。

ocrmypdf -d --rotate-pages 倾斜扫描件.pdf 输出.pdf

这些开关默认全部关闭,只在扫描件确实有旋转、倾斜、脏背景时开启——--clean--remove-background处理过重的话可能误删正文,需要留意的用户先用小样验证。

输出压缩与自动校验

默认输出 PDF/A,归档友好;内置图像压缩会把大体积扫描件压小,输出文件通常比输入更小,截图中的示例压缩到了 46%。每份输出在保存前都会走一次 PDF 规范校验,校验失败时直接报出具体原因和页码,排错入口见 错误码文档。

# 不想要 PDF/A、尽量不动输入文件时 ocrmypdf --output-type pdf 输入.pdf 输出.pdf

适合需要长期归档、或者对输出文件合法性有硬性要求的场景。

一个完整实战流程

拿一份荷兰语老式打字机文档(等宽字体、扫描件、略有倾斜)走一遍完整流程。

# 1. 安装识别语言包(Debian/Ubuntu;Windows 可用 winget install Tesseract.OCR,macOS 用 brew install tesseract-lang) sudo apt install tesseract-ocr-nld # 2. 主转换:校正倾斜,生成 PDF/A 输出,同时产出 sidecar 纯文本 ocrmypdf -l nld --deskew 输入.pdf 输出.pdf --sidecar # 3. 用 sidecar 文本快速核对识别质量(无需打开 PDF) head 输出.txt # 4. 质量确认后批量处理其余文档(misc/batch.py 会逐文件调用 ocrmypdf) python3 misc/batch.py -l nld --deskew 扫描件目录/*.pdf

第 1 步装对语言包,避免整篇被当成英文识别;第 2 步用--deskew先校正倾斜再识别,能明显提高歪斜页面的识别率,--sidecar顺手产出可 grep 的纯文本;第 3 步是廉价的质量检查,确认Linzensoep这类关键词识别正确再往下走;第 4 步批量跑批,每份输入独立处理,单个文件失败不影响其他文件。

进阶参数与调优

提升识别率

参数效果适用条件
--oversample 400先把低分辨率页面超采样到至少 400 DPI 再识别扫描件清晰但偏糊、字小
-d/--deskew逐页检测并校正倾斜角度扫描时页面没摆正
--image-dpi 300输入是裸图片时声明其 DPI直接喂图片文件而非 PDF
--clean去噪、去黑边后再识别,原图保留在输出里有明显扫描瑕疵

提升速度

参数效果适用条件
-j 2限制并行核心数(默认吃满所有核心)内存吃紧或机器在跑别的任务
-q静默模式,不打印 INFO 和进度条跑批脚本、写进 cron
--mode skip跳过已有文本层的页面,不重复 OCR文档里只有一部分是扫描件

输出控制

参数效果适用条件
--optimize 3优化等级 0~5,等级越高压缩越强想进一步减小体积,默认 3
--output-type pdf不强制 PDF/A,最小化改动不需要归档合规
--sidecar 文本.txt额外输出与 OCR 层一致的纯文本建全文索引、做质量抽检

常见问题

已有文本层的 PDF 会报错,怎么办

直接对"图像+旧文本层"的混合文档运行,默认模式会报错。按需三选一:

ocrmypdf --mode skip 混合.pdf 输出.pdf # 跳过已有文本的页,只 OCR 纯图像页 ocrmypdf --mode redo 混合.pdf 输出.pdf # 整页重做 OCR,替换旧文本层 ocrmypdf --mode strip 混合.pdf 输出.pdf # 只删掉旧的不透明文本层,不跑 OCR

--mode skip是混合文档批量处理时的默认选择,速度最快。

识别错误多,怎么排查

按这个顺序试:

ocrmypdf -l eng --deskew --clean --oversample 400 输入.pdf 输出.pdf

先确认语言包装对了(--deskew治倾斜,--clean治噪点和黑边,--oversample治低分辨率);再检查输出里的 warning,OCRmyPDF 会对识别置信度低的页面给出提示,见 错误码文档。

中文文档怎么处理

中文用chi_sim语言包(繁体是chi_tra),先装包再指定语言:

sudo apt install tesseract-ocr-chi-sim # Debian/Ubuntu;macOS 用 brew install tesseract-lang ocrmypdf -l chi_sim 中文扫描件.pdf 输出.pdf

Windows 上可以winget install Tesseract.OCR装引擎,语言包用 Tesseract 安装包自带或从 tessdata 下载后放到安装目录的tessdata里。

适合谁,什么时候不用它

适合:手里有扫描版 PDF、图像 PDF,需要检索、复制文本、建索引的人;需要 PDF/A 归档、对接 Paperless-ngx 等文档管理系统的团队;以及想把 OCR 批量处理写进脚本或定时任务的用户。

不适合:文档已有文本层,直接搜索即可,没必要跑一遍 OCR;大量手写体内容——印刷体之外识别效果有限,不要拿它当手写识别工具;需要版面重排、转 Word/HTML 的需求,它只在原 PDF 上加一层文本。

核心价值就一句:扫描 PDF 进,可搜索的 PDF/A 出,文本层定位准、体积通常更小、每份输出都经过校验。建议先用一份 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),仅供参考

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

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

立即咨询