首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为reportlab PageTemplate的回调函数添加参数

为reportlab PageTemplate的回调函数添加参数
EN

Stack Overflow用户
提问于 2022-05-22 09:19:07
回答 1查看 69关注 0票数 2

我正在使用这个源这里中的代码来创建一个示例文档。特别是,这是整个工作代码:

代码语言:javascript
运行
复制
import os
from reportlab.platypus import BaseDocTemplate, Frame, Paragraph, NextPageTemplate, PageBreak, PageTemplate
from reportlab.lib.units import inch
from reportlab.lib.styles import getSampleStyleSheet


styles=getSampleStyleSheet()
Elements=[]

doc = BaseDocTemplate('basedoc.pdf',showBoundary=1)

def foot1(canvas,doc):
    canvas.saveState()
    canvas.setFont('Times-Roman',19)
    canvas.drawString(inch, 0.75 * inch, "Page %d" % doc.page)
    canvas.restoreState()
def foot2(canvas,doc):
    canvas.saveState()
    canvas.setFont('Times-Roman',9)
    canvas.drawString(inch, 0.75 * inch, "Page %d" % doc.page)
    canvas.restoreState()

#normal frame as for SimpleFlowDocument
frameT = Frame(doc.leftMargin, doc.bottomMargin, doc.width, doc.height, id='normal')

#Two Columns
frame1 = Frame(doc.leftMargin, doc.bottomMargin, doc.width/2-6, doc.height, id='col1')
frame2 = Frame(doc.leftMargin+doc.width/2+6, doc.bottomMargin, doc.width/2-6,
               doc.height, id='col2')

Elements.append(Paragraph("Frame one column, "*500,styles['Normal']))
Elements.append(NextPageTemplate('TwoCol'))
Elements.append(PageBreak())
Elements.append(Paragraph("Frame two columns,  "*500,styles['Normal']))
Elements.append(NextPageTemplate('OneCol'))
Elements.append(PageBreak())
Elements.append(Paragraph("Une colonne",styles['Normal']))
doc.addPageTemplates([PageTemplate(id='OneCol',frames=frameT,onPage=foot1),
                      
                      PageTemplate(id='TwoCol',frames=[frame1,frame2],onPage=foot2),
                      ])
#start the construction of the pdf
doc.build(Elements)

假设我想将一个额外的参数x_position添加到回调函数foot1中,以确定页脚的水平位置,如下所示:

代码语言:javascript
运行
复制
def foot1(canvas,doc, x_position):  # x_position is in inch
    canvas.saveState()
    canvas.setFont('Times-Roman',19)
    canvas.drawString(x_position, 0.75 * inch, "Page %d" % doc.page)
    canvas.restoreState()

如何将这个附加参数传递给该行中的flowablePageTemplate中的回调PageTemplate

代码语言:javascript
运行
复制
doc.addPageTemplates([PageTemplate(id='OneCol',frames=frameT,onPage=foot1),                      
                      PageTemplate(id='TwoCol',frames=[frame1,frame2],onPage=foot2),
                      ])
EN

Stack Overflow用户

发布于 2022-09-20 12:02:15

你可以利用partial

代码语言:javascript
运行
复制
from functools import partial

doc.addPageTemplates([PageTemplate(id='OneCol',frames=frameT,onPage=partial(foot1, x_position=2)),                      
                      PageTemplate(id='TwoCol',frames=[frame1,frame2],onPage=foot2),
                      ])
票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72336237

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档