如何用 OCRmyPDF 给扫描 PDF 加上可搜索的文字层
2026/9/12 13:11:22 网站建设 项目流程

如何用 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:原图一字不动,只在下面垫一层隐藏文字,文件从此能搜索、能复制。免费开源,文件不用上传到任何服务器,几十份扫描件一次跑完。这篇带你从装好、跑通第一条命令,讲到最常用的参数和常见报错。

什么情况下用它

  • 文件夹里一堆扫描件,合同、发票只能看不能搜。过一遍 OCRmyPDF 后,每页多出一层文字,PDF 阅读器里Ctrl+F能直接命中关键词。
  • 扫描的论文或旧书动辄两三百页。它默认把全部 CPU 核心拿去并行,厚书一次跑完,不用一页页手动处理。
  • 文件里图片页和文字页混排。加--skip-text,已有文字层的页原样保留,只对纯图像页做识别。

安装并跑通第一条命令

pip install ocrmypdf # Windows,需先装 Tesseract 和 Ghostscript brew install ocrmypdf # macOS apt install ocrmypdf # Debian / Ubuntu

装完直接跑最短的一条:

ocrmypdf 扫描件.pdf 可搜索.pdf

验证方法:用 PDF 阅读器打开可搜索.pdf,按Ctrl+F输入一个页面里确定有的词,能命中、选中能复制,说明文字层加上了。输出默认是 PDF/A 归档格式,适合长期保存。

高频参数

告诉它识别语言。默认按英文识别,文档不是英文就该换,否则准确率掉得很快。

ocrmypdf -l eng+deu 德文笔记.pdf 德文笔记_可搜索.pdf

识别出的文字改用对应语言模型,德文的 ü、ß 不再变成乱码。

只处理部分页面。几百页的文件只需要其中几节,用页码范围限定。

ocrmypdf --pages 4-25 大文档.pdf 大文档_部分.pdf

输出里只剩第 4 到 25 页,识别耗时和内存占用同步降下来。

重做已有文字的页面。页面本来带文字层但识别不准时,强制重新识别。

ocrmypdf --force-ocr 重扫.pdf 重扫_可搜索.pdf

旧的隐藏文字被抹掉,整页重绘成图像再识别一遍,得到全新的文字层。

压缩输出。发现输出比输入还大时,打开图像压缩。

ocrmypdf --optimize 2 扫描件.pdf 扫描件_更小.pdf

图像被重新编码,文件体积变小,高分辨率扫描件差几倍都正常。

组合实战 📚

一本旧书扫描件:有的页转了方向,多数页轻微歪斜,还有阴影,繁体中文里混着英文。一条命令全处理掉:

ocrmypdf -l chi_tra+eng --rotate-pages --deskew --clean-final -j 8 --optimize 2 旧书.pdf 旧书_可搜索.pdf

每个参数的分工:

  • -l chi_tra+eng:语言包告诉引擎书里两种语言并存
  • --rotate-pages:把转了 90° 或 180° 的页自动摆正
  • --deskew:修正小幅歪斜
  • --clean-final:去噪去阴影,清洁后的图像替换原页
  • -j 8:8 个核心并行,300 页的厚书省一半以上时间
  • --optimize 2:压缩图像,输出不至于膨胀

注意--deskew--clean-final依赖 unpaper 程序,没装会报错,见下一节。

遇到问题先查这里 🛠

问:报错提示找不到chi_tra语言包。答:对应的 Tesseract 语言包没装。Debian/Ubuntu 执行apt-get install tesseract-ocr-chi-tra;macOS 执行brew install tesseract-lang

问:出现 "PDF contains text",拒绝处理。答:默认行为是不碰已有文字层的页面。加--skip-text跳过这类页继续,或者用--force-ocr全部重新识别。

问:--clean-final报错说缺少 unpaper。答:去噪环节依赖 unpaper 这个外部程序,先执行apt install unpaper装好再重跑。

问:输出文件比输入大。答:文字层是额外加上的内容,图像默认无损编码。加--optimize 3压缩更狠;系统里装了 pngquant、jbig2enc 还会更小。

第一条命令跑通之后,剩下的活就是按文档情况往后面加参数。完整参数清单在 docs/advanced.md,上面几种报错的来龙去脉可以在 docs/errors.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),仅供参考

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

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

立即咨询