17

我正在使用 Table of Report Lab 库在 PDF 报告上打印表格。我想知道是否可以将表格配置为执行单元格内容的自动换行。

例如,我有一个文本不适合列内的单元格。我希望表格自动执行换行,调整单元格的内容以适应列宽。是否可以?

4

3 回答 3

22

您可以将任何可流动对象放入表格元素中。将所有表格元素都设置为可流动对象可能是一种好习惯,因此它们的样式可以相同。对于您的情况,您很可能需要一个可流动的段落。例如。

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

您可以将“文本”放入您提供给表格的数据中,它会自动换行。

于 2010-01-23T13:56:08.670 回答
2

我的解决方案,在字符串中强制换行:

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
于 2011-03-11T17:54:18.010 回答
2

*整个自动换行代码

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()
于 2013-06-01T08:54:16.767 回答