把纸质文档批量变成可搜索 PDF:PaddleOCR 本地实战

为什么不直接截图

扫描件和截图都是「图片」,肉眼能看但电脑搜不到字。PaddleOCR 识别文字后,把文字层贴回原图,生成双层 PDF:上层是原图(好看),下层是可选中的文字(能搜)。一份合同从此能 Ctrl+F 定位条款。

安装

pip install paddleocr paddlepaddle

CPU 版就够日常用;量大或追求速度装 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 得到的文字按坐标贴成透明文字层。核心是「原图 + 隐藏文字层」,网上有现成模板可直接套。

扫描图片PaddleOCR识别文字层双层 PDF(可搜)
图片 → OCR → 双层 PDF

几个坑

  • 中文必须 lang='ch',否则乱码。
  • 表格会识别乱:表格结构用 PP-Structure 单独处理。
  • 大批量上 GPU 版,CPU 一张图几秒,上千页会慢。
省事做法:先用单张图试通 ocr.ocr,确认文字准了,再套 for 循环批量,最后统一合成 PDF。