[reportlab-users] Can a pagetemplate modify its frames?
Robin Becker
robin at reportlab.com
Thu Aug 28 11:36:59 EDT 2008
Roberto Alsina wrote:
> On Thursday 28 August 2008 11:54:58 Roberto Alsina wrote:
>> I am trying to implement a "smart page" PageTemplate which does things like
>> adjust margins and show/hide headers and footers depending on the content.
>>
>> Can I modify self.frames from a PageTemplate?
>>
>> I tried this to implement a "gutter margin" with no visible effect:
>>
>> def beforePage(self,canv,doc):
>
> Make that beforeDrawPage (BTW, the manual is wrong here ;-)
>
>> print self.frames[0].__dict__
>>
>> # Adjust gutter margins
>> if doc.page%2: #Odd page
>> gm=self.gm
>> else: # Even page
>> gm=-self.gm
>>
>> print gm
>>
>> for f in self.frames:
>> f._x+=gm
>> f._x1+=gm
>> f._x2+=gm
>>
>> The values change but the frame doesn't move :-)
>
you're messing with bad stuff here. These classes were created before python had
properties etc etc so I think you'll need either to overwrite the frame with a
new instance or to adjust the external properties x1, y1 etc etc and force the
geometry to recalculate. If you do
f.a=z where a is one of ('x1', 'y1', 'width', 'height', 'leftPadding',
'bottomPadding', 'rightPadding', 'topPadding') then the underlying _a variable
is actually set and the frame recalculates its geometry.
According to Andy the right way to do this sort of odd/even page stuff is to use
a pagetemplate cycle basically need to use
NextPageTemplate(['left','right'])
PageBreak()
in the story and then we iterate left & right templates.
--
Robin Becker
More information about the reportlab-users
mailing list