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

如何在ReportLab表格的中间单元格之间添加间距?

ReportLab表格添加单元格间距解决方案

问题描述

我希望在ReportLab生成的表格中间单元格之间添加间距,但未在官方文档中找到相关实现方法。我尝试了以下代码,但不确定是否需要拆分表格来达到预期效果。

from reportlab.lib.pagesizes import inch
from reportlab.platypus import Table, SimpleDocTemplate
from reportlab.lib import colors
doc = SimpleDocTemplate("label.pdf", pagesize=(4 * inch, 6 * inch))
content = []
data= [
['Name', 'John Week', 'NO. 1234'],
['5678', ' ', ' '],
['Aisle', '3' , ' '],
['Table', '2', ' '],
['Location', 'Continental', ' '],
['Units moved', '40', ' '],
['Units pending', '10', ' '],
['Total', '50', ' '],
['Number', '1 of 50', ' '],
]
t=Table(data,colWidths=[1.2*inch,1.4*inch,0.8*inch],style=[
('FONTSIZE', (0,0), (-1,-1), 7),
('ALIGN',(0,0),(-1,-1),'CENTER'),
('VALIGN',(0,0),(-1,-1),'MIDDLE'),
('GRID',(1,2),(-2,-1),1,colors.black),
('BOX',(0,1),(0,1),1,colors.black),
('BOX',(2,0),(2,1),1,colors.black),
])
content.append(t)
doc.build(content)
  • 当前效果:表格中间的键值对单元格(如Aisle与3、Table与2等)紧密排列,无明显垂直间距
  • 期望效果:中间列的每个键值对之间存在明显的垂直空隙,分隔开不同的条目

解决方案

不需要拆分表格,以下两种方法可以实现预期效果:

方法一:插入空白行设置间距

在数据列表中需要分隔的行之间插入空白行,然后通过rowHeights设置空白行的高度作为间距,同时只为有效数据行添加边框:

from reportlab.lib.pagesizes import inch
from reportlab.platypus import Table, SimpleDocTemplate
from reportlab.lib import colors

doc = SimpleDocTemplate("label.pdf", pagesize=(4 * inch, 6 * inch))
content = []
data = [
    ['Name', 'John Week', 'NO. 1234'],
    ['5678', ' ', ' '],
    ['Aisle', '3', ' '],
    ['', '', ''],  # 空白行用于间距
    ['Table', '2', ' '],
    ['', '', ''],  # 空白行用于间距
    ['Location', 'Continental', ' '],
    ['', '', ''],  # 空白行用于间距
    ['Units moved', '40', ' '],
    ['', '', ''],  # 空白行用于间距
    ['Units pending', '10', ' '],
    ['', '', ''],  # 空白行用于间距
    ['Total', '50', ' '],
    ['', '', ''],  # 空白行用于间距
    ['Number', '1 of 50', ' '],
]

# 定义行高:前两行0.3英寸,每组数据行0.3英寸+空白行0.1英寸
row_heights = [0.3*inch] * 2
for _ in range(7):
    row_heights.extend([0.3*inch, 0.1*inch])

t = Table(data, colWidths=[1.2*inch, 1.4*inch, 0.8*inch], rowHeights=row_heights, style=[
    ('FONTSIZE', (0,0), (-1,-1), 7),
    ('ALIGN',(0,0),(-1,-1),'CENTER'),
    ('VALIGN',(0,0),(-1,-1),'MIDDLE'),
    # 只为有效数据行添加边框
    ('GRID',(1,2),(-2,2),1,colors.black),
    ('GRID',(1,4),(-2,4),1,colors.black),
    ('GRID',(1,6),(-2,6),1,colors.black),
    ('GRID',(1,8),(-2,8),1,colors.black),
    ('GRID',(1,10),(-2,10),1,colors.black),
    ('GRID',(1,12),(-2,12),1,colors.black),
    ('GRID',(1,14),(-2,14),1,colors.black),
    ('BOX',(0,1),(0,1),1,colors.black),
    ('BOX',(2,0),(2,1),1,colors.black),
])
content.append(t)
doc.build(content)

方法二:调整行高与边框样式

通过增大目标行的高度,仅绘制单元格的上下边框,利用行内空白区域模拟间距,无需添加额外行:

from reportlab.lib.pagesizes import inch
from reportlab.platypus import Table, SimpleDocTemplate
from reportlab.lib import colors

doc = SimpleDocTemplate("label.pdf", pagesize=(4 * inch, 6 * inch))
content = []
data = [
    ['Name', 'John Week', 'NO. 1234'],
    ['5678', ' ', ' '],
    ['Aisle', '3', ' '],
    ['Table', '2', ' '],
    ['Location', 'Continental', ' '],
    ['Units moved', '40', ' '],
    ['Units pending', '10', ' '],
    ['Total', '50', ' '],
    ['Number', '1 of 50', ' '],
]

t = Table(data, colWidths=[1.2*inch, 1.4*inch, 0.8*inch], style=[
    ('FONTSIZE', (0,0), (-1,-1), 7),
    ('ALIGN',(0,0),(-1,-1),'CENTER'),
    ('VALIGN',(0,0),(-1,-1),'MIDDLE'),
    # 增大中间行的高度,预留间距
    ('ROWHEIGHT', (0,2), (-1,8), 0.4*inch),
    # 仅绘制每个单元格的上下边框,左右边框不显示
    ('LINEABOVE', (1,2), (-2,2), 1, colors.black),
    ('LINEBELOW', (1,2), (-2,2), 1, colors.black),
    ('LINEABOVE', (1,3), (-2,3), 1, colors.black),
    ('LINEBELOW', (1,3), (-2,3), 1, colors.black),
    ('LINEABOVE', (1,4), (-2,4), 1, colors.black),
    ('LINEBELOW', (1,4), (-2,4), 1, colors.black),
    ('LINEABOVE', (1,5), (-2,5), 1, colors.black),
    ('LINEBELOW', (1,5), (-2,5), 1, colors.black),
    ('LINEABOVE', (1,6), (-2,6), 1, colors.black),
    ('LINEBELOW', (1,6), (-2,6), 1, colors.black),
    ('LINEABOVE', (1,7), (-2,7), 1, colors.black),
    ('LINEBELOW', (1,7), (-2,7), 1, colors.black),
    ('LINEABOVE', (1,8), (-2,8), 1, colors.black),
    ('LINEBELOW', (1,8), (-2,8), 1, colors.black),
    ('BOX',(0,1),(0,1),1,colors.black),
    ('BOX',(2,0),(2,1),1,colors.black),
])
content.append(t)
doc.build(content)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 11:41:11