WeasyPrint配合Django使用时报Fontconfig错误如何解决
问题原因
该错误是Windows环境下Conda安装的WeasyPrint运行时无法读取Fontconfig配置文件导致的:单独运行脚本时能正常读取conda环境的环境变量,但Django启动时未正确加载对应环境变量,或者Fontconfig配置路径未被识别。
解决方案
方案1:手动指定Fontconfig配置路径
在Django项目的settings.py文件头部添加如下代码,将路径替换为你本地conda环境中Fontconfig配置文件的实际路径,修改后需要重启Django服务生效:import os # 示例路径:C:/Users/用户名/miniconda3/envs/你的环境名/etc/fonts/fonts.conf os.environ['FONTCONFIG_FILE'] = '你的fonts.conf绝对路径'注意路径使用正斜杠
/或者双反斜杠\\,避免转义字符错误。方案2:直接指定加载字体,跳过Fontconfig检索
在生成PDF的HTML字符串中加入字体声明,直接指定本地字体文件路径,不需要走Fontconfig配置:html_content = """ <style> @font-face { font-family: 'custom-font'; /* 示例用系统自带宋体,也可替换为项目目录下的字体文件路径 */ src: url('file:///C:/Windows/Fonts/simsun.ttc') format('truetype'); } * { font-family: custom-font, sans-serif; } </style> test """ HTML(string=html_content).write_pdf(buffer)方案3:更换WeasyPrint安装源
先卸载conda版本的WeasyPrint,改用pip安装适配Windows的预编译版本:conda remove weasyprint pip install weasyprint方案4:校验环境变量
在Django视图函数和单独运行的测试脚本中分别打印os.environ.get('FONTCONFIG_FILE'),对比返回值,如果Django运行时返回空值,说明启动Django时未激活对应conda环境,启动前先执行conda activate 你的环境名再启动Django服务即可。
内容的提问来源于stack exchange,提问作者Nyfregja
相关产品推荐
相关产品推荐

