用 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 text
except 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 页数,请检查文件")
return
page_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()
# 保存为 Markdown
with 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 转文字,完美解决医学教材、扫描文档的文字提取需求!