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 时完全不需要联网,前提是三样东西在断网前就装齐:Python 运行时、Ghostscript(负责把页面栅格化和重排 PDF)、Tesseract(真正干识别活的语言引擎)。下面按"断网前备料 → 分系统装好 → 离线配置 → 常用命令 → 批量玩法 → 断网排障"的顺序走一遍。
断网后缺什么:一次说清 4 个依赖
OCRmyPDF 本体只是一个 Python 程序,它不会自己下载任何东西,但会调用外面装的工具。断网后装不上或跑不起来,问题基本出在下表这几行:
| 物料 | 版本要求 | 角色 | 离线形态 |
|---|---|---|---|
| Python | ≥ 3.11(见 pyproject.toml 的requires-python) | 运行 OCRmyPDF 本体 | 系统包或安装包 |
| Ghostscript | ≥ 9.54;注意 9.56.0 有已知问题,选 9.56.1 或更新版本 | 栅格化、压缩输出 | 系统包 |
| Tesseract | ≥ 4.1.1 | OCR 引擎,依赖语言包 | 系统包 |
| OCRmyPDF | 当前稳定版(仓库为 17.8.1) | 主控程序 | .whl文件 |
另外注意:Python 依赖包(pikepdf、Pillow、fpdf2 等十几个)也要一并备齐,否则本体装得上、跑不起来。
断网前先把物料备齐:一份可以直接执行的清单
Linux:一条命令把系统包和 wheel 全下下来
在同架构、同版本的联网机器上执行(离线机器是 Debian/Ubuntu 就选第一条命令):
# Debian/Ubuntu:下载 ocrmypdf、Ghostscript、Tesseract 及简体中文语言包 apt-get download ocrmypdf ghostscript tesseract-ocr tesseract-ocr-chi-sim python3 # Fedora:同样思路,换成 dnf dnf download --resolve ocrmypdf ghostscript tesseract tesseract-langpack-chi_sim # Python 依赖的 wheel:pip 直接下载、不安装,全部落到 ./wheels/ pip download ocrmypdf -d ./wheels/把目录里的全部文件拷到离线机器即可。
macOS:用 brew bundle 把整条工具链打成一个包
brew bundle dump -f -w -g -n > Brewfile # 把当前已装的依赖导出成清单 brew bundle --file=Brewfile --write --global --github # 生成可离线搬运的 tarball再顺手pip download ocrmypdf -d ./wheels/把 Python 侧备齐。
三个系统上分别怎么落地
Linux:先装 .deb / .rpm,再用本地 wheel 装本体
dpkg -i *.deb # 或 rpm -ivh *.rpm apt-get install -f -y # 兜底修复残留的依赖关系 pip install --no-index --find-links ./wheels/ ocrmypdf # 强制只用本地目录找包--no-index --find-links是关键:它让 pip 放弃访问 PyPI,只从你拷进来的./wheels/里找包,彻底杜绝"装到一半卡在网络请求"。
Windows:按固定顺序装四样东西
先装 Python → Ghostscript → Tesseract(三家都是各自官网的常规安装包),然后用本地 wheel 装本体:
pip install --no-index --find-links C:\offline\wheels ocrmypdf如果 Tesseract 没装在默认目录,给 Tesseract 配一个TESSDATA_PREFIX环境变量,指到它的tessdata文件夹,否则下一步就会报"找不到语言数据"。
macOS:恢复 brew 包,再装本体
brew bundle restore --global Brewfile.tarball brew untap homebrew/bundle # 恢复完清掉临时 tap pip install --no-index --find-links ./wheels ocrmypdf装完任何系统,先跑ocrmypdf --version:能打印出版本且无报错,说明 Ghostscript 和 Tesseract 都被正确找到了。
离线配置要点:语言包、TESSDATA_PREFIX 与默认参数文件
无网环境下配置 Tesseract 语言包
语言包就是.traineddata文件,按三字母语言代码命名(简体中文是chi_sim,西班牙语是spa)。各系统的存放位置和离线获取方式:
| 系统 | tessdata 目录 | 离线获取方式 |
|---|---|---|
| Debian/Ubuntu | /usr/share/tesseract-ocr/*/tessdata/ | 语言包本身是独立 apt 包,联网机上apt-get download tesseract-ocr-chi-sim后随包一起装 |
| Fedora | /usr/share/tessdata/ | dnf download tesseract-langpack-chi_sim |
| Windows | C:\Program Files\Tesseract-OCR\tessdata\ | 把.traineddata直接拷进去 |
| macOS | Homebrew tesseract 的share/tesseract/tessdata/ | 同上,手动拷贝 |
目录不在默认位置时,设TESSDATA_PREFIX环境变量指过去即可,不需要改任何代码。多语言混排的文档用加号组合:ocrmypdf -l eng+chi_sim in.pdf out.pdf,-l就是告诉 Tesseract 按哪些语言识别。
用 ~/.ocrmypdf 固化常用参数
在用户主目录建一个~/.ocrmypdf文件,每行写一个参数,等价于每次手动敲:
--skip-text --output-type pdfa --optimize 2这样批量跑脚本时不用把同一串参数重复写一遍,也减少敲错参数的机会。
高频命令速查:参数第一次出现时就解释清楚
| 参数 | 解决什么问题 |
|---|---|
-l eng | 指定识别语言,缺省只认英语 |
--skip-text | 跳过已有文字层的页面,只对纯图像页跑 OCR,省时 |
--clean | 先对图像做去噪、纠偏等预处理,烂扫描件识别率更高 |
--output-type pdfa | 输出 PDF/A 存档格式,字体和色彩信息内嵌,适合长期保存 |
--optimize 3 | 交给 Ghostscript 压缩(0 不压,3 最狠),文件更小但更慢 |
--pages 1-10 | 只处理第 1 到 10 页,大文件分段跑、出错好定位 |
最简调用只需要两个位置参数:
ocrmypdf in.pdf out.pdf带完整参数的一个实际例子:
ocrmypdf --language chi_sim --skip-text --clean \ --output-type pdfa --optimize 2 input.pdf output.pdf进阶玩法:批量处理与目录监听
断网时批量处理 PDF 的 shell 脚本
# 遍历当前目录,逐一转成 PDF/A,输出到 out/ mkdir -p out for f in *.pdf; do ocrmypdf -l eng+chi_sim --output-type pdfa "$f" "out/$f" done文件多、路径跨目录、需要日志时,用仓库里的 misc/batch.py:它读一个"输入路径→输出路径"的列表文件,逐对处理,比裸 for 循环稳。
让 watcher 脚本盯着一个目录自动出件
misc/watcher.py 会持续监控一个文件夹,新 PDF 一丢进来就自动 OCR。它依赖watchdog这个额外 Python 包——离线机上要么提前装好,要么用pip download一起备进./wheels/,装不上它就别用这个玩法。
断网排障清单:按出现频率从高到低查
| 症状 | 最可能的原因 | 处理 |
|---|---|---|
报找不到chi_sim.traineddata之类的语言数据 | 语言包没拷进 tessdata,或路径非默认 | 补拷文件;非默认路径就设TESSDATA_PREFIX |
| 提示找不到 tesseract 或 ghostscript | 没装、或不在 PATH | 重跑安装;Windows 注意把安装目录加进 PATH |
| 装本体时卡住或报网络错误 | pip 仍在访问 PyPI | 确认命令里带--no-index --find-links |
| 大 PDF 跑到一半内存爆掉 | 单文件过大 | --pages 1-50分段处理;内存实在不够再加交换空间 |
排错顺序建议固定:先看报错第一行点名的组件 → 对号入座上表 → 跑ocrmypdf --version验证依赖是否齐。
收尾速记
- 断网前备齐:系统包(Ghostscript、Tesseract、语言包)+ OCRmyPDF 的 wheel 及其全部 Python 依赖,拷进同一目录。
- 安装时 pip 永远带
--no-index --find-links,只认本地物料。 - 跑批用 shell 循环或 misc/batch.py,盯目录出件用 misc/watcher.py。
- 报错先看语言包和 PATH 两处,十次里九次问题在这。
【免费下载链接】OCRmyPDFOCRmyPDF adds an OCR text layer to scanned PDF files, allowing them to be searched项目地址: https://gitcode.com/GitHub_Trending/oc/OCRmyPDF
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考