基于 PaddleOCR + GPU 加速 + 多进程并行,将扫描版 PDF 转换为可全文检索、可复制文字的高质量可搜索 PDF。
- ✅ 高精度 OCR:使用 PaddleOCR v5 服务端模型,支持中文、英文、符号混合识别
- ✅ 复杂排版支持:自动处理竖排文字、旋转文本、倾斜页面
- ✅ GPU 自动加速:检测 CUDA 环境,自动启用 GPU 提升速度(3~5 倍提速)
- ✅ 多核并行处理:利用多进程同时处理 PDF 多页,大幅提升吞吐量
- ✅ 无损输出:原始图像完全保留,OCR 文字以透明层叠加,仅用于搜索/复制
- ✅ 小体积输出:自动压缩 PDF,减少文件大小
- ✅ 跨平台支持:Windows / Linux / macOS 均可运行
pip install paddleocr PyMuPDF Pillow reportlab tqdm💡 GPU 用户:请安装
paddlepaddle-gpu:pip uninstall -y paddlepaddle pip install paddlepaddle-gpu -f https://www.paddlepaddle.org.cn/whl/stable.html
.
├── ocr_pdf_gpu_multicore.py # 主程序脚本
├── input_pdfs/ # ← 放入待处理的 PDF 文件
├── output_pdfs/ # ← 输出结果(自动生成)
├── pdf_pages/ # ← 临时文件目录(可自动清理)
└── fonts/
└── PingFang-SC-Regular.ttf # ← 中文字体(可替换)
🔧 字体说明:
- 默认使用
./fonts/PingFang-SC-Regular.ttf- 若缺失,程序会降级使用系统字体(可能影响中文显示)
- 推荐替换为 思源黑体 或本地中文字体
INPUT_DIR = "./input_pdfs" # 输入目录
OUTPUT_DIR = "./output_pdfs" # 输出目录
TEMP_ROOT = "./pdf_pages" # 临时文件目录
FONT_PATH_CN = "./fonts/PingFang-SC-Regular.ttf"
MAX_WORKERS = 4 # 并行进程数(建议 ≤ CPU 核心数)
DPI = 300 # 渲染精度(越高越清晰,但更慢)
KEEP_TEMP = False # 是否保留临时文件(调试时设为 True)- 将待处理的 PDF 文件放入
./input_pdfs/目录 - 确保中文字体存在(或修改
FONT_PATH_CN) - 运行脚本:
python ocr_pdf_gpu_multicore.py- 按提示输入 PDF 序号(如
1) - 等待处理完成,结果保存在
./output_pdfs/xxx_ocr.pdf
✅ 输出 PDF 支持:
- 全文搜索(Ctrl+F)
- 文字复制粘贴
- 保持原始图像质量
- 小体积(自动压缩)
| 环境 | PDF 页数 | 处理时间 |
|---|---|---|
| i7-13700H + RTX 4060 (GPU) | 100 页 | ≈ 1.5 分钟 |
| i7-13700H (CPU only) | 100 页 | ≈ 8 分钟 |
提示:
DPI=300适用于大多数文档;若对速度要求高,可降至200。
A: 下载中文字体(如 PingFang SC 或 思源黑体),放入 ./fonts/ 目录,或修改 FONT_PATH_CN 路径。
A: 确认已安装 paddlepaddle-gpu,且 CUDA 驱动版本兼容。运行时应看到提示:“检测到 GPU,使用 GPU 加速”。
A: 尝试降低 DPI(如 200)或减少 MAX_WORKERS(如 2)。
A: 修改脚本,注释掉用户选择部分,改为遍历 pdf_files 列表自动处理。
MIT License — 允许自由使用、修改、商用。
- PaddleOCR:强大的开源 OCR 引擎
- PyMuPDF (fitz):高效 PDF 处理库
- ReportLab:生成 PDF 的标准工具
💡 提示:本工具适用于学术文献、历史档案、工程图纸、合同扫描件等场景。
👉 CSDN 博客地址: https://blog.csdn.net/weixin_46244623