代码之家  ›  专栏  ›  技术社区  ›  Adam Luchjenbroers

Platypus-在页面模板中使用多个框架

  •  1
  • Adam Luchjenbroers  · 技术社区  · 8 年前

    我正在为基于Django的网站编写一些PDF生成代码,使用ReportLab/Platypus生成PDF。

    我已经对PageTemplate进行了子类化,这样我就可以进行一些一致的页面修剪,并包含了生成多列布局的代码,以满足需求。我目前已启用showBoundary=1进行调试。

    然而,当我渲染两列布局时,我只看到第一个帧边界出现。可能出了什么问题?

    class ReportPageTemplate(PageTemplate):
        def __init__(self, id='basic', columns=1, pagesize=A4, leftMargin=(2*cm), bottomMargin=(2.1*cm), colmargin=(0.5*cm)):
            (right, top) = pagesize
            right -= leftMargin
            top -= bottomMargin
    
            height = top - bottomMargin
            width = (right - leftMargin)
            # Subtract out blank space between columns
            colwidth = (width - ((columns - 1) * colmargin)) / columns
    
            frames = []
            for col in range(columns):
                left = leftMargin + (col * (colwidth + colmargin))
                frames.append(Frame(left, bottomMargin, colwidth, height, showBoundary=1))
    
            PageTemplate.__init__(self, id=id, frames=frames, pagesize=pagesize)
    
        def beforeDrawPage(self, canvas, doc):
            print self.id
            (width, height) = canvas._pagesize
            canvas.setLineWidth(0.2 * cm)
            canvas.line(0.5*cm, height - (2*cm), width - (0.5*cm), height - (2*cm))
            canvas.line(0.5*cm, (2*cm), width - (0.5*cm), (2*cm))
    
    1 回复  |  直到 8 年前
        1
  •  3
  •   Adam Luchjenbroers    8 年前

    啊,我觉得很愚蠢。

    仅当第一帧填满时,才会渲染第二帧。出于测试目的,我需要包含一个FrameBreak对象,以强制它绘制两列。

    代码实际上已经在工作了。

    推荐文章