在PageTemp中使用多个帧的鸭嘴兽

2024-06-16 13:46:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在为一个基于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))

Tags: columnsselfrightidframestopcmwidth
1条回答
网友
1楼 · 发布于 2024-06-16 13:46:58

啊,我觉得自己很傻。在

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

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

相关问题 更多 >