【问题标题】:python Reportlab, add two tables side by side in pdfpython Reportlab,在pdf中并排添加两个表
【发布时间】:2019-10-24 00:13:30
【问题描述】:

我正在尝试使用 python reportlab 在 pdf 中插入两个表格。 第二个表中的行数少于第一个表。
但是两个表的水平位置不匹配。 第二张桌子上出现了一些空白。

我怎样才能删除这个空间,以便两个表格水平对齐?

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

doc = SimpleDocTemplate("simple_table_grid.pdf", pagesize=letter)

elements = []

data= [['00', '01', '02', '03', '04'],
   ['10', '11', '12', '13', '14'],
   ['20', '21', '22', '23', '24'],
   ['30', '31', '32', '33', '34']]

data1= [['00', '01', '02', '03', '04'],
   ['10', '11', '12', '13', '14']]

t1=Table(data,5*[0.4*inch], 4*[0.4*inch],hAlign='LEFT')

t1.setStyle(TableStyle([('ALIGN',(1,1),(-2,-2),'RIGHT'),
                   ('TEXTCOLOR',(1,1),(-2,-2),colors.red),
                   ('VALIGN',(0,0),(0,-1),'TOP'),
                   ('TEXTCOLOR',(0,0),(0,-1),colors.blue),
                   ('ALIGN',(0,-1),(-1,-1),'CENTER'),
                   ('VALIGN',(0,-1),(-1,-1),'MIDDLE'),
                   ('TEXTCOLOR',(0,-1),(-1,-1),colors.green),
                   ('INNERGRID', (0,0), (-1,-1), 0.25, colors.black),
                   ('BOX', (0,0), (-1,-1), 0.25, colors.black),
                   ]))

t2=Table(data1,5*[0.4*inch], 2*[0.4*inch],hAlign='RIGHT')

t2.setStyle(TableStyle([('ALIGN',(1,1),(-2,-2),'RIGHT'),
                   ('TEXTCOLOR',(1,1),(-2,-2),colors.red),
                   ('VALIGN',(0,0),(0,-1),'TOP'),
                   ('TEXTCOLOR',(0,0),(0,-1),colors.blue),
                   ('ALIGN',(0,-1),(-1,-1),'CENTER'),
                   ('VALIGN',(0,-1),(-1,-1),'MIDDLE'),
                   ('TEXTCOLOR',(0,-1),(-1,-1),colors.green),
                   ('INNERGRID', (0,0), (-1,-1), 0.25, colors.black),
                   ('BOX', (0,0), (-1,-1), 0.25, colors.black),
                   ]))
t = [[t1,t2]]

temp = Table(t)                  

elements.append(temp)

doc.build(elements) 

【问题讨论】:

  • 我不清楚你想要什么。您是否希望 t1 和 t2 在同一行(t1 在左侧,t2 在右侧)并且您关心 t1 和 t2 之间的空间?或者你想要 t1 在顶部和 t2 在底部?在这种情况下,“水平对齐”对我来说更有意义。
  • 是的,我希望 t1 和 t2 在同一行。但是发生了什么,当 t2 包含的行数少于 t1 时,t1 和 t2 不是从同一行开始。
  • 好的,那么你想垂直对齐 t1 和 t2,对吧?您可以通过将样式 TableStyle([('VALIGN', (0,0), (-1,-1), 'TOP')]) 添加到表 temp 来将它们对齐在顶行。

标签: python-2.7 reportlab


【解决方案1】:

要水平放置 2 个表格,我认为使用 reportLab 是不可能的。 我有同样的问题,我找到了解决它的方法。 我只创建了一个表来代表两个表,并且我隐藏了两个表之间的网格,所以它看起来像是 2 个表。使用该解决方案,您可以按照您想要的方式放置 2 张桌子。 我的 setStyle() 看起来是这样的

        t.setStyle(TableStyle([
                           ('GRID', (0,0), (4,1), 0.5, colors.black),
                            ('ALIGN',(1,1),(-1,-1),'CENTER'),
                            ('BACKGROUND',(0,0),(4,0),colors.lightgrey),
                            ('BACKGROUND',(3,3),(3,5),colors.lightgrey),
                            ('BOX',(3,3),(3,5),0.5,colors.black),
                            ('BOX',(4,3),(4,5),0.5,colors.black)]))

【讨论】:

    【解决方案2】:

    嗯,有一个解决方法。 您可以将表添加到另一个具有两列和单行的表中。 像这样的..

        data= [(t1, t2)]
        t = Table(data, [250, 250])
        t.setStyle(TableStyle([
                   ('VALIGN',(0,0),(-1,-1),'TOP')
                   ]))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-18
      • 1970-01-01
      相关资源
      最近更新 更多