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

PDFMiner返回错误RGB颜色值及LTTextHorizontal问题求助

PDFMiner LTChar 颜色值获取错误的修复方案

问题核心

PDFMiner中graphicstate.ncolor返回的是归一化RGB值(范围0-1),部分PDF因颜色空间定义、渲染状态或代码语法错误,导致非白色颜色值解析异常,同时你提供的代码中存在无效的语法片段,需要先修正。

修复步骤

  1. 清理无效代码
    移除代码中错误的character.graphicstate[text]([https://stackoverflow.com])部分,该片段属于无效写法,与颜色值获取无关。

  2. 正确转换颜色值范围
    ncolor返回的0-1范围归一化值,若需要常用的0-255区间RGB,需对每个分量做转换:

    rgb = tuple(int(c * 255) for c in character.graphicstate.ncolor)
    
  3. 排查颜色空间与属性混淆

    • 检查颜色空间:部分PDF使用CMYK、灰度等非RGB空间,可通过character.graphicstate.colorspace查看,PDFMiner会自动转换,但特殊空间可能解析异常;
    • 区分填充色与描边色:ncolor对应文本填充色,scolor对应描边色,确认你需要的是哪种颜色属性,避免混淆。
  4. 兼容旧版本属性(针对异常PDF)
    部分PDFMiner版本中,LTChar可能直接提供fill_color或stroke_color属性,可尝试优先获取:

    # 获取填充色
    fill_color = character.fill_color if hasattr(character, 'fill_color') else character.graphicstate.ncolor
    rgb_fill = tuple(int(c * 255) for c in fill_color)
    

修正后的完整代码示例

from pdfminer.high_level import extract_pages
from pdfminer.layout import LTTextContainer, LTChar

for page_layout in extract_pages(scr_file):
    for element in page_layout:
        if isinstance(element, LTTextContainer):
            fontinfo = set()
            for text_line in element:
                for character in text_line:
                    if isinstance(character, LTChar):
                        fontinfo.add(character.fontname)
                        fontinfo.add(character.size)
                        # 处理填充色并转换为0-255 RGB
                        fill_color = character.graphicstate.ncolor
                        rgb_fill = tuple(int(c * 255) for c in fill_color)
                        fontinfo.add(rgb_fill)
                        # 若需要描边色同理处理
                        stroke_color = character.graphicstate.scolor
                        rgb_stroke = tuple(int(c * 255) for c in stroke_color)
                        fontinfo.add(rgb_stroke)

额外注意事项

  • 若PDF存在透明层或混合模式,需结合graphicstate.alpha属性调整颜色计算;
  • 确保使用最新版pdfminer.six(PDFMiner的维护分支),旧版本可能存在颜色解析BUG,可通过pip install --upgrade pdfminer.six升级。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 11:22:18