[reportlab-users] split string by width.

Tim Roberts timr at probo.com
Fri Nov 5 16:26:25 EDT 2010


Juan Efren Castillo wrote:

> I need to print a single long string.

>

> reportlab.lib.utils.SimpleSplit works splitting by blank spaces, but

> this string has no spaces

>

> My solution was to divide string into "chunks"

>

> y = 0

> for t in chunks(r, MAXCHARS):

> p.drawString(d.x, page_size[1] - d.y + y, t)

> y -= p._leading

>

>

> How ever I don't like this solution because MAXCHARS is always

> different depending on Font and Size of the text.

>

> Any ideas how to calculate MAXCHARS ? or another solution to this?


The only solution is to do it by hand, checking one character at a time
until the string is too long: I assume "p" is your canvas and "r" has
the incoming string. I might choose different variable names...

# Assume maxWidth has the maximum width.
tmpstr = ""
for c in r:
if p.stringWidth(s+c) > maxWidth:
p.drawString(d.x, page_size[1] - d.y + y, tmpstr)
y -= p._leading
tmpstr = ""
tmpstr+= c
if tmpstr:
p.drawString(d.x, page_size[1] - d.y + y, tmpstr)
y -= p._leading

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



More information about the reportlab-users mailing list