2010-01-23 15 views
11

我使用報表實驗室庫在PDF報表上打印表格。我想知道是否可以將表配置爲執行單元格內容的自動換行。報表實驗室中的換行PDF表

例如,我有一個文本不適合列中的單元格。我希望表格執行自動調整單元格的內容以適應列寬。可能嗎?

回答

13

您可以將任何流動元素放在表格元素中。將所有表格元素作爲流動元素可能是一種很好的做法,因此它們的樣式可以相同。對於你的情況,你很可能需要一個段落流。例如。

styles = getSampleStyleSheet() 
text = Paragraph("long line", 
       styles['Normal']) 

你可以把'文本」到你喂到表中的數據,它會自動換行。

+0

我現在測試它,它真的有用,包裝用字。謝啦! – 2010-01-23 17:38:51

+0

如果數據更長,並且需要第二行才能填充,那麼我的其他單元格數據也從第二行開始,並且第一行這些單元格保持空白。你能幫忙嗎?使我的其他細胞數據不會轉移到第二行開始而不是 – 2018-01-04 12:29:10

2

我的解決方案,力換行符的字符串:

def __chopLine(line, maxline): 

    cant = len(line)/maxline 
    cant += 1 
    strline = "" 
    index = maxline 
    for i in range(1,cant): 
     index = maxline * i 
     strline += "%s\n" %(line[(index-maxline):index]) 
    strline += "%s\n" %(line[index:]) 
    return strline 
2

*字的整個代碼包

from reportlab.pdfgen import canvas 
from reportlab.lib.pagesizes import A4 
from reportlab.lib.styles import getSampleStyleSheet 
from reportlab.platypus import Paragraph, Table, TableStyle 
from reportlab.lib.enums import TA_JUSTIFY, TA_LEFT, TA_CENTER 
from reportlab.lib import colors 

# bodytext style used for wrapping data on flowables 
styles = getSampleStyleSheet() 
styleN = styles["BodyText"] 
#used alignment if required 
styleN.alignment = TA_LEFT 

styleBH = styles["Normal"] 
styleBH.alignment = TA_CENTER 


hdescrpcion = Paragraph('''<b>descrpcion</b>''', styleBH) 
hpartida = Paragraph('''<b>partida</b>''', styleBH) 


descrpcion = Paragraph('long long long long long long long long long long long long long long long long long long long long line ', styleN) 
partida = Paragraph('1', styleN) 

data= [[hdescrpcion, hpartida], 
     [partida ,descrpcion]] 

table = Table(data) 

table.setStyle(TableStyle([ 
         ('INNERGRID', (0,0), (-1,-1), 0.25, colors.black), 
         ('BOX', (0,0), (-1,-1), 0.25, colors.black), 
         ])) 

c = canvas.Canvas("a.pdf", pagesize=A4) 
table.wrapOn(c, 50, 50) 
table.drawOn(c, 100,600) 
c.save() 
+1

歡迎來到stackOverFlow。請提供關於代碼的一些解釋。並閱讀[** FAQ **](http://stackoverflow.com/faq) – 2013-06-01 09:16:25