[reportlab-users] Using fixed frames for some parts of the page

Jordi Gutiérrez Hermoso jordigh at octave.org
Thu Sep 1 22:24:48 EDT 2011

I'm using a class derived from PageTemplate and defining its frames in
the init portion. However, I want some of those frames to be
pre-filled with stuff. I tried something like

def __init__(self):
frames = list()

## Four frames for the fixed part of the page
frames.append(Frame(5.1*inch, 6.8*inch,
5.5*inch, 0.8*inch, showBoundary=1))
frames.append(Frame(5.1*inch, 5.5*inch,
4.5*inch, 1.2*inch, showBoundary=1))
frames.append(Frame(0.4*inch, 0.4*inch,
5.1*inch, 0.7*inch, showBoundary=1))
frames.append(Frame(5.6*inch, 0.4*inch,
4.6*inch, 0.7*inch, showBoundary=1))

## Three frames for the five flowable graphs
frames.append(Frame(0.4*inch, 5.5*inch,
4.5*inch, 2*inch, showBoundary=1))
frames.append(Frame(0.4*inch, 1.2*inch,
4.5*inch, 3.9*inch, showBoundary=1))
frames.append(Frame(5.6*inch, 1.2*inch,
4.5*inch, 3.9*inch, showBoundary=1))

PageTemplate.__init__(self, "graph_page", frames)

def beforeDrawPage(self, canvas, doc):
story = list()
ss = getSampleStyleSheet()['Normal']
for i in range(0,4):
p = Paragraph("trolololololololol", ss);
self.frames[i].add(p, canvas)
self.frames[i].add(FrameBreak(), canvas)

but this is giving me

handle_pageBegin args=()

because FrameBreak apparently is a flowable that doesn't override this

How can I accomplish what I want? Is it possible to have fixed frames
that are pre-filled? I could manually lay out their contents instead,
but it would be a tad too laborious, and not flexible enough for what
I want to do.

- Jordi G. H.

More information about the reportlab-users mailing list