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

Python的pdf2image库抛出“No font in show/space”错误如何解决?

pdf2image处理PDF时字体相关报错解决方案

你遇到的错误是pdf2image依赖的底层渲染组件Poppler在解析PDF时,找不到PDF内部引用的对应字体导致的语法警告,因为你设置了strict=True参数,这类警告会被升级为异常抛出中断执行。

原报错信息中文翻译:
语法错误(位置1077):show/space操作中无可用字体
语法错误(位置1117):show/space操作中无可用字体
语法错误:未知的字体标签「F5」

可用解决方案

  • 方案1:快速规避(适合绝大多数场景)
    直接修改调用convert_from_path的参数,将strict=True改为strict=False。修改后这类字体类警告不会中断执行,Poppler会自动调用系统默认字体做 fallback 渲染,绝大多数场景下不会影响最终生成图片的可读性。
    修改后代码参考:

    pg_img = convert_from_path(pdf_path, dpi=calculated_dpi, first_page=i + 1, last_page=i + 1, fmt='jpeg',
                               jpegopt={"quality": 100, "progressive": True, "optimize": True}, strict=False)
    pg_img[0].save(os.path.join(img_folder_dir, file_name+"_"+str(i) + ".jpg"), format='JPEG', quality=85)
    
  • 方案2:根源修复(补充系统缺失字体和依赖)
    安装Poppler渲染需要的基础字体包和扩展依赖,不同系统操作如下:

    • Windows:下载思源黑体、思源宋体等开源通用字体包,以及Adobe PDF标准字体包,解压后放到C:\Windows\Fonts目录完成安装即可
    • Debian/Ubuntu系列Linux:执行命令 sudo apt install fonts-noto fonts-freefont-ttf poppler-data 安装缺失依赖
    • macOS:通过Homebrew执行命令 brew install poppler font-noto-sans-cjk-sc font-noto-serif-cjk-sc 补全字体和Poppler完整组件
  • 方案3:预处理PDF修复字体引用(适合需要保留strict参数的合规校验场景)
    先用pikepdf库预处理目标PDF,自动修复缺失的字体引用、嵌入默认字体后再调用pdf2image处理,预处理代码参考:

    import pikepdf
    
    # 预处理修复PDF
    with pikepdf.open(pdf_path) as pdf:
        fixed_pdf_path = "fixed_" + pdf_path
        pdf.save(fixed_pdf_path, fix_metadata=True)
    
    # 再用修复后的PDF路径调用convert_from_path
    pg_img = convert_from_path(fixed_pdf_path, dpi=calculated_dpi, first_page=i + 1, last_page=i + 1, fmt='jpeg',
                               jpegopt={"quality": 100, "progressive": True, "optimize": True}, strict=True)
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 22:27:04