[reportlab-users] Font size, baseline and typography stuff

Robin Becker robin at reportlab.com
Fri Aug 5 12:37:55 EDT 2011

On 05/08/2011 15:44, Andy Robinson wrote:

> On 5 August 2011 14:34, Dinu Gherman<gherman at darwin.in-berlin.de> wrote:

>> I'm just not sure I would expect this to be inside the

>> charts package, though, but maybe in pdfmetrics...



> It happened this way because our charts/shapes package already had a

> 'getBounds' operation - we needed that to dynamically resize charts to

> be just big enough to contain their text labels and titles, and

> sometimes to make sure labels don't overlap - and when you want to

> define that for a text label, Robin realised he could get the paths

> out of freetype2. It doesn't really have anything to do with PDF and

> applies equally when making a bitmap.


> You're right, it would probably make sense to have an equivalent

> function available within pdfmetrics for the many users who don't

> delve into the chart code.



for what it's worth I have fixed (hopefully) Path.getBounds so it doesn't use
the simplistic assumption from the original code.

Testing using some rather extreme paths eg

> from reportlab.graphics.shapes import Drawing, _DrawingEditorMixin, definePath, String, Rect

> from reportlab.lib.colors import red, blue, green


> class TPathBounds_002(_DrawingEditorMixin,Drawing):

> def __init__(self,width=400,height=200,*args,**kw):

> Drawing.__init__(self,width,height,*args,**kw)

> self._add(self,definePath([('moveTo',10,100),('curveTo',70,160,160,40,100,100)],strokeWidth=1,strokeColor=red),name='p',validate=None,desc=None)

> sb = self.p.getBounds()

> self._add(self,String(10,self.height-12,'bounds: '+str(sb),fillColor=blue),name=None,validate=None,desc=None)

> self._add(self,Rect(sb[0],sb[1],sb[2]-sb[0],sb[3]-sb[1],strokeColor=blue,strokeDashArray=(1,1),fillColor=None),name='b',validate=None,desc=None)


> if __name__=="__main__": #NORUNTESTS

> TPathBounds_002().save(formats=['pdf'],outDir='.',fnRoot=None)

revealed an error in renderPM (caused by the old version of libart_lgpl); the
bounds were good, but the _renderPM bpath to vpath conversion left out the
extreme point.

It should now be fixed.
Robin Becker

More information about the reportlab-users mailing list