公司动态
如何给扫描 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/OCRmyPDF扫描件有一个让人抓狂的属性看起来是文档搜起来是图片。你在 Adobe 阅读器里按 CtrlF 找发票两个字半天等不到结果——因为那个 PDF 里根本没有文字只有一页页像素。手动转图再 OCR文本位置全乱、重音符号丢失文件还肿得吓人。OCRmyPDF命令行工具名ocrmypdf就是为这件事做的一条命令在原扫描 PDF 上叠一层精确对齐的 OCR 文字。图片不动文字可搜、可抄、可复制默认还输出符合 ISO 标准的 PDF/A-2b 存档格式。快速认识 OCRmyPDF一条命令补上缺失的文字层它的工作方式可以概括成三步用 Ghostscript 把每一页栅格成图像交给 Tesseract 识别出文字和坐标再把识别结果以不可见的方式贴回原 PDF 对应位置。默认自动利用全部 CPU 核心并行处理还顺手做图像压缩输出文件经常比输入还小上面的截图里8 页文档总体积节省了 53.8%。和手动处理或者自己拼脚本相比它的差别在于维度手动/脚本拼凑OCRmyPDF文字位置容易错位复制粘贴拿到乱序文本坐标级对齐复制即所得原图画质重编码后普遍降质原页保留可跳过栅格化页面多语言各引擎表现不一跟随 Tesseract 语言包上百种语言存档格式基本没有默认 PDF/A-2b可用 veraPDF 校验并发自己写--jobs一个参数搞定一句话它把扫描 → 识别 → 对齐 → 存档校验整条链路的脏活都接管了你只负责喂文件。5 分钟装好 OCRmyPDFLinux、macOS、Windows 最短路径OCRmyPDF 本身是 Python 程序但它调用两个外部引擎Tesseract识别和 GhostscriptPDF 栅格化与存档转换。三者齐活才算装好。平台最短路径说明Debian/Ubuntusudo apt install ocrmypdf一条命令装齐依赖macOSbrew install ocrmypdfHomebrew 同步维护Windows / 通用pip install ocrmypdf需另装 Tesseract 与 Ghostscript并加入 PATHPython 要求 3.11 及以上当前发布版为 17.8.1Tesseract 最低 4.1.1Ghostscript 最低 9.54。装完跑三条命令验证都能打印版本号就万事大吉ocrmypdf --version tesseract --version gs --version跑通第一条 OCR 命令最小示例与中文识别命令怎么写最小可用示例只有三个词ocrmypdf 扫描件.pdf 可搜索.pdf终端会滚动进度条扫描内容、按页 OCR、PDF/A 转换、图像压缩。结束后提示 Output file is a PDF/A-2b (as expected)打开输出文件复制一段文字就成了。中文识别的关键是-l参数指定语言代码chi_simocrmypdf -l chi_sim 中文合同.pdf 输出.pdf如果输入是图片而不是 PDF需要告诉它拍摄 DPIocrmypdf --image-dpi 300 合同照片.png 合同.pdf识别质量不佳时先怀疑语言包或参数而不是工具本身。常用参数速查语言、输出格式、预处理与并发类别参数作用语言-l engchi_sim识别语言连接多语言输出--output-typeauto默认尽力输出 PDF/A/pdfa强制 PDF/A-2b/pdf改动最小/none只要文本已有文字--force-ocr全部重做旧层覆盖已有文字--skip-text含文字页原样跳过已有文字--redo-ocr移除旧 OCR 层后重识别预处理-r/-d/--clean旋转纠正 / 去倾斜 / 图像清理性能-j 4指定 CPU 核心数默认全部元数据--title/--author写入文档属性实用进阶sidecar 文本、参数组合与批量处理sidecar 纯文本输出。识别结果除了嵌进 PDF还可以导出一份 txt用于建索引库或核对识别质量ocrmypdf --sidecar 合同.pdf 输出.pdf # 生成 输出.pdf.txt参数后加文件名可自定义路径参数组合思路。档案级处理-r -d --clean-final加--output-type pdfa再挂上--title、--author追求文件最小--output-type pdf改动最克制。组合没有标准答案按要存档还是要小文件选一边即可。批量处理。一个目录几十个文件shell 循环就够for f in *.pdf; do ocrmypdf --skip-text $f ocr_$f || echo $f 失败 done仓库里还带了一个batch.py脚本misc/batch.py适合需要按页码范围选择性识别的场景用法见 docs/batch.md。常见问题排查报错信息对照与修复方法1. page already has text现象提示页面已含文字直接中止。原因文件本身已有文本层或水印工具默认拒绝重复劳动。解法确认要重做就加--force-ocr只想处理扫描件页就--skip-text想升级旧层用--redo-ocr。2. not a valid PDF现象输入文件被判为无效。原因PDF 截断或损坏多为拷贝未完成。解法重新传输或先让 Ghostscript 重写一遍再喂进来。3. Tesseract cannot open its config file hocr现象Tesseract 静默无输出。原因手动拼装的 tessdata 目录缺少configs/子目录。解法从系统包管理器重装 Tesseract或补全 configs 文件。4. 语言代码报错现象提示找不到指定语言。原因对应的 Tesseract 语言包没装比如chi_sim需要 tesseract-ocr-chi-sim。解法装对应语言包用tesseract --list-langs确认已生效。5. 大页面内存不足现象中途 OOM任务被杀。原因高 DPI 大页一次性进内存。解法调小-j的并发数或先把大文件分页再处理。更多错误对照见 docs/errors.md安装细节见 docs/installation.md。写在最后从一条ocrmypdf 输入.pdf 输出.pdf开始把扫描件变成可搜的文档只要几十秒。语言用-l指定存档交给默认的 PDF/A批量交给 shell。遇到报错别慌先看上面的对照表想深入docs/index.md 是从入门到 API 的完整文档入口。工具已经足够成熟剩下的只是把文件喂给它。【免费下载链接】OCRmyPDFOCRmyPDF adds an OCR text layer to scanned PDF files, allowing them to be searched项目地址: https://gitcode.com/GitHub_Trending/oc/OCRmyPDF创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考