Python 带有reportlab SimpleDoctTemplate和Django的两个不同页面

Python 带有reportlab SimpleDoctTemplate和Django的两个不同页面,python,django,reportlab,Python,Django,Reportlab,我正在使用django并生成以下报告,我需要生成最后一页,但没有页眉或页脚和不同的内容 我正在尝试这样做: def print_example(self): buffer = self.buffer doc = SimpleDocTemplate(buffer, rightMargin=72, leftMargin=72,

我正在使用django并生成以下报告,我需要生成最后一页,但没有页眉或页脚和不同的内容

我正在尝试这样做:

def print_example(self):
    buffer = self.buffer
    doc = SimpleDocTemplate(buffer,
                            rightMargin=72,
                            leftMargin=72,
                            topMargin=72,
                            bottomMargin=72,
                            pagesize=self.pagesize)

    elements = []
    elements.append(Paragraph('Content for all pages'), my_custom_style)
    # ...

    doc.build(elements, onFirstPage=self._header_footer, onLaterPages=self._header_footer,
                  canvasmaker=NumberedCanvas)

    doc2 = SimpleDocTemplate(buffer,
                        rightMargin=72,
                        leftMargin=72,
                        topMargin=72,
                        bottomMargin=72,
                        pagesize=self.pagesize)

    elements2 = []
    elements2.append(Paragraph('Content for the last page only'), my_custom_style)

    doc2.build(elements2, canvasmaker=NumberedCanvas)


    # Get the value of the BytesIO buffer and write it to the response.
    pdf = buffer.getvalue()
    buffer.close()
    return pdf
然后仅显示最后一个内容,而之前的内容消失


如何生成具有不同内容的最后一页?

我认为使用
SimpleDoctTemplate
是不可能的,但您可以通过使用
baseDoctTemplate
并定义自己的模板来实现这一点

基本示例 我已经有一段时间没有使用它了,所以可能会有一些问题,但是如果有些东西不起作用,请发表评论


这些都在中,但很难找到您要查找的内容。

doc
doc2
使用相同的缓冲区。这意味着当您执行
doc2.build
时,您可能正在覆盖缓冲区中的上一个构建。尝试将中的最后一段包含在用于生成的元素列表中,或者在下一次生成之前将生成结果存储在变量中。现在还不清楚您是如何决定何时只显示最后一页的内容的,因此您的修复将取决于此。谢谢您,不过这里有一个拼写错误addPageTemplatesaddPageTemplates@BraulioSoncco什么打字错误?
from reportlab.platypus import PageTemplate, BaseDocTemplate, NextPageTemplate, PageBreak

def headerFooterLayout(canvas, doc):
    canvas.saveState()
    canvas.setPageSize(self.pagesize)
    # add header/footer
    canvas.restoreState()

def emptyLayout(canvas, doc):
    canvas.saveState()
    canvas.setPageSize(self.pagesize)
    canvas.restoreState()

pHeight, pWidth = self.pagesize
myFrame = Frame(0, 0, pHeight, pWidth, id='myFrame')

headerFooterTemplate = PageTemplate(id='headerFooterTemplate',
                                    frames=[myFrame],
                                    onPage=headerFooterLayout)

emptyTemplate = PageTemplate(id='emptyTemplate',
                             frames=[myFrame],
                             onPage=emptyLayout)

elements = []
elements.append(Paragraph('blah', style))
elements.append(NextPageTemplate('emptyTemplate'))
elements.append(PageBreak())
elements.append(Paragraph('last page', style))

doc = BaseDocTemplate(buffer,
                      rightMargin=72,
                      leftMargin=72,
                      topMargin=72,
                      bottomMargin=72)

doc.addPageTemplates([headerFooterTemplate, emptyTemplate])

doc.build(elements)