我试图在一个页面上包括页眉和页脚。我引用了A multiline(paragraph) footer and header in reportlab,并使用了Jochen和NateB80所述的方法。但只生成页眉,而不生成页脚。
def header(canvas, doc, content):
canvas.saveState()
w, h = content.wrap(doc.width, doc.topMargin)
content.drawOn(canvas, doc.leftMargin, doc.height + doc.topMargin - h)
canvas.restoreState()
def footer(canvas, doc, content):
canvas.saveState()
w, h = content.wrap(doc.width, doc.bottomMargin)
content.drawOn(canvas, doc.leftMargin, h)
canvas.restoreState()
styles = getSampleStyleSheet()
PAGESIZE = pagesizes.portrait(pagesizes.A4)
# PAGESIZE = letter
pdf = SimpleDocTemplate(filename, pagesize=PAGESIZE, leftMargin=2.2*cm, rightMargin=2.2*cm,
topMargin=1.5*cm,bottomMargin=2.5*cm)
frameh = Frame(pdf.leftMargin, pdf.bottomMargin, pdf.width, pdf.height - 2 * cm, id='normal')
header_content = Paragraph("This is a header. testing testing testing ", styles['Normal'])
templateh = PageTemplate(id='test', frames=frameh, onPage=partial(header, content=header_content))
pdf.addPageTemplates([templateh])
framef = Frame(pdf.leftMargin, pdf.bottomMargin, pdf.width, pdf.height, id='normal')
footer_content = Paragraph("This is footer. It goes on every page. ", styles['Normal'])
templatef = PageTemplate(id='test', frames=framef, onPage=partial(footer, content=footer_content))
pdf.addPageTemplates([templatef])
我也尝试了下面的代码,但仍然没有生成页脚。
pdf.addPageTemplates([
PageTemplate(id='footer', frames=[frameh, framef], onPage=partial(header, content=header_content)),
])
发布于 2021-05-26 20:01:30
您需要将header
和footer
组合到一个函数中,并将其放入一个PageTemplate
中
from reportlab.lib.styles import getSampleStyleSheet
from reportlab.lib.units import cm
from reportlab.platypus import SimpleDocTemplate, PageTemplate
from reportlab.platypus.frames import Frame
from reportlab.lib import pagesizes
from reportlab.platypus.paragraph import Paragraph
from functools import partial
def header(canvas, doc, content):
canvas.saveState()
w, h = content.wrap(doc.width, doc.topMargin)
content.drawOn(canvas, doc.leftMargin, doc.height + doc.bottomMargin + doc.topMargin - h)
canvas.restoreState()
def footer(canvas, doc, content):
canvas.saveState()
w, h = content.wrap(doc.width, doc.bottomMargin)
content.drawOn(canvas, doc.leftMargin, h)
canvas.restoreState()
def header_and_footer(canvas, doc, header_content, footer_content):
header(canvas, doc, header_content)
footer(canvas, doc, footer_content)
styles = getSampleStyleSheet()
filename = "out.pdf"
PAGESIZE = pagesizes.portrait(pagesizes.A4)
pdf = SimpleDocTemplate(filename, pagesize=PAGESIZE,
leftMargin = 2.2 * cm,
rightMargin = 2.2 * cm,
topMargin = 1.5 * cm,
bottomMargin = 2.5 * cm)
frame = Frame(pdf.leftMargin, pdf.bottomMargin, pdf.width, pdf.height, id='normal')
header_content = Paragraph("This is a header. testing testing testing ", styles['Normal'])
footer_content = Paragraph("This is a footer. It goes on every page. ", styles['Normal'])
template = PageTemplate(id='test', frames=frame, onPage=partial(header_and_footer, header_content=header_content, footer_content=footer_content))
pdf.addPageTemplates([template])
pdf.build([Paragraph("This is content")])
https://stackoverflow.com/questions/67702808
复制相似问题