Tesseract + Poppler 实现图片型 PDF 转文字
用 Tesseract + Poppler 实现图片型 PDF 转文字(Windows/Linux 全流程)
一、需求背景
很多教材、文献是图片型 PDF(扫描件/截图生成),无法直接复制文字。借助 Tesseract(OCR 识别) + Poppler(PDF 转图片),可将这类 PDF 转为可编辑文本,用于知识整理、内容提取。
二、核心工具介绍
1. Tesseract(OCR 引擎)
- 作用:识别图片中的文字,支持中英文等多语言。
- 特点:开源免费、识别精度高,需搭配 Poppler 处理 PDF。
2. Poppler(PDF 处理工具集)
- 作用:将 PDF 转为图片(PNG/JPEG),供 Tesseract 识别。
- 特点:轻量高效,提供命令行工具(如
pdfinfo
pdftoppm
)。
三、Windows 环境安装配置
1. 下载地址
-
Tesseract:
官网(带安装器):tesseract(选最新版.exe
) -
Poppler:
官网:popple
Windows 编译版:https://github.com/oschwartz10612/poppler-windows/releases(选poppler-xx.x.x.zip
)
2. 安装步骤
Tesseract 安装
- 运行下载的
tesseract-ocr-w64-setup-vx.xx.x.exe
,按向导安装。 - 配置环境变量:
- 找到安装目录(默认
C:\Program Files\Tesseract-OCR
)。 - 右键“此电脑”→属性→高级系统设置→环境变量→
Path
→添加上述路径。
- 找到安装目录(默认
- 验证:命令行输入
tesseract -v
,显示版本即成功。
Poppler 安装
- 解压
poppler-xx.x.x.zip
到指定目录(如D:\poppler
)。 - 配置环境变量:
- 找到
poppler-xx.x.x\Library\bin
路径(含pdfinfo.exe
pdftoppm.exe
)。 - 添加到系统
Path
变量。
- 找到
- 验证:打开cmd,命令行输入
pdfinfo -v
,显示版本即成功。
四、Linux 环境安装配置(以 Ubuntu 为例)
1. 下载安装(通过包管理器)
# 更新软件源
sudo apt update # 安装 Tesseract(含中文语言包)
sudo apt install tesseract-ocr tesseract-ocr-chi-sim # 安装 Poppler
sudo apt install poppler-utils
2. 验证
tesseract -v # 检查 Tesseract 版本
pdfinfo -v # 检查 Poppler 版本
五、Python 代码实现 PDF 转 Markdown
import os
import re
import gc
import subprocess
from pdf2image import convert_from_path
import pytesseract# 配置路径(Linux 下无需手动指定,依赖系统环境)
if os.name == 'nt':pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe'poppler_path = r'D:\poppler\Release-24.08.0-0\poppler-24.08.0\Library\bin'
else:poppler_path = None # Linux 下依赖系统环境def process_pdf_page(pdf_path, page_num, lang='chi_sim'):"""处理单页 PDF,识别后释放资源"""try:# 转换 PDF 页为图片pages = convert_from_path(pdf_path,dpi=200,first_page=page_num,last_page=page_num,poppler_path=poppler_path)if not pages:return ""page = pages[0]text = pytesseract.image_to_string(page, lang=lang)page.close() # 主动释放内存return textexcept Exception as e:print(f"处理第 {page_num} 页失败: {e}")return ""def pdf_to_md(pdf_path, md_path, lang='chi_sim'):# 获取 PDF 总页数(跨平台兼容)if os.name == 'nt':pdfinfo_path = os.path.join(poppler_path, 'pdfinfo.exe')result = subprocess.run([pdfinfo_path, pdf_path],capture_output=True,text=True)else:result = subprocess.run(['pdfinfo', pdf_path],capture_output=True,text=True)# 解析页数match = re.search(r'Pages:\s+(\d+)', result.stdout)if not match:print("无法获取 PDF 页数,请检查文件")returnpage_count = int(match.group(1))md_content = ""for page_num in range(1, page_count + 1):print(f"处理第 {page_num}/{page_count} 页...")text = process_pdf_page(pdf_path, page_num, lang)md_content += text + "\n\n"# 每 20 页强制垃圾回收if page_num % 20 == 0:gc.collect()# 保存为 Markdownwith open(md_path, 'w', encoding='utf-8') as f:f.write(md_content)print(f"处理完成!共 {page_count} 页,保存至 {md_path}")if __name__ == "__main__":pdf_path = "/path/to/your/pdf.pdf" # 替换为实际路径md_path = "/path/to/output.md" # 替换为输出路径# 中文识别需指定 lang='chi_sim',英文可省略pdf_to_md(pdf_path, md_path, lang='chi_sim')
六、使用技巧
-
提升识别精度:
- 调整
dpi=200
(值越大越清晰,内存消耗越高)。 - 预处理图片(裁剪、降噪)后再识别。
- 调整
-
多语言支持:
- 中文用
lang='chi_sim'
,英文省略或用lang='eng'
。 - 安装对应语言包(如
tesseract-ocr-jpn
支持日语)。
- 中文用
-
内存优化:
- 每页识别后主动
page.close()
,定期gc.collect()
,适合大 PDF 处理。
- 每页识别后主动
通过以上步骤,即可在 Windows/Linux 环境实现图片型 PDF 转文字,完美解决医学教材、扫描文档的文字提取需求!