如何修复PyFPDF使用不同字体时的编码错误?
字体加载UnicodeDecodeError问题解决
问题根源
这个错误是因为你使用的Garamond字体文件的元数据(如字体名称、版权信息)采用了非UTF-8编码(比如Latin-1),而PDF生成库默认用UTF-8解码这些元数据,导致解码失败。Arial这类标准字体的元数据通常是UTF-8编码,所以能正常加载。
修复方案
方案1:修改代码指定编码或禁用Unicode映射
如果使用的是fpdf2库,在add_font方法中添加对应参数即可:
# 方式A:禁用Unicode映射,跳过元数据解码 pdf.add_font('Garamond', '', 'Garamond Regular.ttf', uni_map=None) # 方式B:显式指定字体元数据的编码(比如Latin-1) pdf.add_font('Garamond', '', 'Garamond Regular.ttf', encoding='latin-1')
如果是旧版FPDF库,可尝试:
pdf.add_font('Garamond', '', 'Garamond Regular.ttf', unicode=True, encoding='latin-1')
方案2:修复字体文件元数据编码
用FontForge这类字体编辑工具打开Garamond字体文件,将字体的元数据(名称、描述等字段)转换为UTF-8编码后保存,再重新加载字体文件。
方案3:更换字体文件
当前的Garamond字体文件可能本身存在编码缺陷,从官方或可信渠道重新下载该字体,确保字体元数据符合UTF-8标准。
内容的提问来源于stack exchange,提问作者AScientist1096
相关产品推荐
相关产品推荐

