Reportlab中的拉伸表列

时间:2019-06-25 06:24:09

标签: python pdf reportlab

我正在尝试在Reportlab中扩展表列(不是RML),我曾尝试设置colWidths像这样:

tab = Table(data, colWidths=["*", None, None, None, None, None])

如文档中所写,但第一列的大小不变(保留在“按内容缩放”上)。有没有办法在不指定固定大小的情况下将第一列拉伸到可用空间? (因为其他列 会根据某些参数动态变化)

1 个答案:

答案 0 :(得分:0)

这似乎是Reportlab的故意行为,因为宽度计算代码表明:

def _calc_pc(V,avail):
    '''check list V for percentage or * values
    1) absolute values go through unchanged
    2) percentages are used as weights for unconsu
    3) if no None values were seen '*' weights are
    set equally with unclaimed space
    otherwise * weights are assigned as None'''

这意味着*None不能在宽度列表中一起使用,这没有意义,因为那是如何使列伸展而另一列的大小要达到内容。无论如何,我最终编写了一个包装函数,该包装函数重新计算了所有内容:

def table_fix(data, cols, total):
    table = Table(data, colWidths=cols)
    res = list(cols)
    val = table._cellvalues
    style = table._cellStyles
    while None in res:
        idx = res.index(None)
        width = 0
        for i, vi in enumerate(val):
            v = vi[idx]
            s = style[i][idx]
            nw = table._elementWidth(v, s) + s.leftPadding + s.rightPadding
            if nw > width:
                width = nw
        res[idx] = width
    table._colWidths = table._argW = res
    return table

丑陋,但为我做这份工作。如果需要,可以扩展它以支持多个*列。