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完整组件
- Windows:下载思源黑体、思源宋体等开源通用字体包,以及Adobe PDF标准字体包,解压后放到
方案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
相关产品推荐
相关产品推荐

