You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python对一个文件夹内的所有PDF文件批量执行OCR?

批量处理文件夹内所有PDF的OCR实现

当然可以实现批量OCR处理文件夹里的所有PDF!你的现有代码已经具备单文件处理的核心逻辑,只需要添加文件夹遍历的逻辑,再修正原代码里的小疏漏(比如req_image没有填充内容),就能完成批量处理。

先提下原代码的小问题:你定义了req_image但没有把PDF转换后的JPEG页面数据添加进去,这会导致没有文本被提取,我会在修改后的代码里补上这部分。

完整批量处理代码

import os
from wand.image import Image
from PIL import Image as PI
import pyocr
import pyocr.builders
import io

# 初始化OCR工具和语言
tool = pyocr.get_available_tools()[0]
# 注意:这里的语言索引要根据你实际安装的语言调整,比如中文是'chi_sim',英文是'eng'
# 可以先运行 print(tool.get_available_languages()) 查看所有可用语言
lang = tool.get_available_languages()[1]

# 配置文件夹路径
TARGET_FOLDER = "./your_pdf_folder"  # 替换成你的PDF文件夹路径
OUTPUT_FOLDER = "./ocr_results"       # 结果保存的文件夹,不存在则自动创建

# 创建输出文件夹
if not os.path.exists(OUTPUT_FOLDER):
    os.makedirs(OUTPUT_FOLDER)

# 遍历文件夹内所有PDF文件
for filename in os.listdir(TARGET_FOLDER):
    # 筛选PDF文件(兼容大写.PDF后缀)
    if filename.lower().endswith(".pdf"):
        pdf_full_path = os.path.join(TARGET_FOLDER, filename)
        print(f"正在处理: {filename}")
        
        final_text = []
        try:
            # 将PDF每页转换为JPEG图片
            with Image(filename=pdf_full_path, resolution=300) as image_pdf:
                image_jpeg = image_pdf.convert('jpeg')
                
                # 提取每页的JPEG字节数据
                req_image = []
                for page_img in image_jpeg.sequence:
                    with Image(page_img) as single_page:
                        img_bytes = single_page.make_blob('jpeg')
                        req_image.append(img_bytes)
                
                # 对每页执行OCR提取文本
                for img_bytes in req_image:
                    page_text = tool.image_to_string(
                        PI.open(io.BytesIO(img_bytes)),
                        lang=lang,
                        builder=pyocr.builders.TextBuilder()
                    )
                    final_text.append(page_text)
            
            # 将提取的文本保存为同名TXT文件
            txt_filename = f"{os.path.splitext(filename)[0]}.txt"
            txt_full_path = os.path.join(OUTPUT_FOLDER, txt_filename)
            with open(txt_full_path, 'w', encoding='utf-8') as f:
                f.write('\n\n--- 分页分割线 ---\n\n'.join(final_text))
            
            print(f"{filename} 处理完成,结果已保存到: {txt_full_path}")
        
        except Exception as e:
            print(f"处理{filename}时出错: {str(e)}")

关键逻辑说明

  • 文件夹遍历:用os.listdir扫描目标文件夹,通过endswith(".pdf")筛选PDF文件,lower()确保兼容大写后缀的文件
  • PDF转图片:修正了原代码的疏漏,把PDF的每一页转换为JPEG字节数据存入列表,供OCR处理
  • 结果保存:每个PDF对应生成一个同名TXT文件,保存在独立的输出文件夹里,避免文件覆盖
  • 异常处理:添加try-except块,防止单个文件处理失败导致整个程序中断

注意事项

  1. 确保安装所有依赖:pip install wand pillow pyocr
  2. 必须安装Tesseract OCR引擎:Windows需下载安装包,Linux可通过apt install tesseract-ocr安装,还可按需安装语言包(比如中文包tesseract-ocr-chi-sim)
  3. 语言索引可通过print(tool.get_available_languages())查看后调整,直接用语言名称(比如lang='eng')更直观
  4. 分辨率resolution=300可按需调整,更高分辨率会提升OCR准确率,但处理速度会变慢

内容的提问来源于stack exchange,提问作者sam s

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:57:01