OCRmyPDF:给扫描PDF加文本层的完整指南,3步让文件可搜索
【免费下载链接】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(光学字符识别,即把图片里的字"读"成文字)文本,让原本只能看、不能搜的扫描件变成可以搜索、可以复制粘贴的文档。它基于 Python 编写,依赖 Tesseract 引擎,支持 100 多种语言,适合个人文档管理者和批量处理扫描件的开发者。本文按安装、上手、实战、进阶四条线走一遍 OCR 处理扫描 PDF 的完整流程。
上图是它在终端里跑一次真实任务的完整输出:先并发扫描 8 页,再逐页 OCR,最后压缩优化图像,并报告输出文件是符合预期的 PDF/A-2B 格式。整个过程没有任何交互,跑完就结束,这种"喂文件进、拿文件出"的形态正是它能被写进脚本的原因。
为什么它比常见 OCR 方案省心
很多做 PDF 文本识别的开源工具都有几个通病:识别出的文字位置对不上图片,复制出来是乱序的;处理过程中把图片分辨率改掉了;或者输出的 PDF 本身不合法。OCRmyPDF 的作者正是因为市面上没有满意的工具才写了它,README 里把这几条列得很直白。
它的几个关键做法值得单独说:
- 文字放在图片"底下":识别出的文字按原始坐标精确贴在对应位置,所以复制出来的顺序和排版一致,不会出现整段错位
- 默认输出 PDF/A:这是 ISO 标准的归档格式,要求字体等资源全部内嵌,适合长期保存,很多法院和档案馆也指定用它
- 输出经过验证:输入和输出文件都会做合法性检查,失败时不会给你留一个坏文件
- 默认用满所有 CPU 核心,几千页的大文件也能正常跑
还有一条隐私上的好处:它是纯本地运行,文档不会上传到任何在线服务。
安装 OCRmyPDF:各系统一条命令
OCRmyPDF 支持 Linux、macOS、Windows 和 FreeBSD,各平台都装好了现成包,不用自己从源码编译:
brew install ocrmypdf # macOS apt install ocrmypdf # Debian / Ubuntu装好后运行ocrmypdf --help能看到全部参数说明,这是它内置的"文档",比翻网页快。
提示:OCRmyPDF 本身是 Python 包,但识别工作交给外部的 Tesseract 引擎。中文文档请先装好语言包,例如 Debian 上用
apt-get install tesseract-ocr-chi-sim,否则-l chi_sim会找不到对应语言。
快速上手:一条命令完成第一次 OCR
最小用法就是"输入文件 输出文件"两个参数:
ocrmypdf 扫描文档.pdf 可搜索.pdf它读取左侧扫描件,把识别出的文字作为透明文本层叠在图像下方,输出右侧文件。你可以打开输出文件验证三件事:
- 用 PDF 阅读器全选复制一段文字,看内容是否和排版顺序一致
- 在搜索框里输入文中某个词,确认能搜到
- 跑的过程中终端会显示进度条,结束时报告"Output file is a PDF/A-2B"之类的验证结果
真实用法:三种最常见的场景
扫描件斜了、有噪点。扫描仪出的页面经常整体歪掉几度,文字发虚。在命令里加上--deskew --clean两个参数就行:前者自动检测倾斜角度并校正,后者调用 unpaper 做去噪和边缘清理。处理完的页面是正的,文字也干净,OCR 准确率自然比直接识别歪图高。
只有图片,没有 PDF。手机拍的票据、照片格式的资料,直接把图片文件名当输入即可,它会把 JPG、PNG 转成单页 PDF 再走 OCR 流程。ocrmypdf 照片.jpg 输出.pdf一条命令完成,不需要先手动转格式。
批量处理一个文件夹。文档多到手动跑不过来时,社区推荐用 GNU Parallel 配合它(详见 docs/batch.md),比如parallel --tag -j 2 ocrmypdf '{}' 'output/{}' ::: *.pdf,同时跑两份文件、逐份输出到 output 目录,--tag让报错信息带上文件名,方便定位是哪个文件出问题。OCRmyPDF 内部本身也会用满多核,所以外层一般只开少量并发,避免把机器塞满。
进阶:几个真正用得上的参数
-l指定语言:混合语料用加号连接多个语言码,如-l eng+chi_sim。它只是给 Tesseract 一个"往哪些语言上猜"的提示,装了对应语言包才能生效--sidecar导出纯文本:在生成可搜索 PDF 的同时把识别出的文字写成 txt 文件,方便直接拿去校对或做全文检索--mode控制已有文字页面的处理方式:默认遇到带文字的页面会直接报错退出(防止重复处理)。--mode skip表示跳过这些页只处理扫描页,--mode redo会剥掉旧的文本层重新识别,适合"上次识别得不准、想重来"的情况--title/--author写元数据:顺手给输出文件填上标题和作者,归档时少一步手工操作
参数之间也有搭配讲究,比如--mode redo目前不能和--deskew、--clean-final同时用,遇到冲突它会直接报错提示,不会闷头跑错。
小结
OCRmyPDF 把"扫描件能搜、能复制、能长期存"这三件事合成了一条命令:本地运行、输出带验证、默认 PDF/A,新手跑通第一条命令后,剩下的就是按场景挑参数的过程。更多选项和背景知识可以看官方文档目录下的 docs/introduction.md(介绍工作原理)和 docs/advanced.md(进阶参数详解)。
【免费下载链接】OCRmyPDFOCRmyPDF adds an OCR text layer to scanned PDF files, allowing them to be searched项目地址: https://gitcode.com/GitHub_Trending/oc/OCRmyPDF
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考