[reportlab-users] UTF8 Encoded Strings

Tim Roberts timr at probo.com
Wed Oct 31 15:20:11 EDT 2007

Rich Shepard wrote:


> Attached is the totally re-written script to produce the page without

> using platypus, just textobjects and the canvas. It works, but it looks

> downright ugly to me, probably because of my inexperience in writing

> it more

> effectively and cleanly.


> Since it does work, I'd really appreciate feedback on how to write it

> better. That is, more cleanly, efficiently, and without having to find

> the

> current cursor position and use that for each new part to be written.

Printing is a tedious task, and there's just no way around it. We all
get spoiled by programs like Word and OpenOffice that let us lay out
text free-form, but when it comes to programmatically sticking pixels on
paper, someone had to keep track of where every character and line gets
placed. Personally, I like it that way. ;)

I often create my own version of the textobject class that keeps track
of the things that need tracking. I will usually have TextOut, which
draws a string and remembers where it ended, and TextOutLine that draws
a string and moves the cursor to the start of the next line. I
sometimes have Indent and Dedent methods to temporarily bump the left
margin. I do an awful lot of business forms in ReportLab, so I have
some versions that do automatic dot fill or underline fill for tables.
I have some versions that insert check boxes. I have some versions that
automatically underline the string.

I try to collect each section of the page into a function. Then I'll
have something like:

def drawLeftHandSide( self, left, top, width, height ):
# Each piece returns its "bottom". That becomes the next "top".
top = self.drawCorporateLogo( left, top, width, height )
top -= inch / 4
top = self.drawTopSummary( left, top, width, height )

def drawRightHandSide( canvas, left, top, width, height ):

def drawFrontPage( self, left, top, width, height ):
self.drawLeftHandSide( left, top, width/2, height )
self.drawRightHandSide( left+width/2, top, width/2, height )

Tim Roberts, timr at probo.com
Providenza & Boekelheide, Inc.

More information about the reportlab-users mailing list