如何解决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
相关产品推荐
相关产品推荐

