[reportlab-users] Truncate table cell content to end with ellipsis

Yves Forkl Y.Forkl at srz.de
Mon Apr 20 07:28:09 EDT 2009


Robin Becker schrieb:

>

> if you cannot use the broken fragline stuff to locate the position where

> the text should be ended then you'll need to brute force the search. A

> good approach uses a binary search to determine where the split should

> occur eg [...]


Thank you for the function locateSplit you proposed. In the meantime, I
had come up with a function that follows very much the same line of
thought (but shortens and appends the ellipsis as well):

def fitIntoTableCell(content, columnWidth, fontName, fontSize):
_c = canvas.Canvas('nofile.pdf')
# reduce actual column width a bit, to account for padding etc.
columnWidth -= 5
contentWidth = _c.stringWidth(content, fontName, fontSize)
shortened = False
# if the content is wider than the cell, cut off enough from it so
# that the ellipsis fits in, too
if contentWidth > columnWidth:
shortened = True
# take width of ellipsis into account; empirically determined
# with fontName == Helvetica and fontSize == 12 (should
# rather be calaculated from these parameters)
columnWidthBeforeEllipsis = columnWidth - 7
while contentWidth > columnWidthBeforeEllipsis:
# cutting by single characters because words might be too
# long
content = content[:-1]
contentWidth = _c.stringWidth(content, fontName, fontSize)
del _c
if shortened:
content += u'\u2026'
return content

I wonder how I could do without the dummy canvas, though...

Yves


More information about the reportlab-users mailing list