如何把扫描 PDF 变成可搜索文本:OCRmyPDF 从安装到批量处理完整教程

发布时间:2026/9/2 14:01:48
如何把扫描 PDF 变成可搜索文本:OCRmyPDF 从安装到批量处理完整教程 如何把扫描 PDF 变成可搜索文本OCRmyPDF 从安装到批量处理完整教程【免费下载链接】OCRmyPDFOCRmyPDF adds an OCR text layer to scanned PDF files, allowing them to be searched项目地址: https://gitcode.com/GitHub_Trending/oc/OCRmyPDFOCRmyPDF 是一个命令行工具专门给扫描版 PDF 加一层看不见却能选中的文本让原本只是一张图片的 PDF 变得能被搜索、复制并顺手转成适合长期保存的 PDF/A 归档格式。它不重排你的版面也不改动你看到的画面只是悄悄在页面上盖了一层可被检索的文字。如果你手头堆着扫描仪、拍照或旧系统导出的 PDF却怎么都搜不到里面的字这个工具就是为这种场景准备的。先搞懂它到底在干什么很多人以为 OCR 就是把图片转成文字但直接这样做很容易把版面弄丢。OCRmyPDF 的更稳妥做法是三步逐页转成图片PDF 本身是给排版用的描述文件里面既有矢量图形也有扫描图。它先调用渲染器pypdfium2 或 Ghostscript把每一页画成一张图片因为 Tesseract 这类 OCR 引擎只认图片不认矢量。识别出文字把图片丢给 Tesseract猜出里面是什么字、每个字大概在什么位置。把文字层盖回去识别结果以不可见文本的形式叠回原 PDF——你看到的还是那张扫描件但光标已经能框选、能复制、能搜了。因为它是在原文件上盖文本而不是重新生成一份新 PDF所以文档原有的元数据、结构、矢量内容大多能保留下来输出文件改动也最小。下面是它实际跑起来时的样子能看到扫描、OCR、PDF/A 转换各阶段的进度和最终压缩比默认情况下它会输出PDF/A-2b一种为长期存档设计的 PDF 子集内置字体、禁用脚本更利于多年后还能打开。如果只想拿到普通 PDF加--output-type pdf即可关掉这一层。装到能跑包管理器、pip、源码三条路OCRmyPDF 本身是 Python 程序但它依赖几个装在系统里的外部工具装的方式决定了你能多省事Linux 包管理器最省事Debian/Ubuntu 直接apt install ocrmypdfFedora 用dnf install ocrmypdf tesseract-osd。这些渠道版本可能比官方新但够用。pip / uv要最新版pip install ocrmypdf官方更推荐用uv pip install ocrmypdf。但注意——pip 装不完所有依赖Tesseract、Ghostscript或 pypdfium2、字体等仍要用系统包管理器补上。源码安装git clone -b main https://gitcode.com/GitHub_Trending/oc/OCRmyPDF进目录后pip install .适合追最新特性。有两个绕不开的外部件务必确认装上了Tesseract真正干 OCR 活的引擎。装完先tesseract --version看一眼。渲染器pypdfium2Python 包更快官方更推荐或 Ghostscript 二选一即可装了都能自动识别。装完敲ocrmypdf --help能打印出帮助就算通了。详细的分平台步骤见 安装文档。中文用户重点Tesseract 默认只带英语语言包中文得单独装。Ubuntu/Debian 装tesseract-ocr-chi-simFedora 装tesseract-langpack-chi_sim。装好后用-l chi_sim调用后面会细说。语言包列表和规则见 语言包文档。跑通第一条 ocrmypdf 命令最基础的用法就一行输入文件 输出文件ocrmypdf input.pdf output.pdfinput.pdf是扫描件output.pdf是加了文本层的可搜索版。几个你会马上用到的开关-l告诉它文件里是什么语言这是影响识别准确率的第一大因素。英文默认其它语言必须显式给比如-l fra一份文档混了多种语言就用加号连起来-l engfra。--pages只处理指定页--pages 2,3,13-17也支持--pages 3-end第 3 页到最后。大文件怕卡先用它切片最稳。--output-typepdfa默认存档用或pdf普通 PDF。一个小技巧输出文件写成和输入文件一样ocrmypdf myfile.pdf myfile.pdf就是原地修改而且只有成功才会覆盖原文件失败了你手上的原件还在可以安心尝试。更多组合示例在 使用手册Cookbook 里。识别不准按顺序试这四个开关识别出来的字对不上是最常见也最容易解决的一类问题。记住一个前提输出质量取决于输入质量扫描件本身糊、倾斜、噪点多再好的引擎也救不回来。在怀疑引擎之前先依次试下面这几个预处理开关它们会在 OCR 前把页面修好ocrmypdf --rotate-pages --deskew --clean input.pdf output.pdf--rotate-pages页面整体方向错了横的竖的混着时自动转正它靠 OCR 的置信度判断比较保守。--deskew页面只是歪了一点扫描件常见的斜角把它扭回水平。它和--rotate-pages分工不同一个管转了 90 度一个管歪了几度。--clean用 unpaper 去掉背景斑点、污渍只用于识别、不改最终输出让引擎少把噪点当文字。需要系统装了 unpaper。--oversample 600输入分辨率太低时把页面重采样到 600 DPI 再识别字会更清楚但文件会变大、速度变慢。这两个开关能救很多旧文档。比如下面这种老式打字机扫描件字距宽、有污渍加上--clean --oversample通常能明显改善同时版面原样保留版面复杂、图文混排的文件比如地图、海报是另一类难点——它会把地名、图例里的字也识别出来但底图完全不动地图依然可读提醒--clean-final连最终输出也做清理和--remove-background去背景更激进可能误删你想留的内容用完务必逐页翻看确认。批量处理与进阶玩法一份一份地喂太累官方在 批量处理文档 里给了现成方案从轻到重最简单for循环遍历当前目录for f in *.pdf; do ocrmypdf $f ocr_$f; done。更快、更稳用 GNU Parallelparallel --tag -j 2 ocrmypdf {} output/{} ::: *.pdf。--tag让每条日志带上文件名-j 2限制同时跑两个进程避免机器被打满。整棵目录树原地处理find . -name *.pdf -printf %p\n -exec ocrmypdf {} {} \;。做成服务项目自带一个目录监控脚本 watcher.py把扫描件丢进一个目录它自动识别、输出到另一目录、原件归档配 Docker Compose 就能长期跑。几个高频进阶点只想要文本--sidecar out.txt会额外生成一份纯文本方便直接拿去检索或存档配合--output-type none还能完全不生成 PDF只出文本。重新做一遍 OCR文件已经被别家工具或旧版识别过--mode redo或--redo-ocr会在不重采样、不掉画质的前提下替换掉旧文本层。压缩体积默认就做了无损优化嫌大就--optimize 3JPEG 内容还能配--jpeg-quality 60一起压。命令行补全misc/completion/ 里有 bash、fish 的补全脚本参数敲一半自动提示长参数党会很舒服。报错对照装不动 / 中文乱 / 大文件爆内存现象先查这里装完ocrmypdf报错缺依赖多半是 Tesseract 或渲染器没装跑tesseract --version再确认装了 pypdfium2 或 Ghostscript中文识别成一堆乱码没装中文语言包或没给-l chi_sim先补tesseract-ocr-chi-sim识别准确率不理想先按上面四个开关预处理再检查-l语言是否给对、输入分辨率是否太低大文件跑到一半内存爆用--pages切片分批批量时给 parallel 限-j 2别让它开满进程提示文件已加密/带数字签名带证书加密的文档打不开数字签名默认会被拒绝处理确要处理才加--invalidate-digital-signatures会作废签名想深入定制处理步骤可以看看 内置插件目录——并发控制、优化、Tesseract 接口等都拆成了独立插件也能照这个结构写自己的插件规范见 插件文档。排错时建议加-v1或更高跑一遍它会打印每页的置信度和具体卡在哪一步。下一步先拿你最旧的那份扫描件练手别等准备完美再动手。挑一份你手头最旧、最搜不到字的扫描 PDF先跑一条最朴素的ocrmypdf in.pdf out.pdf确认能出可搜索版本识别不顺再回来按四个开关逐个加最后用--pages或 watcher 把流程变成批量。装好 Tesseract 语言包、记得给-l指定语言这两点能解决你以后 80% 的识别不准。完整参数和边界情况随时翻 官方文档 对照着调。【免费下载链接】OCRmyPDFOCRmyPDF adds an OCR text layer to scanned PDF files, allowing them to be searched项目地址: https://gitcode.com/GitHub_Trending/oc/OCRmyPDF创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考