首页 > 解决方案 > 在 Reportlab 中 splitbyRows 做了什么?

问题描述

尝试使用reportlab将一张大表添加到PDF中。但是内容跨越了页面的左右边缘。

即使我将 columnWidth 设置为表格的固定宽度,内容看起来也太模糊了。所有单元格内容都是可流动的格式。

我可以使用 splitbyRows 解决吗?或者最好的方法是什么?

    from reportlab.platypus import SimpleDocTemplate, Table, TableStyle, Image, Paragraph, Spacer,  LongTable
    from reportlab.lib.pagesizes import A4, inch, cm
    import numpy as np
    from reportlab.lib import colors

    # Pdf design parameters
    FONT_STYLE_BOLD = 'Helvetica-Bold'
    FONT_STYLE = 'Helvetica'

    def addtable(col, row, table_data):
        """
        Add table to the pdf
        """
        # Defininig table structure(nos of rows, nos of columns, size of rows, size of columns)
        #tableobj = Table(table_data, col * [3.26 * inch], row * [0.25 * inch], hAlign='LEFT')
        tableobj = Table(table_data, colWidths = [1 * inch] * col, splitByRow=2, rowSplitRange=(5,20))

        # Defining Table style

        tablestyle = [('FONTNAME', (0, 0), (0, -1), FONT_STYLE),
                      ('FONTNAME', (0, 0), (-1, 0), FONT_STYLE_BOLD),
                      ('BACKGROUND', (0, 0), (-1, 0), colors.lightgrey),
                      ('INNERGRID', (0, 0), (-1, -1), 0.25, colors.grey),
                      ('RIGHTPADDING', (0, 1), (-1, -1), 3),
                      ('BOX', (0, 0), (-1, -1), 0.25, colors.grey),
                      ('FONTSIZE', (0, 0), (-1, -1), 9),
                      ('ALIGN', (1, 0), (-1, -1), 'CENTER'),
                      ]


        tableobj.setStyle(TableStyle(tablestyle))
        elements.append(tableobj)


    elements = []

    clust_data = [["Name", "Date", "Address", "CONTACT DETAILS", "JOB", "DESCRIPTION", "MISC", "JOB", "DESCRIPTION", "MISC", "OTHER", 'FIELD11', 'FIELD22'],
    ["Name", "Date", "Address", "CONTACT DETAILS", "JOB", "DESCRIPTION", "MISC", "JOB", "DESCRIPTION", "MISC", "OTHER", 'FIELD11', 'FIELD22'],
    ["Name", "Date", "Address", "CONTACT DETAILS", "JOB", "DESCRIPTION", "MISC", "JOB", "DESCRIPTION", "MISC", "OTHER", 'FIELD11', 'FIELD22'],
    ["Name", "Date", "Address", "CONTACT DETAILS", "JOB", "DESCRIPTION", "MISC", "JOB", "DESCRIPTION", "MISC", "OTHER", 'FIELD11', 'FIELD22'],
        ]

    addtable(len(clust_data[0]), len(clust_data), clust_data)

    doc = SimpleDocTemplate('table.pdf', pagesize=A4)
    doc.topMargin = .13 * inch
    doc.build(elements)

    del elements[:]

标签: pythonreportlab

解决方案


这是旧的,所以我相信你不再关心了。但这是答案。

您的 A4 页面大小为(8.27x11.69)in. 你说给我addtable创建一个有 13 列 ( len(data[0])) 的表。并将它们全部设为 1 英寸宽(colWidths = [1 * inch] * col)。

由于 13 英寸 + 边距 > 8.27 英寸,reportlab 将项目从页面上绘制出来。

很难找到文档提示。colWidths=['*']将所有列设置为相等宽度,仅填充可用页面宽度。


推荐阅读