我使用一张桌子,但是我在画布上画画以控制可流动对象的位置,这是因为我在pdf中有一个模板,我与pyPDF合并了。
换行是在表格中完成的,但文字会向上(而不是向下),这就是我希望的。
c是画布
码
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()
当您将描述文字换成styles [“ Normal”]时,描述文本会上升。您可以尝试将文本换成styles [“ BodyText”],这样您的文字可以根据您指定的单元格的宽度进行对齐。您还可以包括类似于HTML文本格式的格式。
然后使用TableStyle格式化表格中的内容,例如,彩色文本,中间段落,跨行/列等。
我将上面的代码编辑为工作版本(示例):
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('''<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) # 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()