【问题标题】:Add Header based on Condition根据条件添加标题
【发布时间】:2015-03-23 18:24:13
【问题描述】:

我正在使用 reportlab 生成一个包含两种报告的 PDF 文档。

请假设报告是 r1 和 r2。每份报告可能超过 2-3 页。所以我想从每个报告的第二页添加一个标题,如文本。

例如在 r1 报告页面中添加“r1 报告继续...”并在 r2 报告添加“r2 报告继续...”我该怎么做。

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

例如...

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

【问题讨论】:

    标签: python reportlab


    【解决方案1】:

    最后我设法解决了它。但我不确定它是否是正确的方法。 非常感谢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)
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-31
      • 2023-02-10
      • 1970-01-01
      • 2016-02-03
      • 1970-01-01
      • 1970-01-01
      • 2019-03-18
      • 2016-09-28
      相关资源
      最近更新 更多