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

批量提取同版式PDF指定数据并写入DataFrame的技术问询

批量提取PDF红框金额并生成DataFrame方案

依赖库安装

先安装所需工具库:

pip install pymupdf pandas

核心实现逻辑

利用PyMuPDF读取PDF中的矩形注释(红框属于这类标注),定位对应区域的文本,结合版式一致性提取目标字段,最后遍历文件夹完成批量处理。

完整代码

import os
import pandas as pd
import fitz  # PyMuPDF

def extract_pdf_data(pdf_path):
    pdf_records = []
    doc = fitz.open(pdf_path)
    
    for page in doc:
        annots = page.annots()
        if not annots:
            continue
        
        for annot in annots:
            # 筛选矩形标注(红框)
            if annot.type[0] == fitz.PDF_ANNOT_RECT:
                rect = annot.rect
                # 提取红框区域内的文本
                text = page.get_textbox(rect).strip()
                # 根据固定版式解析字段,需按实际PDF格式调整分割规则
                parts = text.split()
                if len(parts) >= 3:
                    date = parts[0]
                    department = ' '.join(parts[1:-1])
                    amount = parts[-1]
                    # 转换金额为数值类型,处理千位分隔符
                    try:
                        amount = float(amount.replace(',', ''))
                    except ValueError:
                        amount = None
                    pdf_records.append({
                        'Date': date,
                        'Department': department,
                        'Amount': amount
                    })
    doc.close()
    return pdf_records

def batch_process_folder(folder_path):
    all_records = []
    # 遍历文件夹内所有PDF文件
    for filename in os.listdir(folder_path):
        if filename.lower().endswith('.pdf'):
            pdf_path = os.path.join(folder_path, filename)
            records = extract_pdf_data(pdf_path)
            all_records.extend(records)
    
    # 生成目标DataFrame并保存
    df = pd.DataFrame(all_records, columns=['Date', 'Department', 'Amount'])
    df.to_csv('extracted_data.csv', index=False, encoding='utf-8-sig')
    df.to_excel('extracted_data.xlsx', index=False)
    return df

# 替换为你的目标文件夹路径后执行
if __name__ == '__main__':
    target_folder = './pdf_files'
    result_df = batch_process_folder(target_folder)
    print(result_df.head())

关键调整说明

  • 红框定位:若红框不是PDF标准注释,需提前测量红框在页面的固定坐标,替换为直接按坐标提取文本(例如page.get_textbox(fitz.Rect(x0, y0, x1, y1)))。
  • 文本解析:如果红框内的字段是分行显示,将text.split()改为text.split('\n'),再按行分配对应字段。
  • 金额处理:根据实际金额格式调整字符替换规则,比如处理货币符号、小数点格式等。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 18:09:25