Envolver texto en una tabla reportlab?

Utilizo una tabla, pero dibujo en un canvas para controlar la posición de los materiales fluidos, esto porque tengo una plantilla en un pdf, una fusión con pyPDF.

La envoltura se realiza en una tabla, pero el texto sube, no hacia abajo, eso es lo que espero.

c es el canvas

Código

from reportlab.pdfgen import canvas from reportlab.lib.pagesizes import A4 from reportlab.lib.styles import getSampleStyleSheet from reportlab.platypus import Paragraph, Table from reportlab.lib.units cm width, height = A4 styles = getSampleStyleSheet() def coord(x, y, unit=1): x, y = x * unit, height - y * unit return x, y descrpcion = Paragraph('long paragraph', styles["Normal"]) partida = Paragraph('1', styles["Center"]) candidad = Paragraph('120', styles["Center"]) precio_unitario = Paragraph('$52.00', styles["right"]) precio_total = Paragraph('$6240.00', styles["right"]) data= [[partida, candidad, descrpcion, precio_unitario, precio_total]] table = Table(data, colWidths=[2.05 * cm, 2.7 * cm, 9.6 * cm, 2.65 * cm, 2.7 * cm]) c = canvas.Canvas(PDF, pagesize=A4) table.wrapOn(c, width, height) table.drawOn(c, *coord(1.8, 9.6, cm)) c.save() 

http://img600.imageshack.us/img600/3203/reportld.jpg

El texto de la descripción subió a medida que lo envuelve en un estilo [“Normal”] Puede intentar envolver su texto en un estilo [“BodyText”] Esto permitirá que su texto se alinee de acuerdo con el ancho de la celda que especifique. También podría incluir un formato similar al formato de texto HTML.

Luego use TableStyle para dar formato al contenido de la tabla, por ejemplo, texto en color, párrafo central, filas / columnas de rango, etc.

Edité el código anterior a una versión funcional (ejemplo):

 from reportlab.pdfgen import canvas from reportlab.lib.pagesizes import A4 from reportlab.lib.units import cm 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 width, height = A4 styles = getSampleStyleSheet() styleN = styles["BodyText"] styleN.alignment = TA_LEFT styleBH = styles["Normal"] styleBH.alignment = TA_CENTER def coord(x, y, unit=1): x, y = x * unit, height - y * unit return x, y # Headers hdescrpcion = Paragraph('''descrpcion''', styleBH) hpartida = Paragraph('''partida''', styleBH) hcandidad = Paragraph('''candidad''', styleBH) hprecio_unitario = Paragraph('''precio_unitario''', styleBH) hprecio_total = Paragraph('''precio_total''', styleBH) # Texts descrpcion = Paragraph('long paragraph', styleN) partida = Paragraph('1', styleN) candidad = Paragraph('120', styleN) precio_unitario = Paragraph('$52.00', styleN) precio_total = Paragraph('$6240.00', styleN) data= [[hdescrpcion, hcandidad,hcandidad, hprecio_unitario, hprecio_total], [partida, candidad, descrpcion, precio_unitario, precio_total]] table = Table(data, colWidths=[2.05 * cm, 2.7 * cm, 5 * cm, 3* cm, 3 * cm]) 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, width, height) table.drawOn(c, *coord(1.8, 9.6, cm)) c.save() 

Respuesta automática:

 def coord(x, y, height, unit=1): x, y = x * unit, height - y * unit return x, y w, h = table.wrap(width, height) table.wrapOn(c, width, height) table.drawOn(c, *coord(ml - 0.05, y + 4.6, height - h, cm)) 

el truco está en la “altura – h”, h es la altura de la tabla y esto depende del contenido de la tabla

Sé que la referencia de Postscript es la esquina inferior izquierda. Supongo que el PDF es el mismo, por lo que se resta del valor y para bajar. Imprima los valores iniciales y finales de “y” en la función para ver cómo están cambiando y ajuste el valor de “y” según la longitud de la oración. ¿Y cómo sabe la función qué es la “altura”? Uso ReportLab, pero probablemente pueda ayudar con un ejemplo específico si le interesa publicar uno.