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

Django使用xhtml2pdf生成PDF时格鲁吉亚文字显示黑块怎么解决?

Django xhtml2pdf 生成PDF格鲁吉亚文字显示黑块问题排查与解决

根本原因

该问题是xhtml2pdf默认内置字体不包含格鲁吉亚语字符集,缺少对应字符的字形,渲染时就会显示为黑块或空白占位符,和编码配置无关(你的代码里已经正确指定了utf-8编码)。

排查步骤

  • 先验证HTML渲染结果是否正常:注释视图中pisa生成PDF的代码,直接返回渲染后的html变量到浏览器,查看格鲁吉亚文字是否正常显示,若此处乱码先排查模板编码、数据库字符集配置,若正常则100%是字体问题。
  • 验证字体兼容性:确认你使用的字体明确支持格鲁吉亚语字符,推荐使用开源的DejaVu系列字体,全系列原生支持格鲁吉亚语。

具体解决步骤

  1. 准备字体文件
    下载支持格鲁吉亚语的字体(比如DejaVuSans.ttf),放到Django项目的静态资源目录,例如static/fonts/DejaVuSans.ttf。

  2. 修改PDF模板的CSS配置
    在你用到的test.html模板的<head>标签内添加以下CSS,声明自定义字体并全局指定使用该字体:

<style>
@font-face {
    font-family: 'DejaVuSans';
    src: url('/absolute/path/to/your/project/static/fonts/DejaVuSans.ttf');
    /* 这里建议写字体文件的绝对文件系统路径,避免xhtml2pdf读取静态资源路径失败 */
}
/* 全局强制使用该字体,避免部分元素继承默认字体 */
* {
    font-family: 'DejaVuSans' !important;
}
</style>
  1. 修复视图代码的已知错误
    你现有视图代码中get_object_or_404(id, pk=pk)写法错误,第一个参数需要传入你要查询的模型类,假设你的模型名为Customer,修改为:
customer = get_object_or_404(Customer, pk=pk)

修改完成后重新生成PDF,格鲁吉亚文字即可正常显示。

备选方案

如果xhtml2pdf字体配置多次尝试无效,可以换用对非拉丁字符支持更好的weasyprint库替换xhtml2pdf,配置逻辑更简单,对复杂CSS的兼容性也更好。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 02:15:01