[reportlab-users] Float flowable to bottom of page

Adrian Klaver adrian.klaver at gmail.com
Thu Feb 4 09:58:06 EST 2010


On Thursday 04 February 2010 6:30:52 am Robin Becker wrote:

> On 03/02/2010 21:59, James Lance wrote:



>

> OK this code appears a bit better in that you don't need to work out the

> height of the flowables before doing stuff

>

> #############################################

> from reportlab.platypus.flowables import KeepTogether, Spacer, _listWrapOn,

> _flowableSublist, PageBreak

> from reportlab.platypus.doctemplate import FrameBreak

> class FloatToEnd(KeepTogether):

> '''

> Float some flowables to the end of the current frame

> '''

> def __init__(self,flowables,maxHeight=None,brk='frame'):

> self._content = _flowableSublist(flowables)

> self._maxHeight = maxHeight

> self._state = 0

> self._brk = brk

>

> def wrap(self,aW,aH):

> return aW,aH+1 #force a split

>

> def _makeBreak(self,h):

> if self._brk=='page':

> return PageBreak()

> else:

> return FrameBreak


I have been following along and I think I understand what is going on, except
for above. I know this is test for the type of break, but where does that come
into play? Also should it not be PageBreak?



>

> def split(self,aW,aH):

> dims = []

> W,H = _listWrapOn(self._content,aW,self.canv,dims=dims)

> if self._state==0:

> if H<aH:

> return [Spacer(aW,aH-H)]+self._content

> else:

> S = self

> S._state = 1

> return [self._makeBreak(aH), S]

> else:

> if H>aH: return self._content

> return [Spacer(aW,aH-H)]+self._content

>




--
Adrian Klaver
adrian.klaver at gmail.com


More information about the reportlab-users mailing list