[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