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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 10:20:03