Обернуть текст в таблицу reportlab?
Я использую таблицу, но я рисую в холсте для управления положением потоковых таблиц, это потому, что у меня есть шаблон в 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('.00', styles["right"])
precio_total = Paragraph('40.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()
3 ответов
текст описания поднялся, когда вы обернули его в стили ["нормальный"] вы можете попытаться обернуть свой текст в стили ["BodyText"] это позволит вашему тексту выровняться в соответствии с шириной ячейки, которую вы укажете. Вы также можете включить форматирование, похожее на форматирование текста HTML.
затем используйте TableStyle для форматирования содержимого таблицы, например, цветного текста, Центрального абзаца, строк/столбцов и т. д.
я отредактировал код выше в рабочий вариант (пример):
from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import A4, 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('.00', styleN)
precio_total = Paragraph('40.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, 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))
трюк находится в "height-h", h-высота таблицы, и это зависит от содержимого таблицы
Я знаю, что ссылка Postscript-это нижний левый угол. Я предполагаю, что PDF тот же самый, поэтому вы вычитаете из значения y, чтобы пойти вниз. Выведите начальные и конечные значения "y "в функции, чтобы увидеть, как они изменяются, и отрегулируйте значение" y " в зависимости от длины предложения. И как функция знает, что такое "высота"? Я использую ReportLab, но, вероятно, мог бы помочь с конкретным примером, если вы хотите опубликовать его.