根据条件添加标题

时间:2015-03-23 05:53:33

标签: python reportlab

我使用reportlab生成包含两种类型报告的PDF文档。

请假设报告为r1和r2。每份报告中可能有2-3页以上。所以我想在每个报告的第二页添加一个类似文本的标题。

例如在r1报告中,页面添加" r1报告继续..."并在页面中 r2报告添加" r2报告继续......"我怎么能这样做。

目前我正在创建元素列表并将其传递给模板构建函数。所以我无法确定正在处理哪个报告。

例如......

elements = []
elements.append(r1)
...
.....
elements.append(r2)
doc.build(elements)

1 个答案:

答案 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)

请注意,我只是复制并粘贴部分代码......