import os
import pdfplumber
from PIL import Image
import pytesseract # 导入OCR库
def batch_pdf_to_txt(pdf_folder, txt_folder, tesseract_path):
"""
批量将PDF转换为TXT(支持文字版和扫描版,需指定Tesseract路径)
:param pdf_folder: PDF文件夹路径
:param txt_folder: TXT保存路径
:param tesseract_path: Tesseract的安装路径(指向tesseract.exe)
"""
# 1. 检查Tesseract路径是否有效(关键:确保能找到引擎)
if not os.path.exists(tesseract_path):
print(f"错误:Tesseract路径不存在 -> {tesseract_path}")
print("请检查路径是否正确,例如:C:\\Program Files\\Tesseract-OCR\\tesseract.exe")
return
# 2. 配置pytesseract使用指定的Tesseract路径
pytesseract.pytesseract.tesseract_cmd = tesseract_path
# 3. 检查PDF源文件夹
if not os.path.exists(pdf_folder):
print(f"错误:PDF源文件夹不存在 -> {pdf_folder}")
return
# 4. 创建TXT保存文件夹
if not os.path.exists(txt_folder):
os.makedirs(txt_folder)
print(f"已创建TXT保存文件夹 -> {txt_folder}")
# 5. 获取所有PDF文件
pdf_files = [f for f in os.listdir(pdf_folder) if f.lower().endswith(".pdf")]
if not pdf_files:
print(f"警告:未找到PDF文件 -> {pdf_folder}")
return
print(f"共发现 {len(pdf_files)} 个PDF文件,开始转换(扫描版会自动OCR识别)...")
# 6. 逐个转换(文字版直接提取,扫描版用OCR)
for filename in pdf_files:
pdf_path = os.path.join(pdf_folder, filename)
txt_filename = os.path.splitext(filename)[0] + ".txt"
txt_path = os.path.join(txt_folder, txt_filename)
try:
with pdfplumber.open(pdf_path) as pdf:
all_text = ""
for page_num, page in enumerate(pdf.pages, 1):
# 先尝试直接提取文字(文字版PDF)
page_text = page.extract_text()
if page_text:
# 文字版:直接添加文本
all_text += f"=== 第{page_num}页(文字版) ===\n"
all_text += page_text + "\n\n"
else:
# 扫描版:用OCR识别(转换为图片后识别)
print(f"⚠️ {filename} 第{page_num}页是扫描件,正在OCR识别...")
# 将PDF页面转为高清图片(300dpi确保识别 accuracy)
img = page.to_image(resolution=300)
temp_img_path = "temp_page.png" # 临时图片路径
img.save(temp_img_path)
# OCR识别(支持中英文混合,lang参数可按需调整)
# 仅英文:lang='eng';仅简体中文:lang='chi_sim';混合:lang='chi_sim+eng'
ocr_text = pytesseract.image_to_string(
Image.open(temp_img_path),
lang='chi_sim+eng' # 四六级资料建议用这个,兼顾中英文
)
# 添加OCR结果到文本
all_text += f"=== 第{page_num}页(OCR识别) ===\n"
all_text += ocr_text + "\n\n"
# 删除临时图片
os.remove(temp_img_path)
# 保存到TXT
with open(txt_path, "w", encoding="utf-8") as f:
f.write(all_text)
print(f"✅ 转换成功:{filename} -> {txt_filename}")
except PermissionError:
print(f"❌ {filename} 失败:权限不足(无法读取PDF或写入TXT)")
except FileNotFoundError:
print(f"❌ {filename} 失败:文件已被删除或移动")
except Exception as e:
print(f"❌ {filename} 失败:{str(e)}")
# ----------------------
# 主函数:执行转换(需手动填写Tesseract路径)
# ----------------------
if __name__ == "__main__":
# 1. 填写你的PDF和TXT文件夹路径(双反斜杠或斜杠)
pdf_folder = "D:\\大四上文件\\英语\\cet6_pdfs"
txt_folder = "D:\\大四上文件\\英语\\cet6_txts"
# 2. 关键:填写你的Tesseract安装路径(必须指向tesseract.exe)
# 示例默认路径(64位系统):
tesseract_path = r"C:\Program Files\Tesseract-OCR\tesseract.exe"
# 如果你装在其他位置,比如D盘:
# tesseract_path = r"D:\Software\Tesseract-OCR\tesseract.exe"
# 执行转换
batch_pdf_to_txt(pdf_folder, txt_folder, tesseract_path)
带 OCR 功能的批量 PDF 转 TXT 代码(无需全局环境变量)
最新推荐文章于 2025-12-03 22:17:03 发布
1473

被折叠的 条评论
为什么被折叠?



