2010-01-23 22 views
11

Używam biblioteki tabeli Report Lab do wydrukowania tabeli w raporcie PDF. Chciałbym wiedzieć, czy jest możliwe skonfigurowanie tabeli do automatycznego zawijania zawartości komórki.Zawijanie słów w laboratorium raportowania tabeli PDF

Na przykład, mam tekst, który nie mieści się w komórce wewnątrz kolumny. Chciałbym, aby tabela wykonywała owijanie automatycznie dostosowując zawartość komórek do rozmiaru kolumny. Czy to możliwe?

Odpowiedz

13

Możesz umieścić dowolne płynne w elemencie stołu. Prawdopodobnie dobrą praktyką jest, aby wszystkie elementy stołu były płynne, aby można je było stylizować tak samo. W twoim przypadku najprawdopodobniej będziesz potrzebował płynnego Akapitu. na przykład.

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

Możesz wstawić "tekst" do danych, które podajesz do tabeli i automatycznie się zawija.

+0

przetestować go teraz i to naprawdę działa, opakowania po słowie. Dzięki! –

+0

Mam problem po użyciu. Jeśli dane są dłuższe i zajmują drugą linię, wtedy moje inne dane komórek również zaczynają się od drugiej linii, a pierwsza linia dla tych komórek pozostaje pusta. Czy możesz w tym pomóc? Sprawiając, że moje inne dane komórki nie przesuwają się do drugiego wiersza zamiast na początek. –

2

Moje rozwiązanie, siła nowej linii w ciągu:

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

* cały kod słowa owinąć

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

Witamy w pileOverFlow. Proszę podać kilka wyjaśnień na temat kodu. I przeczytaj [** FAQ **] (http://stackoverflow.com/faq) –

Powiązane problemy