1

ReportLab / Platypus を使用して PDF を生成する Django ベースの Web サイト用の PDF 生成コードの作成に取り組んでいます。

PageTemplate をサブクラス化したので、一定のページ トリムを作成し、要件に合わせて複数列のレイアウトを生成するコードを含めました。現在、デバッグのために showBoundary=1 をオンにしています。

ただし、2 列のレイアウトをレンダリングすると、最初のフレーム境界のみが表示されます。何がうまくいかないのですか?

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))
4

1 に答える 1

3

ああ、私はばかげていると感じます。

2 番目のフレームは、最初のフレームがいっぱいになった場合にのみレンダリングされます。テスト目的で、FrameBreak オブジェクトを含めて、両方の列を強制的に描画する必要がありました。

コードは実際にはすでに機能しています。

于 2017-01-11T08:27:43.557 に答える