在python中返回包含flowables的列表

时间:2014-02-02 09:06:13

标签: python list function pdf reportlab

我有一段代码生成一些数据(段落和表格),最终会进入pdf。我正在使用python中的reportlab生成此pdf。

现在,我必须在10个文件上运行此功能。结果应该最终进入一个pdf文档。一种方法是,在循环中运行此函数10次,使用reportlib生成10个pdf,然后使用pyPdf组合它们。我不喜欢这个!

相反,我将函数列表返回到我的main函数中,并在每个循环结束时将其附加到列表中。然后我尝试在main函数中构建最终的pdf,但它似乎不起作用。这是main中的代码:

doc = SimpleDocTemplate("%s/taxonomy_report.pdf" %(path), pagesize=letter)
final_table = [] 
for folders in range(0,11):
     a=taxonomy_function(path,folders)
     final_table.append(a)

 doc.build(final_table)

现在,在函数taxonomy_function中,我有以下内容..

from reportlab.lib.pagesizes import letter
from reportlab.platypus import SimpleDocTemplate, Table, TableStyle, Paragraph, Spacer
from reportlab.lib.styles import getSampleStyleSheet

elements = [] #Keep appending whatever you want to add to the pdf

styleH = styles["Heading2"]
p = Paragraph('''Multiple-bit error/fault classification''', styleH)
elements.append(p)
t1=Table(data_FF)
elements.append(t1)
return elements

现在,在main函数中,如果我检查final_table的内容,它就是空的!也就是说,每次调用taxonomy_function()时,变量'a'在main()中都包含一个空列表。

Final elements is [[], [], [], [], [], None, [], [], [], [], []]

好的,不知怎的,返回的问题已经排序了.. 现在,我不能做doc.build(final_table)。但是,我可以做doc.build(final_table [0]),doc.build(final_table 1)等等,如果我做doc.build()在循环中,它将重写以前的数据,我将只留下最后一个条目。有没有办法使用doc.build(final_table)一次性将最终表格中的列表列表写入pdf?我这样做时会出错。

File "python_taxonomy_all_examples.py", line 51, in <module>
    doc.build(final_table)
  File "/usr/lib/python2.7/dist-packages/reportlab/platypus/doctemplate.py", line 1117, in build
    BaseDocTemplate.build(self,flowables, canvasmaker=canvasmaker)
  File "/usr/lib/python2.7/dist-packages/reportlab/platypus/doctemplate.py", line 880, in build
    self.handle_flowable(flowables)

1 个答案:

答案 0 :(得分:0)

如果我看到这一点你正在将嵌套列表传递给doc.build()。这可能是问题所在。不必将列表附加到另一个列表中,而是必须将它们连接起来:

final_table.append(a)更改为final_table = final_table + a

你应该有一个完整的故事,可以通过一次调用doc.build()

来构建