在reportlab中动态重复页面模板
Dynamically repeat page template in reportlab
我正在尝试使用 python 中的 reportlab 生成 pdf 报告,我有一个大的 table 分为几页。问题是它覆盖了我的页脚,我想用页面模板中的框架来限制它。
考虑到我不知道 table 的长度或页面中的行数,我如何在每次生成新页面时使用 tableTemplate
?
这是我的代码:
def report_pdf(self):
buffer = self.buffer
doc = SimpleDocTemplate(buffer,
rightMargin=30,
leftMargin=30,
topMargin=30,
bottomMargin=0,
pagesize=self.pagesize)
elements = []
table_data = gather_table_data()
long_table = Table(table_data)
elements.append(long_table)
frameMain = Frame(x1=doc.leftMargin,
y1=doc.topMargin,
width=doc.width,
height=doc.height)
tableFrame = Frame(x1=doc.leftMargin,
y1=doc.topMargin,
width=doc.width,
height=doc.height-50,
showBoundary=1)
mainTemplate = PageTemplate(id='main', frames=[frameMain])
tableTemplate = PageTemplate(id='table', frames=[tableFrame])
doc.addPageTemplates([mainTemplate, tableTemplate])
doc.build(elements, onFirstPage=footer, onLaterPages=footer)
pdf = buffer.getvalue()
buffer.close()
return pdf
我还没有找到每次生成新页面时都重复模板的方法,但我通过增加文档的 bottomMargin
并将页脚放在边距之外解决了这个问题。考虑到页脚直接绘制在文档的 canvas 上,它不受页边距的影响,而 table 作为可流动的,受到文档页边距的限制,因此阻止它覆盖页脚。
我正在尝试使用 python 中的 reportlab 生成 pdf 报告,我有一个大的 table 分为几页。问题是它覆盖了我的页脚,我想用页面模板中的框架来限制它。
考虑到我不知道 table 的长度或页面中的行数,我如何在每次生成新页面时使用 tableTemplate
?
这是我的代码:
def report_pdf(self):
buffer = self.buffer
doc = SimpleDocTemplate(buffer,
rightMargin=30,
leftMargin=30,
topMargin=30,
bottomMargin=0,
pagesize=self.pagesize)
elements = []
table_data = gather_table_data()
long_table = Table(table_data)
elements.append(long_table)
frameMain = Frame(x1=doc.leftMargin,
y1=doc.topMargin,
width=doc.width,
height=doc.height)
tableFrame = Frame(x1=doc.leftMargin,
y1=doc.topMargin,
width=doc.width,
height=doc.height-50,
showBoundary=1)
mainTemplate = PageTemplate(id='main', frames=[frameMain])
tableTemplate = PageTemplate(id='table', frames=[tableFrame])
doc.addPageTemplates([mainTemplate, tableTemplate])
doc.build(elements, onFirstPage=footer, onLaterPages=footer)
pdf = buffer.getvalue()
buffer.close()
return pdf
我还没有找到每次生成新页面时都重复模板的方法,但我通过增加文档的 bottomMargin
并将页脚放在边距之外解决了这个问题。考虑到页脚直接绘制在文档的 canvas 上,它不受页边距的影响,而 table 作为可流动的,受到文档页边距的限制,因此阻止它覆盖页脚。