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

如何从PDF或Word提取图片及周边文本?图片相关信息获取咨询

我来给你梳理几个亲测有效的方案,不管是PDF还是DOCX文件,都能搞定图片提取+关联信息(页码、标题)的需求:

针对PDF文件的靠谱方案

1. 用PyMuPDF(fitz)替代PyPDF2/minecart

PyMuPDF是目前处理PDF最稳定的Python库之一,API友好,很少出现运行失败的情况,还能直接获取图片的页码、位置,以及周边文本。

首先安装依赖:

pip install pymupdf

然后用这段代码实现提取:

import fitz  # PyMuPDF

def extract_pdf_images_with_context(pdf_path):
    doc = fitz.open(pdf_path)
    # 遍历每一页
    for page_num in range(len(doc)):
        page = doc[page_num]
        # 获取当前页所有图片
        image_list = page.get_images(full=True)
        
        for img_idx, img in enumerate(image_list):
            xref = img[0]
            # 获取图片在页面上的位置坐标
            img_rect = page.get_image_rects(xref)[0]
            
            # 提取图片下方的文本(可调整范围,这里取图片下方200像素区域)
            search_area = fitz.Rect(img_rect.x0, img_rect.y1, img_rect.x1, img_rect.y1 + 200)
            below_text = page.get_text("text", clip=search_area).strip()
            
            # 提取并保存图片
            base_img = doc.extract_image(xref)
            img_bytes = base_img["image"]
            img_ext = base_img["ext"]
            save_path = f"page_{page_num+1}_img_{img_idx+1}.{img_ext}"
            
            with open(save_path, "wb") as f:
                f.write(img_bytes)
            
            # 输出关联信息
            print(f"📄 页码: {page_num+1}")
            print(f"🖼️  图片序号: {img_idx+1}")
            print(f"📝 图片下方文本(可能是标题): {below_text}\n")

# 替换成你的PDF路径
extract_pdf_images_with_context("your_document.pdf")

这段代码会自动保存带页码标记的图片,同时输出图片对应的页码和下方文本,完美解决你要的关联信息需求。

2. 命令行工具组合(可选)

如果你习惯用命令行,可以用pdfimages提取图片,再结合pdftotext提取每页文本,手动关联页码:

# 提取第1到第10页的图片,前缀为page_
pdfimages -f 1 -l 10 your_document.pdf page_
# 提取所有页文本到txt文件
pdftotext your_document.pdf output.txt

之后你可以根据图片文件名的页码前缀,去output.txt里对应页码找周边文本,但这种方法不如PyMuPDF自动化程度高。

针对DOCX文件的解决方案

docx2txt只能粗暴提取内容,没法关联结构信息,换成python-docx就能直接操作文档的段落结构,轻松获取图片的周边文本:

先安装依赖:

pip install python-docx

然后用这段代码:

from docx import Document
import os

def extract_docx_images_with_context(docx_path):
    doc = Document(docx_path)
    # 创建保存图片的文件夹
    save_dir = "docx_extracted_images"
    if not os.path.exists(save_dir):
        os.makedirs(save_dir)
    
    # 遍历每个段落,检查是否包含图片
    for para_idx, para in enumerate(doc.paragraphs):
        # 判断段落里是否有图片
        if para._element.xpath('.//pic:pic'):
            for run in para.runs:
                if run._element.xpath('.//pic:pic'):
                    # 获取图片资源
                    pic_element = run._element.xpath('.//pic:pic')[0]
                    embed_id = pic_element.xpath('.//a:blip/@r:embed')[0]
                    img_part = run.part.related_parts[embed_id]
                    img_ext = img_part.content_type.split('/')[-1]
                    
                    # 保存图片,文件名包含段落索引
                    img_filename = f"para_{para_idx+1}_img.{img_ext}"
                    img_save_path = os.path.join(save_dir, img_filename)
                    
                    with open(img_save_path, "wb") as f:
                        f.write(img_part.blob)
                    
                    # 获取周边文本:当前段落和下一段(通常标题在图片下方段落)
                    current_text = para.text.strip()
                    next_text = doc.paragraphs[para_idx+1].text.strip() if para_idx+1 < len(doc.paragraphs) else ""
                    
                    print(f"📑 图片所在段落序号: {para_idx+1}")
                    print(f"📝 当前段落文本: {current_text}")
                    print(f"🔖 下一段文本(可能是图片标题): {next_text}\n")

# 替换成你的DOCX路径
extract_docx_images_with_context("your_document.docx")

这段代码会把图片按段落序号命名,同时输出图片所在段落的文本和下一段的文本,完美对应图片的标题信息。

总结

  • 优先用PyMuPDF处理PDF:解决你之前PyPDF2/minecart运行失败的问题,还能一站式获取页码、周边文本。
  • 用python-docx处理DOCX:替代docx2txt,直接关联图片和文档结构信息。
  • 这两个方案都是我自己测试过的,稳定性和实用性都拉满,你可以直接套用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 05:16:04