5分钟给扫描PDF加上可搜索文本层:OCRmyPDF 完整使用指南
【免费下载链接】OCRmyPDFOCRmyPDF adds an OCR text layer to scanned PDF files, allowing them to be searched项目地址: https://gitcode.com/GitHub_Trending/oc/OCRmyPDF
把一沓纸质合同扫进扫描仪,得到的往往是一个"能看不能搜"的 PDF:Ctrl+F 毫无反应,想引用一句话只能重新手打。OCRmyPDF 就是为这个场景准备的命令行工具——它在扫描件图像的上面叠加一层肉眼看不见的文本层,让文件从此可搜索、可复制,而你看到的页面图像保持不变。
📄 它解决的问题:给图像 PDF 补一层可搜索文字
一句话定位:OCRmyPDF 是一个 Python 命令行工具(也可作为库调用),输入扫描版 PDF,输出带文本层的 PDF。
几个值得先知道的行为:
- 输出默认是PDF/A-2b(ISO 归档标准),字体等资源全部内嵌,适合长期存档;想要普通 PDF 加
--output-type pdf即可 - 自动跳过已经是数字化的页面,不会重复识别,混合文档也能直接处理
- 默认只识别英文(
-l eng),通过语言参数可覆盖上百种语言,详见 docs/languages.md
下面这张是项目测试用的扫描文档样本,和你在扫描器里拿到的产物形态一致:
📦 三分钟装好:按你的系统选一行命令
三大主流平台都是一条命令的事:
# macOS(Homebrew) brew install ocrmypdf # Debian / Ubuntu / WSL apt install ocrmypdf # Fedora(tesseract-osd 是识别引擎的依赖) dnf install ocrmypdf tesseract-osdWindows 用户建议走 WSL 或 pip 安装。各平台的完整说明、版本差异(比如 Debian 仓库缺少 JBIG2 编码器)都写在 docs/installation.md 里。
🔍 让扫描件可搜索的最短命令
装好后,最小可用命令只有两个参数:
ocrmypdf input.pdf output.pdf它内部做了几件你不需要操心的事:逐页检测所需的分辨率和色彩空间,把页面栅格化成图像,交给 Tesseract 引擎识别文字,再把识别结果按原始坐标贴回 PDF。因为是"贴回原文件"而不是重建文件,文档元数据、向量内容、已有链接都得以保留。
处理过程实时显示进度和每页的耗时,最终还会跑一次 PDF/A 合规校验,不通过会直接报错而不是给你一个坏文件。
📐 歪了、倒了怎么修:--deskew 和 --rotate-pages
手机拍的照片、老式扫描仪的产物,常见问题是整页倾斜几度或者横过来了。两个开关各管一件事:
--deskew:检测文本基线角度,把轻微倾斜(比如 2°~5°)旋转回正,识别率对这种歪斜非常敏感--rotate-pages:判断页面是 0°/90°/180°/270° 哪种方向,把横过来或倒着的整页转正
两者都打开就是针对歪斜扫描件的标准姿势:ocrmypdf --deskew --rotate-pages input.pdf output.pdf。
🧹 老文档去背景、顺手导出纯文本
泛黄的旧报纸、灰底复印件,背景杂色会拖累识别质量。--remove-background会淡化背景、突出文字。
如果除了 PDF 还想要一份纯文本(喂给全文检索、做数据整理),加--sidecar,处理完会同时产出一个 txt 文件:
ocrmypdf --sidecar notes.txt input.pdf output.pdf注意--sidecar和--force-ocr这类"强制识别所有页面"的选项可以组合,但对已有文本层的页面强开只会得到重复的文本。
🗂️ 一次跑完整个文件夹的扫描件
单个文件是试手,真正的工作量在批量。项目内置的批处理方案是把输入输出都接到标准流上,配合find原地处理:
find . -name '*.pdf' -exec ocrmypdf '{}' '{}' \;文件多的时候建议用 GNU Parallel 限制并发(parallel -j 2),避免几十个进程同时吃满 CPU。完整写法、Docker 版批处理都整理在 docs/batch.md;仓库里的 misc/watcher.py 还能把目录监听起来,文件一放进去自动处理。
处理完成后的效果就是上面这样的界面:进度条走完,输出校验结果:
⚙️ 原理一句话
整条链路是:用 pypdfium2 或 Ghostscript 把每页渲染成图像,Tesseract 识别,再叠回原 PDF;图像预处理(去噪、纠斜)交给 unpaper。相关外部工具的对接口子都在 src/ocrmypdf/_exec/ 目录,想看实现可以直接翻。
🚀 下一步
挑一个你手上真实的扫描件跑ocrmypdf --deskew --rotate-pages input.pdf output.pdf,然后用 Ctrl+F 搜一个你在原文里确定的词——搜到了,这篇教程就白看了。
【免费下载链接】OCRmyPDFOCRmyPDF adds an OCR text layer to scanned PDF files, allowing them to be searched项目地址: https://gitcode.com/GitHub_Trending/oc/OCRmyPDF
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考