python-3.x - Python Reportlab 自动换行表

标签 python-3.x word-wrap reportlab

我有一个用 python 生成的列表,为了有一个漂亮的布局,我需要一个自动换行。由于在列表中列出列表,我无法使用 Paragraphe () (或者也许有人知道如何使用 - 我无法编写功能代码)

我在这个 page 上找到了一个代码它不会做自动换行,即使它是这样说的。

问题来了: 我如何对 mycells 中的文本进行自动换行,以便表格适合页面大小并且可以看到所有文本?

这是我的代码(简而言之):

from reportlab.lib.pagesizes import A4
from reportlab.lib.pagesizes import letter, cm
from reportlab.lib.styles import getSampleStyleSheet
from reportlab.platypus import LongTable, TableStyle, BaseDocTemplate, Frame, PageTemplate
from reportlab.lib import colors
from reportlab.platypus import Paragraph, Table, TableStyle
########################################################################

def test():
    doc = BaseDocTemplate(
        "question.pdf",
        pagesize=A4,
        rightMargin=72,
        leftMargin=72,
        topMargin=50,
        bottomMargin=80,
        showBoundary=False)

elements = []
data = [['A', 'B', 'C', 'dddddddddddd', 'D'],
        ['00', '0dddddddddddddddddddddddddddddddddddd1', '02', 'fff', '04'],
        ['10', '11', '12', 'dfg', '14'],
        ['20', '21', '22', 'ddddddddddddddddddddddddddddddddddddddddddddddddddddddd23', '24'],
        ]

t = LongTable(data)

tableStyle = [
    ('INNERGRID', (0, 0), (-1, -1), 0.25, colors.black),
    ('BOX', (0, 0), (-1, -1), 0.25, colors.black),
]
t.setStyle(TableStyle(tableStyle))
elements.append(t)

styles = getSampleStyleSheet()
styleN = styles['Normal']


frame = Frame(doc.leftMargin, doc.bottomMargin, doc.width, doc.height - 2 * cm, id='normal')
template = PageTemplate(id='longtable', frames=frame)
doc.addPageTemplates([template])


doc.build(elements)


if __name__ == '__main__':
    test()`

最佳答案

我修改并稍微重新安排了您的示例,以便它再次执行正确的操作, 实际上被引用的页面正在做它所 promise 的,但是缺少你必须传递 colWidth 参数,我希望你可以从这里继续:

from reportlab.lib.pagesizes import A4
from reportlab.lib.pagesizes import letter, cm
from reportlab.lib.styles import getSampleStyleSheet
from reportlab.platypus import LongTable, TableStyle, BaseDocTemplate,Frame, PageTemplate
from reportlab.lib import colors
from reportlab.platypus import Paragraph, Table, TableStyle

def reprFrame(frame):
    _dict = vars(frame)
    for key in sorted(list(_dict.keys())):
        print(key, ": ", _dict[key])

def test():
    doc = BaseDocTemplate(
        "question.pdf",
        pagesize=A4,
        rightMargin=72,
        leftMargin=72,
        topMargin=50,
        bottomMargin=80,
        showBoundary=False)

    elements = []
    data = [['A', 'B', 'C', 'dddddddddddd', 'D'],
        ['00', '0dddddddddddddddddddddddddddddddddddd1', '02', 'fff', '04'],
        ['10', '11', '12', 'dfg', '14'],
        ['20', '21', '22', 'ddddddddddddddddddddddddddddddddddddddddddddddddddddddd23', '24'],
        ]



    tableStyle = [
        ('INNERGRID', (0, 0), (-1, -1), 0.25, colors.black),
        ('BOX', (0, 0), (-1, -1), 0.25, colors.black),
        ]


    styles = getSampleStyleSheet()
    styleN = styles['Normal']

    styleN.wordWrap = 'CJK'

    data2 = [[Paragraph(cell, styleN) for cell in row] for row in data]

    frame = Frame(doc.leftMargin, doc.bottomMargin, doc.width, doc.height - 2 * cm, id='normal')

    reprFrame(frame)

    colwidths = [frame._width/5. for i in range(5)]

    t = LongTable(data2, colWidths=colwidths)
    t.setStyle(TableStyle(tableStyle))
    elements.append(t)

    template = PageTemplate(id='longtable', frames=frame)
    doc.addPageTemplates([template])
    doc.build(elements)


if __name__ == '__main__':
    test()

关于python-3.x - Python Reportlab 自动换行表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53822577/

相关文章:

python - 如果与最后一行连续出现,则添加值,否则保持相同的值

html - 如何使 DIV 不换行?

jquery - 文本不会在 IE8 中环绕图像

python - 使用 ReportLab 横向生成 PDF

python-3.x - Google Cloud Functions Python 日志记录问题

python-3.x - 使用带有 session 的 Python 请求登录网站

javascript - <pre> 标签内的文本未换行

python - reportlab 值错误 : Invalid color value 'initial'

python - Reportlab:reportlab中表列的动态颜色(存储在django模型中的颜色)

python-3.x - 在 Python 中使用 FFMPEG 时导致此错误的原因是什么?