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

如何利用坐标提取PDF目标数据?PyPDF2文本提取错位问题求助

基于PDF坐标提取目标数据的解决方案

完全可以利用你在iText RUPS中看到的坐标来提取括号内的信息,这能彻底解决行数据缺失导致的数据错位问题,是比单纯按行提取更可靠的方案。

实现思路(以PyMuPDF库为例)

  • 遍历PDF每页,获取所有文本块的坐标与内容
  • 过滤出坐标接近目标值(582, -158.78)的文本块(注意不同PDF库的坐标体系可能有差异,需要做对应转换)
  • 用正则表达式提取匹配文本中括号内的数字

代码示例

import fitz  # 导入PyMuPDF库
import re

def extract_target_from_pdf(pdf_path):
    doc = fitz.open(pdf_path)
    extracted_data = []
    # iText RUPS中看到的目标坐标
    target_x = 582
    target_y = -158.78
    # 坐标误差容忍值,避免浮点精度问题
    tolerance = 2

    for page in doc:
        page_height = page.rect.height
        # 转换坐标:iText的y轴原点在页面顶部,向下为负;PyMuPDF原点在左下角,向上为正
        converted_target_y = page_height + target_y
        # 获取页面所有文本块,每个块格式为(x0, y0, x1, y1, text, ...)
        for block in page.get_text("blocks"):
            block_x, block_y = block[0], block[1]
            block_text = block[4].strip()
            # 匹配坐标范围
            if abs(block_x - target_x) < tolerance and abs(block_y - converted_target_y) < tolerance:
                # 提取括号内的数字
                match_result = re.search(r"\((\d+)\)", block_text)
                if match_result:
                    extracted_data.append(match_result.group(1))
    doc.close()
    return extracted_data

# 调用示例
data = extract_target_from_pdf("your_target.pdf")
print(data)

方案对比

  • 坐标提取方案:无需修改原始PDF,完全依赖页面布局定位,不受其他行数据缺失影响,精度更高,是优先选择的方案。
  • 前缀标记方案:实现简单,但需要协调修改PDF生成规则,灵活性不足,仅适合无法使用坐标提取的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 08:10:30