我使用reportlab生成包含两种类型报告的PDF文档。
请假设报告为r1和r2。每份报告中可能有2-3页以上。所以我想在每个报告的第二页添加一个类似文本的标题。
例如在r1报告中,页面添加" r1报告继续..."并在页面中 r2报告添加" r2报告继续......"我怎么能这样做。
目前我正在创建元素列表并将其传递给模板构建函数。所以我无法确定正在处理哪个报告。
例如......
elements = []
elements.append(r1)
...
.....
elements.append(r2)
doc.build(elements)
答案 0 :(得分:0)
最后我设法解决了这个问题。但我不确定它是否是一种正确的方法。 非常感谢grc在我创建解决方案的地方提供了this答案。
在grc的回答中,我创建了一个afterFlowable回调函数。
def afterFlowable(self,flowable):
if hasattr(flowable, 'cReport'):
cReport = getattr(flowable, 'cReport')
self.cReport = cReport
然后,在为r1报告添加数据时,将创建自定义属性
elements.append(PageBreak())
elements[-1].cReport = 'r1'
为r2报告添加数据时的相同代码
elements.append(PageBreak())
elements[-1].cReport = 'r2'
然后在模板的onPage函数中
template = PageTemplate(id='test', frames=frame, onPage=headerAndFooter)
def headerAndFooter(canvas, doc):
canvas.saveState()
if cReport == 'r1':
Ph = Paragraph("""<para>r1 Report (continued)</para>""",styleH5)
w, h = Ph.wrap(doc.width, doc.topMargin)
Ph.drawOn(canvas, doc.leftMargin, doc.height+doc.topMargin)
请注意,我只是复制并粘贴部分代码......