2010-01-23 9 views
11

Estoy utilizando la biblioteca Tabla de informes de laboratorio para imprimir una tabla en un informe PDF. Me gustaría saber si es posible configurar la tabla para realizar un ajuste automático del contenido de una celda.Envoltorio de palabras en la tabla PDF del laboratorio de informes

Por ejemplo, tengo un texto que no cabe en una celda dentro de una columna. Me gustaría que la tabla realice el ajuste automáticamente ajustando el contenido de las celdas para que se ajuste al ancho de las columnas. ¿Es posible?

Respuesta

13

Puede poner cualquier fluido en un elemento de tabla. Probablemente sea una buena práctica tener todos los elementos de la tabla como fluidos, para que puedan ser diseñados de la misma manera. Para su caso, lo más probable es que necesite un Párrafo fluido. p.ej.

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

Puede poner `text 'en los datos que alimenta a una tabla y se ajustará automáticamente.

+0

lo prueba ahora y realmente funciona, envoltura de palabra. ¡Gracias hombre! –

+0

Tengo un problema después de usar esto ... si los datos son más largos y toma la segunda línea para caber, mis otros datos de celda también comienzan desde la segunda línea ahora y la primera línea de estas celdas permanece vacía. ¿Me puedes ayudar con esto? Hacer que mis otros datos de celda no cambien a segunda línea para empezar en su lugar –

2

Mi solución, nueva línea de fuerza en la cadena:

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

* Código de toda palabra envolver

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

Bienvenido a stackOverFlow. Proporcione alguna explicación sobre el código. Y lea [** Preguntas frecuentes **] (http://stackoverflow.com/faq) –

Cuestiones relacionadas