使用Python fitz提取PDF项目符号失败问题求助
提取PDF中项目符号的解决方案
核心原因分析
你遇到的项目符号并非PNG位图,而是矢量图形或特殊字体符号,因此常规的图片提取、文本搜索方法无法捕获它们。
可行的解决方法
通过PyMuPDF(fitz)提取矢量绘图元素
PDF中的矢量图形由绘图路径定义,可通过页面的get_drawings()方法获取,再通过尺寸、形状特征筛选项目符号:import fitz doc = fitz.open("target.pdf") for page in doc: # 获取所有矢量绘图对象 drawings = page.get_drawings() for draw in drawings: rect = draw["rect"] w, h = rect.x1 - rect.x0, rect.y1 - rect.y0 # 筛选小尺寸图形(符合项目符号的典型大小) if 4 <= w <= 12 and 4 <= h <= 12: print(f"找到疑似项目符号,位置:{rect}") # 结合附近文本块,关联项目符号与对应内容 nearby_text = page.get_text("words", clip=rect + fitz.Rect(10,0,200,0)) print(f"对应文本:{''.join([w[4] for w in nearby_text])}")使用pdfplumber进行精准位置匹配
pdfplumber对PDF元素的位置识别更精细,可同时提取图形与文本,便于关联:import pdfplumber with pdfplumber.open("target.pdf") as pdf: for page in pdf.pages: # 筛选小尺寸图形 for shape in page.shapes: if shape["width"] <= 12 and shape["height"] <= 12: bbox = shape["bbox"] # 获取图形右侧的文本内容 text = page.within_bbox((bbox[2]+5, bbox[1], page.width, bbox[3])).extract_text() if text: print(f"- {text.strip()}")检查特殊字体符号
若项目符号是字体的一部分,可提取文本后搜索Unicode特殊字符(如●、■对应的编码),或通过page.get_fonts()查看是否有符号字体,映射对应字符。
内容的提问来源于stack exchange,提问作者Santiago
相关产品推荐
相关产品推荐

