OCRmyPDF:让扫描PDF变得可检索
【免费下载链接】OCRmyPDFOCRmyPDF adds an OCR text layer to scanned PDF files, allowing them to be searched项目地址: https://gitcode.com/GitHub_Trending/oc/OCRmyPDF
拿到一个扫描版PDF,选不中字、搜不了关键词,基本只剩手敲重录一条路。OCRmyPDF 就是做扫描PDF文字识别的命令行工具:给扫描件加一层可搜索的文本层,原图原样保留。装好之后,三条命令就能跑起来。
它解决什么问题
OCRmyPDF 是一个用光学字符识别给扫描件叠加可检索文本层的命令行工具。没有它时,你得把每页转成图片、跑识别、再手动拼回PDF,文字容易错位、图像容易被二次压缩。有了它,一条命令跑完:底层扫描件原样保留,上面贴了一层文字,Ctrl+C、Ctrl+F 都能照常工作。
最小可用演示:三行命令跑通首次转换
先装一下:Ubuntu/Debian 用apt install ocrmypdf,macOS 用brew install ocrmypdf,其他发行版也有对应包。
最基本的用法,输入一个扫描PDF,输出带文本层的可搜索PDF:
ocrmypdf 扫描.pdf 可搜索.pdf打开输出,图像和原稿一模一样,但文字可以选中、可以 Ctrl+F 搜索;终端会逐页报告进度,输出默认是 PDF/A-2b 归档格式。
手里只有 JPG、PNG 还没合PDF时,直接把图片文件喂进去:
ocrmypdf 扫描页.jpg 扫描页.pdf跑完你就得到一份单页可搜索PDF,不用自己先合并。
这里有个坑:不传-l时它默认只认英文,中英混排文档要把语言码用+连起来:
ocrmypdf -l chi_sim+eng 双语.pdf 结果.pdfOCRmyPDF 本体没有图形界面,Docker 镜像里的 web 服务只是个演示前端,命令行才是主体。
🔍 内部怎么转:栅格化、识别、贴层
把一个扫描页送进流水线,中间就三步:
- 页面栅格化:先分析每页的颜色空间和分辨率,再用 pypdfium2 或 Ghostscript 把页面渲染成图像。原因很简单:Tesseract 只吃图片,不吃 PDF。
- 文字识别:Tesseract 认出图像里的文字和它们的坐标,语言包按需安装。选它是因为成熟、免费,百种以上语言支持足够覆盖常见文档。
- 文本层重建:识别结果用 fpdf2 渲染成透明文本层,按原坐标贴回原PDF;输出默认 PDF/A-2b,工具还会在收尾时校验文件有效性。
整个过程好比在扫描件上罩一层透明胶片,把认出来的字一笔一画写在原字底下——底层图没动过,复制时拿到的却是文字。
挑两个场景落地
旧文档扫描:顺手校正倾斜,再导出文本校对
扫描件歪了、有噪点,还想拿纯文本核对识别结果,就在基础命令上加三个参数:
ocrmypdf --clean --deskew --sidecar 书.txt -l chi_tra 旧书.pdf 旧书_ocr.pdf跑完--clean去噪、--deskew扶正页面、--sidecar多导一份 .txt,可搜索PDF和用于校对的文本文件一起拿到手。
一文件夹扫描件发票,整批处理
文件夹里几百份扫描件不用写循环,命令直接接受目录作输入,默认并行用满所有CPU核心:
ocrmypdf 发票/ 发票_ocr/一次跑完,输出文件在目标目录里同名就位,事后直接在结果PDF里搜发票号码。
选型参考与资源
如果你之前用“Ghostscript 出图 + Tesseract 识别 + 图片拼回PDF”的土办法,核心差异是:OCRmyPDF 把文本层写回原PDF,原图不重压缩、元数据保留,输出还自动做有效性校验。
Ghostscript 自带的 pdfocr 设备会把整页栅格化成单一色彩空间,OCRmyPDF 则逐页分析,已有文字层的页面直接跳过不动。
官方文档·项目介绍
命令行选项参考
批处理示例脚本
这样,扫描件就能检索了。
【免费下载链接】OCRmyPDFOCRmyPDF adds an OCR text layer to scanned PDF files, allowing them to be searched项目地址: https://gitcode.com/GitHub_Trending/oc/OCRmyPDF
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考