如何利用坐标提取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
相关产品推荐
相关产品推荐

