ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

扫描PDF批量变可搜索:OCRmyPDF加文本层

扫描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

那份 217 页的扫描版年报,Ctrl+F 输入任何词都搜不到,框选文字拖出来的是一行空白——整份文档在系统眼里就是一叠图片。OCRmyPDF 解决的就是这个:一个开源命令行工具,给扫描 PDF 批量加 OCR 文本层,处理完外观照旧,但能搜索、能复制了。

它到底在做什么

本质是一件事:逐页读出扫描件里的图片,交给 Tesseract 引擎识别文字,再把识别结果作为透明文本嵌回原页面底下。页面图片一个像素都不动,版式、注释、元数据原样保留。

它不做什么:不重排文档、不重压缩图片、不上传任何内容,全程本地跑。默认输出 PDF/A-2b——为长期存档设计的格式;只想要普通 PDF,加--output-type pdf就行。

最见功力的是这种老式打字机扫描件:

等宽字体、对比度又低,识别难度不小,但文本层只要和字形对得齐,整段复制出来照样干净。

最小可用路径

系统安装命令
Debian / Ubuntuapt install ocrmypdf
macOS / Linux(Homebrew)brew install ocrmypdf
任意 Python 环境pip install ocrmypdf

装完,第一条命令就这么短:

ocrmypdf 扫描年报.pdf 可搜索年报.pdf

打开输出文件,拖拽选中第一段文字——能选中并复制出真实文字,说明文本层已经叠上了。原文件不会被改动,结果永远写进新文件;表里没有的系统(Docker、FreeBSD 等),仓库 docs 目录里有分步安装文档。

核心能力拆解

中文识别出来全是方框:语言包没装

症状:识别结果满屏方框,或者"可搜索"三个字只出来两个。

原因:OCRmyPDF 的识别全靠 Tesseract,能认哪些语言取决于装了多少 tessdata 语言包。默认只有英文,中文包没装就写不出中文字符。

sudo apt install tesseract-ocr-chi-sim ocrmypdf -l chi_sim 合同扫描件.pdf 合同可搜索.pdf

英文中文混排写成-l eng+chi_sim,加号分隔。跑完打开输出,选中一句中文粘进记事本:是正常汉字就对了;还是方框,用tesseract --list-langs确认 chi_sim 在不在列表里。

页面横了倒了歪了:整页旋转和倾斜是两回事

整页转了 90°/180°,是--rotate-pages的活;整页只斜了几度,是--deskew的活。两者管的事不同,别指望一个开关解决所有方向问题,组合起来最稳:

ocrmypdf --rotate-pages --deskew 旧档案.pdf 旧档案_校正.pdf

旧扫描件经常整页横着、倒着出来,像上面这种密排整页的文档也不例外。跑完翻几页:标题回到水平线、正文方向对了,就算过;还差一点就调--rotate-pages-threshold的判定阈值。

一批文件排队跑:多核并行

几十个文件手动一个个敲太累。其实就两层并行:单个文件内部--jobs开多核做 OCR,文件之间让 GNU Parallel 排队:

parallel --tag -j 2 ocrmypdf '{}' 'output/{}' ::: *.pdf

一条命令把当前目录所有 PDF 写进 output 目录;--tag让日志行带上文件名,哪个文件失败一眼定位。

截图里是完整流程:扫描内容、逐页 OCR、PDF/A 转换、图像优化,进度条逐页刷新,最后给出压缩比。更多批处理写法见 docs/batch.md。

进阶技巧

⚡ 跑通之后才会想做的两件小事:

  • --oversample 300:扫描分辨率低、字迹发糊时,先把页面重采样到 300 DPI 再识别,准确率明显上来;前提是原件本身别太糊。
  • --pages 1-100:几百页的大文件分段跑,内存不吃紧,还能先查前一百页的效果。
ocrmypdf --oversample 300 --pages 1-100 低清大文件.pdf 前百页_可搜索.pdf

快速排错

现象最可能原因一条可复制的解法
中文全是方框没装中文语言包sudo apt install tesseract-ocr-chi-sim,重跑时加-l chi_sim
页面整体横或倒扫描方向错了 90°/180°ocrmypdf --rotate-pages 输入.pdf 输出.pdf
整页轻微倾斜扫描仪摆放歪了ocrmypdf --deskew 输入.pdf 输出.pdf
大文件跑到一半内存告急一次处理了全部页ocrmypdf --pages 1-100 输入.pdf 前百页.pdf分段跑
错字多且原图发糊源扫描分辨率不足ocrmypdf --oversample 300 输入.pdf 输出.pdf
想只要普通 PDF,不要存档格式默认输出 PDF/A-2bocrmypdf --output-type pdf 输入.pdf 输出.pdf

收尾

今天就能做:找一份手头的扫描件,装上 ocrmypdf,跑ocrmypdf 输入.pdf 输出.pdf。打开输出文件选中一段文字,复制出来是真实汉字——剩下的参数都是锦上添花。

【免费下载链接】OCRmyPDFOCRmyPDF adds an OCR text layer to scanned PDF files, allowing them to be searched项目地址: https://gitcode.com/GitHub_Trending/oc/OCRmyPDF

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

返回列表