[reportlab-users] How to pin a flowable/summary chunk at the bottom of a page?

Robin Becker robin at reportlab.com
Tue May 3 12:48:32 EDT 2005

Eric Hochmeister wrote:
> Hi Robin,
>>The final pinned flowable is the key. There are a some special cases.
>>Suppose there is room for the text part of the pin in the current frame then
>>just ensure it uses all the space and draws itself at the right place. If there
>>is not room for the text then presumably you use up all the space on and then
>>you're back in the first case.
> So use a custom flowable then... ?  Does a flowable know how much
> space it needs before its drawn or do I just have to know the size of
> the text contained in the custom pinned flowable?  Just trying to wrap
> my head around how to figure out how to determine how much space the
> flowable needs to use up to get itself to the bottom and still leave
> enough room to contain the summary contents.
> Thanks,
> Eric
..... effectively the wrap method will be called with the available space.
The wrap method needs to determine the height of the summary anyhow.
If we base the summary on a Paragraph the following might be a start;
it is completely untested and will be sensitive to spaceBefore/After.

from reportlab.platypus.paragraph import Paragraph
from reportlab.platypus.doctemplate import LayoutError

class PinFlowable(Paragraph):
	def __init__(self,*args,**kw):
		self._wrapped = 0

	def wrap(self, availWidth, availHeight):
		w, h = Paragraph.wrap(self,availWidth,availHeight)
		if h>availHeight:
			if self._wrapped:
				raise LayoutError('PinFlowable not making any progress')
			self._wrapped = 1
			return w, h
		self._extraSpace = availHeight - h
		return w, availHeight

	def split(self,availWidth,availHeight):
		return []

	def drawOn(self, canvas, x, y, _sW=0):

Robin Becker

More information about the reportlab-users mailing list