
为什么不直接截图
扫描件和截图都是「图片」,肉眼能看但电脑搜不到字。PaddleOCR 识别文字后,把文字层贴回原图,生成双层 PDF:上层是原图(好看),下层是可选中的文字(能搜)。一份合同从此能 Ctrl+F 定位条款。
安装
pip install paddleocr paddlepaddleCPU 版就够日常用;量大或追求速度装 paddlepaddle-gpu。中文识别记得 lang='ch'。
一个批量脚本(先拿到文字)
from paddleocr import PaddleOCR
import fitz # pip install pymupdf
ocr = PaddleOCR(use_angle_cls=True, lang='ch')
for img_path in ['p1.png', 'p2.png']:
res = ocr.ocr(img_path, cls=True)
# res[0] 是该图每行文字与坐标
words = [line[1][0] for line in res[0]]
print('\n'.join(words)) # 这里得到纯文本要生成双层 PDF,用 PyMuPDF(fitz) 把原图作为底图,再把 OCR 得到的文字按坐标贴成透明文字层。核心是「原图 + 隐藏文字层」,网上有现成模板可直接套。
几个坑
- 中文必须 lang='ch',否则乱码。
- 表格会识别乱:表格结构用 PP-Structure 单独处理。
- 大批量上 GPU 版,CPU 一张图几秒,上千页会慢。
省事做法:先用单张图试通 ocr.ocr,确认文字准了,再套 for 循环批量,最后统一合成 PDF。