Перенос слов в таблице отчетов лаборатории PDF

Я использую библиотеку Table of Report Lab для печати таблицы в отчете в формате PDF. Я хотел бы знать, можно ли настроить таблицу для автоматического переноса содержимого ячейки.

Например, у меня есть текст, который не помещается в ячейку внутри столбца. Я хотел бы, чтобы таблица автоматически выполняла перенос, настраивая содержимое ячеек в соответствии с шириной столбцов. Является ли это возможным?


person Pedro Ghilardi    schedule 23.01.2010    source источник


Ответы (3)


Вы можете поместить любой поток в элемент таблицы. Вероятно, хорошей практикой является использование всех элементов таблицы в качестве потоков, чтобы их можно было стилизовать одинаково. Для вашего случая вам, скорее всего, понадобится плавный абзац. например.

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

Вы можете поместить «текст» в данные, которые вы отправляете в таблицу, и они будут автоматически перенесены.

person David Raznick    schedule 23.01.2010
comment
Я тестирую это сейчас, и это действительно работает, перенос по словам. Спасибо чувак! - person Pedro Ghilardi; 23.01.2010
comment
У меня возникла проблема после использования этого ... если данные длиннее и занимают вторую строку, чтобы вписаться, то мои другие данные ячейки теперь также начинаются со второй строки, а первая строка для этих ячеек остается пустой. Вы можете помочь с этим? Заставить другие данные ячейки не переходить на вторую строку для запуска вместо этого - person Sahil Jain; 04.01.2018

Мое решение, заставить новую строку в строке:

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
person pako anguiano    schedule 11.03.2011

*весь код переноса слов

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()
person Sourabh Gupta    schedule 01.06.2013
comment
Добро пожаловать в stackOverFlow. Пожалуйста, предоставьте некоторые пояснения по коду. И прочтите FAQ. - person Siamak A.Motlagh; 01.06.2013