[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