我正在使用ReportLab在python中工作.我需要生成PDF格式的报告.数据从数据库中检索并插入表中.
这是简单的代码:
from reportlab.lib import colors
from reportlab.lib.pagesizes import letter
from reportlab.platypus import SimpleDocTemplate,Table,TableStyle
from reportlab.lib.units import inch
doc = SimpleDocTemplate("simple_table.pdf",pagesize=letter)
elements = []
data= [['00','01','02','03','04'],['10','Here is large field retrieve from database','12','13','14'],['20','21','22','23','24'],['30','31','32','Here is second value','34']]
t=Table(data)
columnWidth = 1.9*inch;
for x in range(5):
t._argW[x]= cellWidth
elements.append(t)
doc.build(elements)
有三个问题:
>单元格中的冗长数据在一行中的另一个单元格上重叠.
>当我手动增加列宽时,例如cellWidth = 2.9 * inch;,页面不可见,不从左右滚动
>我不知道如何在单元格中附加数据,这意味着如果数据的大小很大,它应该附加到同一单元格中的下一行.
我是如何解决这个问题的?
最佳答案
对于初学者,我不会像你那样设置列大小.只需传递Table colWidths参数,如下所示:
Table(data,colWidths=[1.9*inch] * 5)
现在你的问题.如果未设置colWidth参数,reportlab将为您执行此操作并根据您的数据对列进行分隔.如果这不是您想要的,您可以将数据封装到Paragraph中,就像Bertrand所说的那样.以下是您的代码的修改示例:
from reportlab.lib import colors
from reportlab.lib.pagesizes import letter
from reportlab.platypus import SimpleDocTemplate,TableStyle,Paragraph
from reportlab.lib.styles import getSampleStyleSheet
from reportlab.lib.units import inch
styles = getSampleStyleSheet()
doc = SimpleDocTemplate("simple_table.pdf",Paragraph('Here is large field retrieve from database',styles['Normal']),'34']]
t=Table(data)
elements.append(t)
doc.build(elements)
我想你会明白这个想法.