gpt4 book ai didi

仅在 Reportlab 中最后一个数据页上的页脚

转载 作者:行者123 更新时间:2023-12-04 04:53:41 28 4
gpt4 key购买 nike

我正在处理发票,我只想在最后一页(也可以是第一页)添加页脚。

由于表的数据是动态的,我无法计算页数。

现在我正在使用 2 个页面模板,第一页(带有 2 个框架和页脚 1)和下一页(带有 1 个框架和页脚 2)。这在数据填满两页时有效,但当表格只填满 1 页或超过 2 页时,它不再起作用。

我用以下方式定义了页脚:

    footerFrame = Frame(x1=35*mm, y1=20*mm, width=175*mm, height=15*mm)
footerStory = [ Paragraph("Have a nice day.", styles["fancy"]) ]

def footer2(canvas,document):
canvas.saveState()
footerFrame.addFromList(footerStory, canvas)
canvas.restoreState()

是否有更灵活的方式来定义页脚,使其仅显示在表格结束的页面上?

提前致谢。

最佳答案

通过覆盖 ReportLabs Canvas 类,您可以跟踪页面(当然我已经用其他不涉及流动的报告完成了它,但我相信您仍然可以使它工作!)。

由于您使用的是可流动的(段落),您需要知道每个新的 PDF 生成将有多少页(长度是动态部分)。我不是 100% 肯定,但我认为 ReportLab 的 flowable 仍然会调用 Canvas 的“showPage()”方法。因此,您可以执行以下操作:

在伪代码/部分 python 中,我推荐以下内容(未经测试):

class MyFooterCanvas(canvas.Canvas):
def __init__(self, *args, **kwargs):
## Subclass the ReportLab canvas class.
canvas.Canvas.__init__(self, *args, **kwargs)
## Create an empty list to store the saved pages so you can keep track of them.
self._savedPages = []

def showPage(self):
"""Override the showPage method"""

## We are writing our own showPage() method here, so we can keep track of
## what page we are on.
self._savedPages.append(self)
## Start a new page.
self._startPage()

def drawFooter(self):
"""Draws the footer to the page. You can have it do whatever you want here"""
self.drawString(50, 50, "This is my footer, yay me - footer freedom")

def save(self):
"""Saves the entire PDF in one go, a bit costly to do it this way,
but certainly one way to get a footer."""
numPages = len(self._savedPages)

for pages in self._savedPages:
## Finds the last page and when it 'hits', it will call the self.drawFooter() method.
if pages == self._savedPages[-1]:
self.drawFooter()
else:
## If it's not the last page, explicitly pass over it. Just being thorough here.
pass

## And... continue doing whatever canvas.Canvas() normally does when it saves.
canvas.Canvas.save(self)

再次 这是未经测试的,但我认为这会给你你想要的行为。试试看,如果您遇到困难,请告诉我,如果需要,我可以将其中的一些散列出来,但我对其他不可流动的物质也做了同样的方法,过去对我有用。

关于仅在 Reportlab 中最后一个数据页上的页脚,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17062256/

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