OCRmyPDF离线部署指南断网内网一次搞定扫描OCR【免费下载链接】OCRmyPDFOCRmyPDF adds an OCR text layer to scanned PDF files, allowing them to be searched项目地址: https://gitcode.com/GitHub_Trending/oc/OCRmyPDF矿区笔记本上的那份图纸地质队带进山里的笔记本电脑船坞隔离网段里的资料整理机灾后现场收上来的纸质材料——共同点只有一个没网但有扫描件要能搜。OCRmyPDF 给扫描文档补一层可搜索、可复制的 OCR 文本层这条流程全程离线、不碰网络。只要你在有网的机器上把依赖、语言包和字体备齐断网机器上就是自给自足。为什么它能在断网时跑OCRmyPDF 的每一步计算都发生在本地页面栅格化由 pypdfium2 或 Ghostscript 完成识别由本机 Tesseract 引擎完成文本层渲染由 fpdf2 与 uharfbuzz 这两个 Python 包完成压缩靠 pngquant。输入一份扫描 PDF数据流向是页面像素 → Tesseract 识别 → 文字坐标与字形 → 压在图像下方的文本层全程零网络调用。唯一需要联网的动作是补给安装依赖、下载.traineddata语言包、拉 Docker 镜像。把这些动作前移到有网机器离线端就是纯本地运算。有网机器上打包这七样下表所有版本要求都出自 docs/installation.md 的依赖清单逐项核对。组件作用获取方式必选/可选Python 3.11推荐 3.12运行 OCRmyPDF发行版包或官方安装程序必选Tesseract 4.1.1OCR 识别引擎包管理器 / Windows 官方安装器必选.traineddata语言包各语言识别数据tessdata 源下载apt 装tesseract-ocr-语言必选Ghostscript 9.54栅格化、部分 PDF/A 转换包管理器 / 官网安装包必选或 pypdfium2Python 依赖 wheelfpdf2、pikepdf[pdfa]、Pillow、pypdfium2、uharfbuzz 等pip download ocrmypdf -d ./wheels必选fonts-noto 字体包非拉丁文字渲染apt install fonts-notoFedora 装google-noto-fonts-all推荐unpaper / pngquant / jbig2enc--clean去噪、--optimize压缩、单色图压缩发行版包管理器可选⚠️ 最容易漏的不是语言包文件而是tessdata/configs/子目录如果你手工拼 tessdata只拷.traineddata而漏掉configs/hocr和configs/txtTesseract 会静默失败、不产生任何输出。从一份完整安装里把整个tessdata目录一起拷走最省心。Linux包文件预缓存断网机本地装策略有网机上把发行版包全量下载成文件离线机上逐个安装装的过程不再连仓库。在有网机器上执行缓存再在离线机器上安装# 有网机把 OCRmyPDF 及系统依赖缓存为 deb 文件 apt-get download ocrmypdf tesseract-ocr ghostscript python3 python3-pip # 离线机本地安装Fedora 换成 rpm 的离线安装 dpkg -i *.deb易错点离线机的基础系统版本要和缓存包的发行版一致版本对不上会因依赖冲突装不动。Windows三个安装器加一份 wheel 目录策略64 位 Tesseract、Ghostscript、Python 三个安装器按顺序离线装完OCRmyPDF 本体用本地 wheel 收尾。在有网机备料在离线机安装# 有网机缓存全部 Python 依赖 wheel pip download ocrmypdf -d ./wheels # 离线机彻底断开 PyPI 索引只从本地目录装 pip install --no-index --find-links./wheels ocrmypdf易错点第二条命令的--no-index不能省省掉后 pip 会尝试连 PyPI 卡住32 位 Windows 官方不支持。macOS整份 Homebrew 前缀打包迁移策略有网机上用 brew 装全含全量语言包把 Homebrew 前缀目录连同下载缓存整包迁移。有网机上执行装完再整体拷贝brew install ocrmypdf tesseract-lang易错点只装ocrmypdf默认只带英语离线机上补tesseract-lang又要网络务必同一次装齐迁移目录时保持目录结构完整。Docker镜像 save/load 走一遍策略镜像本身就是一个自包含的离线环境save 成 tar离线机 load 即可连系统依赖都不用管。# 有网机拉取官方 Alpine 镜像并导出 docker pull jbarlow83/ocrmypdf-alpine docker save -o ocrmypdf.tar jbarlow83/ocrmypdf-alpine # 离线机加载镜像 docker load -i ocrmypdf.tar # 离线机管道方式跑一次 OCR输入走 stdin输出到 stdout docker run --rm -i jbarlow83/ocrmypdf-alpine - - input.pdf output.pdf易错点tar 体积较大提前规划好拷贝通道命令行的完整用法见 docs/docker.md。四个平台的关键差异与大致耗时平台关键差异耗时预估Linux基础系统版本必须与缓存包匹配10~30 分钟Windows安装器与 wheel 要分开备20~40 分钟macOS迁移整个 Homebrew 前缀30~60 分钟Docker只需传一个镜像 tar 文件10 分钟三条命令体检版本、语言包与一次试跑部署完先验证再干活。下面三条命令都在离线机上执行。ocrmypdf --version tesseract --list-langs ocrmypdf --language nld tests/resources/linn.pdf /tmp/linn_ocr.pdf第一条打印版本号且无报错说明 Python 与外部引擎都已就位第二条列出本机可用语言包离线要认哪种语言就核对哪个代码在列表里第三条是真实试跑能生成 PDF 说明渲染、字体、引擎整条链路都通。症状原因修复动作提示找不到语言数据文件.traineddata没拷到位拷入tessdata目录目录非默认位置时用TESSDATA_PREFIX指过去打不开 config file hocr手工拼的tessdata缺configs/从完整安装补齐configs/hocr与configs/txt警告某文字没有可用字形缺对应文字体系的字体补 Noto 字体包文本层仍可搜索仅高亮显示受影响大文件处理时内存不足大尺寸页面一次性栅格化用--pages指定页码分段处理--clean报 unpaper 缺失未安装 unpaper装 unpaper装不了就省掉--clean其余功能不受影响已含文本的页报page already has text输入页已有文本层加--skip-text跳过或--force-ocr强制重做排错的更多细节见 docs/errors.md。端到端示例一张打字机扫描件变可搜索 PDF用仓库自带的黑白打字机扫描件 tests/resources/typewriter.png4000×2864 像素走完整流程。在离线机上从仓库根目录执行ocrmypdf --language nld --output-type pdfa tests/resources/typewriter.png /tmp/recipe.pdf参数逐个说明--language nld指定识别语言。这份扫描件是一页荷兰语菜谱用nld中文文档换成chi_sim多语言用engnld这种写法--output-type pdfa输出 PDF/A 存档格式适合长期保存默认值是auto按需显式指定tests/resources/typewriter.png输入文件图片、PDF 均可/tmp/recipe.pdf输出文件--clean[可选]识别前去噪清洗扫描件质量越差收益越大依赖 unpaper跑完用任意 PDF 阅读器打开画面还是那张打字机扫描图但文字已经能框选、复制、搜索——文本层压在图像正下方肉眼不可见却真实存在。OCRmyPDF 处理时会用掉全部 CPU 核心单页通常几秒到几十秒输出文件比输入图片大一些因为里面同时存着图像和文本层。批量与监听把单件变流水线批量处理一目录仓库文档推荐用 GNU Parallel 控制并发先mkdir -p output再在离线机上执行。-j 2限制同时跑两个任务--tag在输出前打印文件名出错时能快速定位到是哪个文件。parallel --tag -j 2 ocrmypdf {} output/{} ::: *.pdf想递归处理整个目录树仓库自带现成示例脚本 misc/batch.py它递归查找目录里的 PDF 逐个 OCR遇到加密文件、已有文本层或带数字签名的文件会记录日志并跳过拷走一份按需改目录参数即可。更省事的是目录监听misc/watcher.py 盯着一个输入目录新放进来的 PDF 自动走完 OCR原件可归档、输出可按月分层。watcher 依赖额外组件在有网机备料时装一次pip download ocrmypdf[watcher]离线机照常运行。# 离线机设置输入/输出目录后启动监听 env OCR_INPUT_DIRECTORY/mnt/input-pdfs \ OCR_OUTPUT_DIRECTORY/mnt/output-pdfs \ OCR_OUTPUT_STRUCTUREYEAR_MONTH \ python3 misc/watcher.py注意输出和归档目录不能放在输入目录里面否则新产出会被当成新输入反复处理。离线部署的核心思路就一句话把所有需要联网的补给动作前移到有网机器备齐整体搬进内网OCRmyPDF 之后完全自给自足。细节见 docs/installation.md 与 docs/batch.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),仅供参考