基于Python实现PDF目录批量OCR并生成对应TXT文件方案咨询
批量处理PDF目录并生成OCR文本文件的实现方案
嘿,我来帮你把单文件的OCR代码改成批量处理版本——刚好之前做过类似的需求,很容易实现的!
核心思路就是:用os模块遍历目标PDF目录,把你现有的单文件OCR逻辑封装成可复用的函数,然后逐个处理每个PDF,最后把识别后的文本保存到指定目录的TXT文件里。
完整实现代码
import io import os from PIL import Image import pytesseract from wand.image import Image as wi # 替换成你的实际路径:PDF存放目录和TXT输出目录 INPUT_PDF_DIR = r"D:\files" OUTPUT_TXT_DIR = r"D:\ocr_output" # 确保输出目录存在,不存在则自动创建 os.makedirs(OUTPUT_TXT_DIR, exist_ok=True) # 可选:如果Tesseract未添加到系统环境变量,手动指定其安装路径 # pytesseract.pytesseract.tesseract_cmd = r"C:\Program Files\Tesseract-OCR\tesseract.exe" def ocr_single_pdf(pdf_file_path): """将单个PDF文件转换为识别后的文本内容""" try: # 加载PDF并转换为JPEG格式的页面序列 with wi(filename=pdf_file_path, resolution=300) as pdf: pdf_image_sequence = pdf.convert('jpeg') image_blobs = [] for page_img in pdf_image_sequence.sequence: with wi(image=page_img) as single_page: image_blobs.append(single_page.make_blob('jpeg')) # 逐页执行OCR识别 page_texts = [] for blob in image_blobs: img = Image.open(io.BytesIO(blob)) # 如需识别中文,可改为lang='chi_sim+eng'(需提前安装中文语言包) page_text = pytesseract.image_to_string(img, lang='eng') page_texts.append(page_text) # 合并所有页面的文本,用分隔线区分页面 return "\n\n--- PDF页面分隔线 ---\n\n".join(page_texts) except Exception as e: print(f"处理文件 {pdf_file_path} 时发生错误: {str(e)}") return None # 遍历PDF目录下的所有文件 for file_name in os.listdir(INPUT_PDF_DIR): # 只处理后缀为.pdf的文件(忽略大小写) if file_name.lower().endswith('.pdf'): full_pdf_path = os.path.join(INPUT_PDF_DIR, file_name) # 生成对应的TXT文件名 txt_file_name = os.path.splitext(file_name)[0] + '.txt' full_txt_path = os.path.join(OUTPUT_TXT_DIR, txt_file_name) print(f"正在处理文件: {file_name}") recognized_text = ocr_single_pdf(full_pdf_path) if recognized_text is not None: # 以UTF-8编码保存文本文件,避免乱码 with open(full_txt_path, 'w', encoding='utf-8') as txt_file: txt_file.write(recognized_text) print(f"处理完成,结果已保存至: {full_txt_path}") print("所有PDF文件批量OCR处理完成!")
关键注意事项
- 路径配置:一定要把
INPUT_PDF_DIR和OUTPUT_TXT_DIR替换成你自己的实际路径,不然会找不到文件或者保存失败。 - Tesseract环境:如果运行时提示找不到Tesseract,取消注释代码里的
tesseract_cmd行,填上你的Tesseract安装路径(比如C:\Program Files\Tesseract-OCR\tesseract.exe)。 - 语言支持:如果需要识别中文,要先给Tesseract安装中文语言包,然后把
lang='eng'改成lang='chi_sim+eng'(中文简体+英文混合识别)。 - 异常处理:代码里加了基础的异常捕获,这样就算某个PDF文件损坏或者处理失败,也不会导致整个批量任务中断。
- 识别精度优化:
resolution=300是比较均衡的参数,如果识别效果不好,可以尝试调高到400或500,但会增加处理时间;反之如果追求速度,可以适当降低。
内容的提问来源于stack exchange,提问作者ajai biltu




