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

如何解决Python Reportlab中表格中文显示豆腐块(Tofu)问题

问题排查与解决:ReportLab表格中文显示豆腐块

问题描述

使用ReportLab生成PDF时,导入Google Fonts的NotoSerifSC-Regular.ttf字体并注册为SimSun后,段落中的中文显示正常,但表格内的中文仍显示为豆腐块(Tofu)。

原因分析

当前代码仅为表格的第一行(表头)指定了中文字体SimSun,但表格的其他行未设置字体,ReportLab默认使用不支持中文的内置字体,导致中文无法渲染,出现豆腐块。

解决方案

修改TableStyle配置,为表格所有单元格指定中文字体SimSun,覆盖默认字体设置。

修改后的核心代码如下:

# 词汇表
data = [["单词", "词性", "中文含义"]] + vocab_list
table = Table(data, colWidths=[120, 80, 250])
table.setStyle(TableStyle([
    ("BACKGROUND", (0,0), (-1,0), colors.lightblue),
    ("GRID", (0,0), (-1,-1), 0.5, colors.grey),
    # 为所有单元格设置中文字体
    ("FONTNAME", (0,0), (-1,-1), "SimSun"),
    ("ALIGN", (0,0), (-1,-1), "CENTER")
]))
elements.append(table)

若需要表头和内容行的字体差异化,也可单独设置:

table.setStyle(TableStyle([
    ("BACKGROUND", (0,0), (-1,0), colors.lightblue),
    ("GRID", (0,0), (-1,-1), 0.5, colors.grey),
    # 表头字体
    ("FONTNAME", (0,0), (-1,0), "SimSun"),
    # 内容行字体
    ("FONTNAME", (0,1), (-1,-1), "SimSun"),
    ("ALIGN", (0,0), (-1,-1), "CENTER")
]))

验证说明

修改后重新运行代码生成PDF,表格内的中文将正常显示,不再出现豆腐块。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 03:43:12