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

如何用Python/R关联PDF提取的文本数据与对应图片?

如何关联PDF提取的图片与对应文本标签并生成目标DataFrame?

我明白你现在的困境:你需要从PDF中提取编号(NUMBER)、订单号(ORDER)和对应图片,最终生成指定格式的DataFrame,同时把图片保存到指定文件夹。目前你已经能成功提取图片,但没法建立图片和文本标签的关联。

先看你期望的输出格式:

NUMBER ORDER IMAGE
09090087 345679 345679.jpg
09090087 535278 535278.jpg

你的现有代码只是遍历了PDF中的所有XObject图片,没有结合页面的文本信息来做关联。要解决这个问题,我们可以利用PyMuPDF(你正在用的fitz库)的页面文本提取和图片定位功能,把页面上的文本标签和同页面的图片绑定起来。

解决方案思路

  • 遍历PDF的每一页,先提取页面中的文本,用正则匹配出NUMBER和ORDER值。
  • 提取当前页面中的所有图片,将图片以对应的ORDER值命名保存(比如345679.jpg)。
  • 把每一组NUMBER、ORDER、图片文件名存入列表,最后转换为DataFrame。

修改后的代码实现

from __future__ import print_function
import fitz
import sys
import re
import pandas as pd

# 定义正则表达式匹配NUMBER和ORDER(根据你的PDF文本格式调整)
# 假设NUMBER是8位数字,ORDER是6位数字,可根据实际情况修改
pattern_number = re.compile(r'NUMBER\s*(\d{8})')
pattern_order = re.compile(r'ORDER\s*(\d{6})')

# 初始化存储数据的列表
data_list = []
# 指定图片保存文件夹
img_folder = "pdfimg/"

doc = fitz.open(sys.argv[1])

for page_num in range(len(doc)):
    page = doc[page_num]
    # 提取页面文本
    page_text = page.get_text()
    
    # 匹配当前页面的NUMBER和ORDER
    number_match = pattern_number.search(page_text)
    order_match = pattern_order.search(page_text)
    
    if not number_match or not order_match:
        continue  # 如果当前页面没有匹配到,跳过
    
    number = number_match.group(1)
    order = order_match.group(1)
    
    # 提取当前页面的所有图片
    image_list = page.get_images(full=True)
    for img_index, img in enumerate(image_list):
        xref = img[0]
        pix = fitz.Pixmap(doc, xref)
        # 用ORDER作为图片文件名,若一页多张可加索引区分
        img_filename = f"{order}.jpg" if img_index == 0 else f"{order}_{img_index}.jpg"
        img_path = f"{img_folder}{img_filename}"
        
        # 保存图片
        if pix.n < 5:
            pix.save(img_path)
        else:
            pix_rgb = fitz.Pixmap(fitz.csRGB, pix)
            pix_rgb.save(img_path)
            pix_rgb = None
        pix = None
        
        # 将数据添加到列表
        data_list.append({
            "NUMBER": number,
            "ORDER": order,
            "IMAGE": img_filename
        })

# 生成DataFrame
df = pd.DataFrame(data_list)
print(df)

# 可选:将DataFrame保存到CSV或数据库
# df.to_csv("pdf_data.csv", index=False)

关键说明

  • 正则调整:你需要根据PDF中实际的文本格式调整pattern_number和pattern_order的正则表达式,确保能准确匹配到NUMBER和ORDER的值。
  • 多图处理:如果同一页面有多个图片,代码中通过添加索引区分文件名(比如345679_0.jpg、345679_1.jpg),你可以根据实际需求修改这部分逻辑。
  • 文本定位:如果文本和图片在页面上的位置有对应关系(比如图片在ORDER文本下方),还可以通过获取文本和图片的坐标来进一步确认关联,提升准确性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 10:14:10