[reportlab-users] question re: paragraph bounding box vertical offset

Matt Folwell mjf at pearson.co.uk
Tue Aug 31 08:58:01 EDT 2010

On 30/08/2010 17:20, Chris Jerdonek wrote:

> On Sun, Aug 29, 2010 at 10:59 AM, Chris Jerdonek

> <chris.jerdonek at gmail.com> wrote:

>> I've been doing some experiments, and it seems like a paragraph's

>> bounding box is never flush with the text it contains. It seems like

>> the box is usually offset upwards a distance equal to a bit more than

>> a third of the "leading" for lines in the paragraph (e.g. when the

>> paragraph style has autoLeading='min').


> A bit more info on this:


> For fontSize = 24, it seems that setting borderPadding = (-7.5, 0,

> 7.5, 0) makes the paragraph text flush with its bounding box. I don't

> know the significance of 7.5 relative to 24.


> After digging into the code, I also found that changing

> paraFontSizeHeightOffset in rl_config.py from its default of 1 to 0

> makes the text flush. So I guess that is the right solution. I can't

> explain the default behavior though.

If you don't use autoLeading, the height of the paragraphs's bounding
box is equal to <leading> * <number of lines>, and the position of the
first line's baseline is <fontsize> below the top of the box. Subsequent
lines have their baseline <leading> below the previous line's.

I think in this case, where you don't have multiple fonts or sizes in
the same paragraph, the effect of autoLeading='min' is just to read the
font metrics and set the leading to <ascent>-<descent>, which is the
maximum height of the actual text.

Setting paraFontSizeHeightOffset = 0 changes the position of the first
line's baseline to be <ascent> below the top of the bounding box. The
disadvantage of this is if you have a table containing both strings and
paragraphs, the text won't line up nicely.


More information about the reportlab-users mailing list