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

如何从含文本、图片、扫描页的PDF中提取内容,修改PyPDF2代码识别图片文字

PDF文本提取(含图片/扫描页OCR)修改方案

前置准备

  • 安装Tesseract OCR引擎:Windows用户直接下载官方安装包安装,若未将其加入系统环境变量,需要在代码中手动指定执行文件路径
  • 安装依赖库:
    pip install pymupdf pytesseract pillow

说明:我们替换原有PyPDF2库为PyMuPDF(导入名为fitz),它对PDF页面资源的解析能力更强,可稳定识别页面中的图片资源、适配扫描版PDF的识别需求。


修改后完整代码

import os
import fitz
import pytesseract
from PIL import Image
import io

# 若Tesseract未加入环境变量,取消下方注释并修改为你的实际安装路径
# pytesseract.pytesseract.tesseract_cmd = r"C:\Program Files\Tesseract-OCR\tesseract.exe"

lst_all_text = []
# 替换为你的PDF文件根目录
pdf_root_path = r"C:/MY PATH"

for foldername, subfolders, files in os.walk(pdf_root_path):
    for file in files:
        # 仅处理PDF后缀的文件
        if not file.lower().endswith(".pdf"):
            continue
        file_path = os.path.join(foldername, file)
        text = ""
        try:
            # 打开PDF文件
            with fitz.open(file_path) as pdf_doc:
                # 逐页处理
                for page in pdf_doc:
                    # 第一步:提取页面原生可复制文本
                    page_text = page.get_text()
                    text += page_text
                    
                    # 第二步:检查页面是否包含图片
                    image_list = page.get_images(full=True)
                    if image_list:
                        # 遍历所有图片做OCR识别
                        for img_index, img in enumerate(image_list):
                            xref = img[0]
                            # 提取图片原始字节数据
                            base_image = pdf_doc.extract_image(xref)
                            image_bytes = base_image["image"]
                            # 转为PIL可处理的图像对象
                            img_obj = Image.open(io.BytesIO(image_bytes))
                            # 过滤尺寸过小的图标类图片,可根据需求调整阈值
                            if img_obj.width < 100 or img_obj.height < 100:
                                continue
                            # OCR识别图片文字,默认识别简体中文+英文,可修改lang参数
                            ocr_text = pytesseract.image_to_string(img_obj, lang="chi_sim+eng")
                            text += f"\n[图片{img_index+1}识别文本]\n{ocr_text}\n"
        except Exception as e:
            print(f"处理文件{file_path}失败:{e}")
            continue
        
        lst_all_text.append(text)

逻辑说明

  • 会自动跳过非PDF格式的文件,避免遍历到其他文件报错
  • 优先提取PDF原生可复制文本,效率更高
  • 检测到页面存在图片时,自动调用OCR识别图片内文字,自动适配扫描版PDF(整页为单张图片的场景)
  • 增加了小尺寸图片过滤逻辑,避免页眉页脚小图标、装饰性图片的无效识别干扰结果
  • 增加了异常捕获逻辑,单个文件损坏不会中断整体遍历任务

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 10:06:05