为什么ReportLab Table组件中TableStyle的VALIGN属性无法生效?
问题原因
你初始化Canvas时设置了bottomup=False参数,这是VALIGN指令失效、文本与网格线重叠的核心原因。
ReportLab的Platypus系列组件(包括Table)的样式计算逻辑默认适配的是bottomup=True的默认坐标系统,修改该参数会导致垂直方向的位置计算逻辑反转,垂直对齐规则自然无法正常生效。
修复方案
方案1(推荐):使用默认坐标系统
去掉bottomup=False参数,调整drawOn方法的y轴坐标适配左下角原点的默认规则即可:
from reportlab.pdfgen.canvas import Canvas from reportlab.lib import colors from reportlab.lib.units import inch from reportlab.platypus import Table, TableStyle from reportlab.lib.pagesizes import letter from random import random # 移除bottomup=False,使用默认坐标系统 c = Canvas('L:/table_test.pdf', pagesize=letter) width, height = letter c.setFont("Times-Roman", 12) c.setStrokeColorRGB(0, 0, 0) c.setFillColorRGB(0, 0, 0) rand_data = [[round(random(), 2) for x in range(10)] for k in range(10)] t = Table(rand_data) t.setStyle(TableStyle([("BOX", (0,0), (-1, -1), 0, colors.black), ('INNERGRID', (0,0), (-1,-1), 0, colors.black), ('VALIGN',(0,0),(-1,-1),'BOTTOM'), ('ALIGN',(0,0),(-1,-1),'CENTER'), ('FONT',(0,-1), (-1,-1), 'Times-Bold'),])) t.wrapOn(c, 0, 0) # 适配默认坐标:y坐标为页面高度减去你需要的顶部边距 t.drawOn(c, 1*inch, height - 1.5*inch) c.showPage() c.save()
方案2:保留bottomup=False的适配方案
如果业务场景必须使用bottomup=False的坐标系统,可以在初始化Table时手动设置单元格上下内边距,避免文本与网格重叠:
# 初始化Table时添加内边距参数 t = Table(rand_data, topPadding=3, bottomPadding=3)
内容的提问来源于stack exchange,提问作者Dyllan Hankins
相关产品推荐
相关产品推荐

