I am using the code in this source here to create a sample doc. Particularly, this is the entire working code:
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)
Suppose I want to add one extra argument, x_position
, to the callback function foot1
to determine the horizontal location of the footer, as following:
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()
How would I go about passing this additional argument to the callback foot1
in the flowable
class PageTemplate
in this line:
doc.addPageTemplates([PageTemplate(id='OneCol',frames=frameT,onPage=foot1),
PageTemplate(id='TwoCol',frames=[frame1,frame2],onPage=foot2),
])
You can make use of
functools
partial
: