首页 新闻 会员 周边 捐助

PDF 上下表格对齐

0
[已解决问题] 解决于 2023-08-07 15:56

用Python reportlab 在PDF中做了两个表格。可因为单元格列数不同,导致上面的表格只有下面的表格一半宽。请问有什么办法让他们上下宽度对齐吗?
我搜了一下,showpage()是可以实现翻页功能的,但他只针对canvas()。
我并没有使用canvas进行绘制,而是直接插入表格

等月亮爬上坡的主页 等月亮爬上坡 | 初学一级 | 园豆:12
提问于:2023-07-28 16:12
< >
分享
最佳答案
0

在Python的reportlab库中,可以使用TableStyleTable类来创建和格式化表格。如果你的两个表格列数不同,可以使用TableStyle中的SPAN属性来调整单元格的宽度,使得上下表格的宽度对齐。

下面是一个示例代码,演示如何在reportlab中创建两个表格并使它们上下宽度对齐:

from reportlab.lib.pagesizes import letter
from reportlab.platypus import SimpleDocTemplate, Table, TableStyle

# 创建一个PDF文档
doc = SimpleDocTemplate("tables.pdf", pagesize=letter)

# 定义表格数据
data1 = [['Header 1', 'Header 2', 'Header 3'],
         ['Cell 1', 'Cell 2', 'Cell 3'],
         ['Cell 4', 'Cell 5', 'Cell 6']]

data2 = [['Header 1', 'Header 2'],
         ['Cell 1', 'Cell 2'],
         ['Cell 3', 'Cell 4'],
         ['Cell 5', 'Cell 6']]

# 创建表格对象
table1 = Table(data1)
table2 = Table(data2)

# 定义表格样式
style1 = TableStyle([
    ('BACKGROUND', (0, 0), (-1, 0), 'lightblue'),  # 设置表头背景颜色
    ('TEXTCOLOR', (0, 0), (-1, 0), 'white'),  # 设置表头文本颜色
    ('ALIGN', (0, 0), (-1, -1), 'CENTER'),  # 设置单元格对齐方式
    ('FONTNAME', (0, 0), (-1, 0), 'Helvetica-Bold'),  # 设置表头字体
    ('FONTSIZE', (0, 0), (-1, 0), 14),  # 设置表头字体大小
    ('BOTTOMPADDING', (0, 0), (-1, 0), 12),  # 设置表头底部边距
    ('BACKGROUND', (0, 1), (-1, -1), 'lightyellow'),  # 设置其他单元格背景颜色
])

style2 = TableStyle([
    ('BACKGROUND', (0, 0), (-1, 0), 'lightblue'),
    ('TEXTCOLOR', (0, 0), (-1, 0), 'white'),
    ('ALIGN', (0, 0), (-1, -1), 'CENTER'),
    ('FONTNAME', (0, 0), (-1, 0), 'Helvetica-Bold'),
    ('FONTSIZE', (0, 0), (-1, 0), 14),
    ('BOTTOMPADDING', (0, 0), (-1, 0), 12),
    ('BACKGROUND', (0, 1), (-1, -1), 'lightyellow'),
    ('SPAN', (2, 0), (2, 1)),  # 跨越两行,调整单元格宽度
])

# 应用样式到表格
table1.setStyle(style1)
table2.setStyle(style2)

# 构建元素列表
elements = [table1, table2]

# 将元素列表添加到PDF文档
doc.build(elements)

在上面的示例中,我们创建了两个表格table1table2,并为它们定义了不同的数据和样式。注意style2中使用了SPAN属性来跨越两行,从而调整单元格的宽度,使得上下表格的宽度对齐。

你可以根据自己的需求修改表格数据、样式和其他属性。

奖励园豆:5
lanedm | 老鸟四级 |园豆:2396 | 2023-07-30 21:12

好的,收到。那请问,当前表格输入完了,第二份表格我不希望输出到下方空间,而是新建一页继续输出。我该怎么实现PDF翻页的功能

等月亮爬上坡 | 园豆:12 (初学一级) | 2023-07-31 08:49

感谢你的答复

等月亮爬上坡 | 园豆:12 (初学一级) | 2023-07-31 08:50
其他回答(1)
0

在使用Python的reportlab库绘制PDF中的两个表格时,确保它们在上下方向上具有相同的宽度对齐可以通过以下方法实现:

获取表格宽度:首先,您需要获取两个表格的宽度,以便找出它们之间的较大宽度。

设置表格宽度:将两个表格的宽度设置为较大的宽度,以保持它们的上下对齐。

下面是一个简单的示例代码,演示如何实现上述功能:

python
Copy code
from reportlab.platypus import SimpleDocTemplate, Table, TableStyle
from reportlab.lib import colors

def create_pdf():
# 创建PDF文档
doc = SimpleDocTemplate("aligned_tables.pdf")
elements = []

# 假设你已经有两个表格data1和data2,这里只是示例数据
data1 = [
    ['A1', 'A2', 'A3'],
    ['B1', 'B2'],
    ['C1', 'C2', 'C3', 'C4'],
]

data2 = [
    ['X1', 'X2', 'X3', 'X4'],
    ['Y1', 'Y2', 'Y3'],
    ['Z1', 'Z2', 'Z3'],
]

# 计算两个表格的宽度
max_width = max(sum(len(row) for row in data1), sum(len(row) for row in data2))

# 设置两个表格的宽度为较大的宽度
data1_widths = [doc.width / max_width] * max_width
data2_widths = [doc.width / max_width] * max_width

# 创建表格
table1 = Table(data1, colWidths=data1_widths)
table2 = Table(data2, colWidths=data2_widths)

# 设置表格样式(仅作为示例,您可以根据需要调整样式)
style = TableStyle([
    ('BACKGROUND', (0, 0), (-1, 0), colors.gray),  # 设置表头背景颜色为灰色
    ('TEXTCOLOR', (0, 0), (-1, 0), colors.whitesmoke),  # 设置表头文本颜色为白色
    ('ALIGN', (0, 0), (-1, -1), 'CENTER'),  # 设置单元格文本居中对齐
    ('INNERGRID', (0, 0), (-1, -1), 0.25, colors.black),  # 设置内部网格线
    ('BOX', (0, 0), (-1, -1), 0.25, colors.black),  # 设置单元格边框
])

# 应用样式到表格
table1.setStyle(style)
table2.setStyle(style)

# 将表格添加到文档中
elements.append(table1)
elements.append(table2)

# 将所有元素添加到文档并生成PDF
doc.build(elements)

if name == "main":
create_pdf()
在上面的代码中,我们首先获取了两个表格data1和data2的宽度,然后将它们的宽度设置为较大的宽度,从而确保它们在上下方向上对齐。注意,这里使用了colWidths参数来设置表格的列宽度。您可以根据实际情况调整表格的样式和宽度设置。运行该代码后,会生成一个名为"aligned_tables.pdf"的PDF文件,其中包含两个上下宽度对齐的表格。

Technologyforgood | 园豆:7535 (大侠五级) | 2023-07-30 21:32

好的,收到。那请问,当前表格输入完了,第二份表格我不希望输出到下方空间,而是新建一页继续输出。我该怎么实现PDF翻页的功能

支持(0) 反对(0) 等月亮爬上坡 | 园豆:12 (初学一级) | 2023-07-31 08:50

感谢你的答复

支持(0) 反对(0) 等月亮爬上坡 | 园豆:12 (初学一级) | 2023-07-31 08:53
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册