ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

如何用 OCRmyPDF 为扫描版 PDF 添加可搜索的 OCR 文字层

如何用 OCRmyPDF 为扫描版 PDF 添加可搜索的 OCR 文字层 如何用 OCRmyPDF 为扫描版 PDF 添加可搜索的 OCR 文字层【免费下载链接】OCRmyPDFOCRmyPDF adds an OCR text layer to scanned PDF files, allowing them to be searched项目地址: https://gitcode.com/GitHub_Trending/oc/OCRmyPDF扫描得到的 PDF 往往只是逐页图像文字无法选中、无法搜索、无法复制。OCRmyPDF 通过 OCR 识别图像中的文字把识别结果作为一层文字“贴”回原 PDF让扫描版文档变得可搜索、可复制粘贴。本文的任务就是在一个已安装 OCRmyPDF 的 Linux/macOS/Windows 环境中把input.pdf这样的扫描版文件处理成可搜索的输出文件并能核对文字层是否真正生效。OCRmyPDF 使用 Tesseract OCR 引擎做识别默认输出经过校验的 PDF/A-2b 归档格式见 docs/introduction.md。准备环境安装并确认 OCRmyPDF 可用OCRmyPDF 是 Python 程序依赖外部程序Tesseract、Ghostscript 等必须通过系统包管理器或完整安装来满足单独的pip install无法覆盖全部依赖。最低要求是 Python 3.11、Tesseract 4.1.1以及 Ghostscript 9.54 或 Python 包 pypdfium2 二者之一v17 起 Ghostscript 不再是硬性要求详见 docs/installation.md。各平台的一行安装命令# Debian / Ubuntu / WSL apt install ocrmypdf # Fedora dnf install ocrmypdf tesseract-osd # macOS 或 LinuxHomebrew brew install ocrmypdf安装后运行内置帮助确认命令可用ocrmypdf --helpTesseract 默认自带英文语言包处理其他语言时再按后文说明安装语言包。执行 OCR一条命令加上 OCR 文字层主路径只有一条命令见 docs/cookbook.mdocrmypdf input.pdf output.pdfOCRmyPDF 会分析每一页所需的颜色空间和分辨率把页面栅格化为图像、对图像执行 OCR再把 OCR 文字层合并回原 PDF。与“先导出图像、识别后重新拼 PDF”的手动流程不同这个方式对原文件的改动最小能保留原有的分辨率、内容和元数据。两个常用变体不想生成 PDF/A、只要普通 PDF 时加--output-type pdfocrmypdf --output-type pdf input.pdf output.pdf原地修改文件输入和输出同名。只有 OCRmyPDF 成功时才会覆盖原文件ocrmypdf myfile.pdf myfile.pdf验证结果确认文字层真的存在判断“可搜索”是否达成文档给出两条可操作的路径生成 sidecar 文本文件加--sidecar参数OCRmyPDF 会额外输出一个包含 OCR 识别文本的.txt文件直接查看它就能核对识别结果ocrmypdf --sidecar output.txt input.pdf output.pdf注意 sidecar 只包含 OCR 识别出的文本原本就带文字层的页面、以及被--pages之外跳过的页不会出现在其中。从输出 PDF 中提取文字用 Poppler 的pdftotext或pdfgrep对output.pdf提取/搜索文本。如果原扫描件没有文字层而输出文件能提取出对应内容说明 OCR 文字层已写入。此外--sidecar配合--output-type none并把输出文件名设为-时可以不生成 PDF、只输出文本适合快速试识别效果。默认输出为 PDF/A 时OCRmyPDF 会校验输出文件README 中将其描述为 “validated PDF output”若环境装有 verapdfv17 起还会走先加 PDF/A 元数据、再用 verapdf 校验的转换路径校验不通过才回落到 Ghostscript。遇到已有文字或重做 OCR 的情况对一份已经含可打印文字或隐藏 OCR 层的 PDF 直接运行 OCRmyPDF 会中止并报错ERROR - 1: page already has text! – aborting (use --force-ocr to force OCR)文档给出的三个选项按目的选择见 docs/errors.mdocrmypdf --force-ocr input.pdf output.pdf强制把所有内容栅格化后重新 OCR。适用于之前 OCR 失败或文档带文字水印的情况代价是整页重建为图像可能损失质量。ocrmypdf --skip-text input.pdf output.pdfv17 起等价于--mode skip跳过含文字的页面这些页面原样复制进输出。ocrmypdf --redo-ocr input.pdf output.pdfv17 起等价于--mode redo移除文件里已有的非打印 OCR 层后重新识别适合用新版 Tesseract 重做旧结果。此方式不栅格化、不降低质量若文件混合了纯数字文本与 OCR 层数字文本会被保留、只替换 OCR 部分。可选分支非英文文档与质量提升非英文文档Tesseract 无法自动检测语言未指定时默认按英文识别识别质量会变差。先安装对应语言包再用-l指定三字母语言代码例如 Debian/Ubuntu 上# 以简体中文为例先安装语言包 apt-get install tesseract-ocr-chi-sim # 识别时指定语言多语言文档用 连接 ocrmypdf -l engfra Bilingual-English-French.pdf Bilingual-English-French.pdf各平台安装语言包的方法见 docs/languages.md。扫描质量一般的文档识别前可做图像处理选项可任意组合执行顺序固定rotate、remove background、deskew、clean# 页面横向倾斜歪斜时 ocrmypdf --deskew input.pdf output.pdf # 页面朝向整体错误横竖页混放时 ocrmypdf --rotate-pages myfile.pdf myfile.pdf # 组合使用 ocrmypdf --deskew --clean --rotate-pages input.pdf output.pdf--deskew处理“稍微歪了”的页面--rotate-pages处理“朝向角度错了”的页面。由于图像处理后可能移除不想要的内容文档建议处理完后逐页查看输出文件。限制OCR 准确性受限于 Tesseract不能识别手写体扫描质量差、语言未通过-l指定、双栏排版等情况下识别效果会下降。Tesseract 只输出文字和包围盒不区分段落或标题生成的 PDF 不包含文档结构信息。无法在保留数字签名的同时添加 OCR 层默认会拒绝处理已签名的 PDF可用--invalidate-digital-signatures覆盖但会使签名失效。无法打开用数字证书加密的文档。处理完成后用pdftotext提取输出文件中的文字、在 PDF 阅读器中选中/搜索文本就是本文场景下的最终核对方式。更多参数优化级别、页数范围--pages、rasterizer 选择等见 docs/cookbook.md 与 docs/introduction.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),仅供参考
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进