Wrap text in a table reportlab? Wrap text in a table reportlab? python python

Wrap text in a table reportlab?


The description text went up as you wrap it in a styles["Normal"] You can try to wrap your text in a styles["BodyText"] This will allow your text to align themselves according to the width of the cell you specify. You could also include formatting which is similar to HTML text formatting.

Then use TableStyle to format the content in the table, for example, color text, center paragraph, span rows/columns and so on.

I edited the code above to a working version (example):

from reportlab.pdfgen import canvasfrom reportlab.lib.pagesizes import A4from reportlab.lib.units import cmfrom reportlab.lib.styles import getSampleStyleSheetfrom reportlab.platypus import Paragraph, Table, TableStylefrom reportlab.lib.enums import TA_JUSTIFY, TA_LEFT, TA_CENTERfrom reportlab.lib import colorswidth, height = A4styles = getSampleStyleSheet()styleN = styles["BodyText"]styleN.alignment = TA_LEFTstyleBH = styles["Normal"]styleBH.alignment = TA_CENTERdef coord(x, y, unit=1):    x, y = x * unit, height -  y * unit    return x, y# Headershdescrpcion = Paragraph('''<b>descrpcion</b>''', styleBH)hpartida = Paragraph('''<b>partida</b>''', styleBH)hcandidad = Paragraph('''<b>candidad</b>''', styleBH)hprecio_unitario = Paragraph('''<b>precio_unitario</b>''', styleBH)hprecio_total = Paragraph('''<b>precio_total</b>''', styleBH)# Textsdescrpcion = 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()


AutoReply:

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

the trick is in the "height - h", h is the height of the table and this depend of the content of the table


I know that Postscript's reference is the lower, left corner. I'm guessing that PDF is the same, so you subtract from the y value to go down. Print the beginning and ending "y" values in the function to see how they are changing and adjust the "y" value depending on the length of the sentence. And how does the function know what "height" is? I use ReportLab but could probably help with a specific example if you care to post one.