2010-01-23 3 views
11

Sto utilizzando la libreria Table of Report Lab per stampare una tabella in un report PDF. Vorrei sapere se è possibile configurare la tabella per eseguire un avvolgimento automatico del contenuto di una cella.Scheda di testo del laboratorio di report Tabella PDF

Ad esempio, ho un testo che non si adatta a una cella all'interno di una colonna. Mi piacerebbe che la tabella eseguisse l'avvolgimento regolando automaticamente il contenuto delle celle per adattarsi alla larghezza delle colonne. È possibile?

risposta

13

È possibile inserire qualsiasi flusso in un elemento tabella. È probabilmente una buona pratica avere tutti gli elementi della tabella come fluidi, in modo che possano essere stilizzati allo stesso modo. Per il tuo caso, avrai probabilmente bisogno di un paragrafo scorrevole. per esempio.

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

È possibile inserire "testo" nei dati inseriti in una tabella e questo verrà automaticamente inserito.

+0

ho provate subito e funziona davvero, avvolgimento per parola. Grazie uomo! –

+0

Ho un problema dopo aver usato questo ... se i dati sono più lunghi e prende la seconda riga per entrare, allora anche i miei altri dati di cella iniziano dalla seconda linea e la prima riga per queste celle rimane vuota. Puoi aiutare con questo? Rendere gli altri dati della cella non passare alla seconda riga per iniziare invece –

2

La mia soluzione, forza nuova riga nella stringa:

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

* tutto il codice di A capo

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

Benvenuti in stackOverFlow. Si prega di fornire alcune spiegazioni sul codice. Leggi [** FAQ **] (http://stackoverflow.com/faq) –