You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

基于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_DIROUTPUT_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

火山引擎 最新活动