gpt4 book ai didi

python - 带有 reportlab SimpleDocTemplate 和 Django 的两个不同页面

转载 作者:太空狗 更新时间:2023-10-29 21:05:40 25 4
gpt4 key购买 nike

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

我正在尝试这样做:

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

然后只有最后的内容出现,之前的内容消失。

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

最佳答案

我认为使用 SimpleDocTemplate 是不可能的,但您可以通过使用 BaseDocTemplate 并定义自己的模板来实现。

基本示例

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)

自从我使用它以来已经有一段时间了,所以很可能存在一些问题,但如果有什么不起作用,请发表评论。

这一切都在 user guide 中但很难找到您要找的东西。

关于python - 带有 reportlab SimpleDocTemplate 和 Django 的两个不同页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28844370/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com