我有一段代码生成一些数据(段落和表格),最终会进入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)
答案 0 :(得分:0)
如果我看到这一点你正在将嵌套列表传递给doc.build()
。这可能是问题所在。不必将列表附加到另一个列表中,而是必须将它们连接起来:
将final_table.append(a)
更改为final_table = final_table + a
你应该有一个完整的故事,可以通过一次调用doc.build()