如何在ReportLab的Table对象中修改字体、字号及单元格样式
问题
我需要修改ReportLab中Table对象内特定单元格的文本样式,据了解可通过TableStyle类实现,但未找到相关示例。以下是我已编写的代码:
my_table = Table(data, colWidths=column_widths, rowHeights = row_heghts) my_colour_black = [0, 0, 0] my_colour_ligt_gray = [0.8, 0.8, 0.8] my_colour_gray = [0.5, 0.5, 0.5] my_colour_dark_gray = [0.2, 0.2, 0.2] my_colour_white = [1, 1, 1] my_table.setStyle(TableStyle([ ('ALIGN',(0,0),(-1,0),'CENTER'), ('VALIGN',(0,0),(-1,0),'MIDDLE'), ('TEXTCOLOR',(0,0),(-1,0), my_colour_black), ('BACKGROUND',(0,0),(-1,0),my_colour_ligt_gray), ('ALIGN',(0,1),(-1,-1),'RIGHT'), ('VALIGN',(0,1),(-1,-1),'MIDDLE'), ('TEXTCOLOR',(0,1),(-1,-1),my_colour_gray), ('INNERGRID', (0,0), (-1,-1), 0.5, my_colour_white), ]))
我查阅了官方文档及公开资料,文档中提到FONT、FONTNAME(或FACE)、FONTSIZE(或SIZE)属性,但未提供具体使用示例,特此求助该如何实现字体及字号的修改。
解决方案
你可以通过在TableStyle的样式列表中添加FONTNAME、FONTSIZE(或合并使用FONT)规则来指定特定单元格的字体和字号,规则格式与你已用的ALIGN、TEXTCOLOR一致:
1. 单独设置字体名和字号
FONTNAME:指定字体名称,比如'Helvetica-Bold'(加粗Helvetica)、'Times-Roman'等FONTSIZE:指定字号数值
示例:给表头(第0行所有单元格)设置加粗Helvetica、字号12;给第2行第3列的单元格设置斜体Times字体、字号10:
from reportlab.platypus import Table, TableStyle from reportlab.lib import colors # 你的原有代码... my_table.setStyle(TableStyle([ # 原有样式规则 ('ALIGN',(0,0),(-1,0),'CENTER'), ('VALIGN',(0,0),(-1,0),'MIDDLE'), ('TEXTCOLOR',(0,0),(-1,0), my_colour_black), ('BACKGROUND',(0,0),(-1,0),my_colour_ligt_gray), ('ALIGN',(0,1),(-1,-1),'RIGHT'), ('VALIGN',(0,1),(-1,-1),'MIDDLE'), ('TEXTCOLOR',(0,1),(-1,-1),my_colour_gray), ('INNERGRID', (0,0), (-1,-1), 0.5, my_colour_white), # 添加字体样式规则 # 表头设置加粗Helvetica,字号12 ('FONTNAME', (0,0), (-1,0), 'Helvetica-Bold'), ('FONTSIZE', (0,0), (-1,0), 12), # 第2行第3列(索引从0开始)设置斜体Times,字号10 ('FONTNAME', (3,2), (3,2), 'Times-Italic'), ('FONTSIZE', (3,2), (3,2), 10), ]))
2. 合并设置字体和字号
使用FONT规则可以一次性指定字体名和字号,格式为('FONT', (起始列,起始行), (结束列,结束行), 字体名, 字号):
# 替换上面的两个单独规则,合并设置表头样式 ('FONT', (0,0), (-1,0), 'Helvetica-Bold', 12),
注意事项
- ReportLab默认支持的字体包括
Helvetica(常规、加粗、斜体、加粗斜体)、Times-Roman(常规、加粗、斜体、加粗斜体)、Courier等 - 若要使用自定义字体,需要先通过
reportlab.pdfbase.pdfmetrics.registerFont()注册字体文件
内容的提问来源于stack exchange,提问作者Mikhail Le
相关产品推荐
相关产品推荐

