如何将内容继续到Reportlabs的下一页-Python
我正在创建一个表,根据接收到的数据,表的大小可以是小或小.
I'm making a table, where the table can be either small or large depending upon the data being received.
虽然我提供了一个庞大的数据集,但我注意到尽管正在制作表格,但是我的所有内容都没有,因为它只占一页.
While I was providing a huge data set, I noticed that although the table is being made but my all content is not there, since it occupies only 1 page for that.
所以,我的问题是如何在不使用showpage()
的情况下将内容继续到Reportlabs的下一页,因为我无法知道何时点击showpage
或何时不点击,因为该内容是动态生成的?
So, my question is How do I continue a content to a next page in Reportlabs without using showpage()
, since I wont be able to know when to hit showpage
or when not, because the content is being dynamically generated?
代码
def plot_table(pie_labels, pie_data, city_devices):
styles = getSampleStyleSheet()
styleN = styles["BodyText"]
styleN.alignment = TA_LEFT
styleBH = styles["Normal"]
styleBH.alignment = TA_CENTER
city_name = Paragraph('''<b>City Name</b>''', styleBH)
meter_name = Paragraph('''<b>Meter Name</b>''', styleBH)
consumption = Paragraph('''<b>Total Consumption</b>''', styleBH)
data= [[city_name, meter_name, consumption]]
# Texts
for label,record,device in zip(pie_labels,pie_data,city_devices):
label = Paragraph(label, styleN)
record = Paragraph(str(record), styleN)
device_list = ""
for d in device:
device_list += str(d) + ", "
device = Paragraph(device_list, styleN)
data.append([label, device, record])
table = Table(data, colWidths=[5.05 * cm, 5.7 * cm, 3* cm ])
table.setStyle(TableStyle([('INNERGRID', (0,0), (-1,-1), 0.25, colors.black),
('BOX', (0,0), (-1,-1), 0.25, colors.black),
]))
return table
table = plot_table(pie_labels, pie_data, city_devices)
table.wrapOn(the_canvas, width, height)
table.drawOn(the_canvas, *coord(2, 59.6, cm))
我建议使用reportlab的更高级的原语,即文档模板,框架和可流动对象.这样,您就可以拆分成免费". 相关问题的一个例子
I'd advice using the more high-level primitives of reportlab, that is, document templates, frames and flowables. That way, you get splitting for "free". An example from the related questions