Растянуть столбец таблицы в Reportlab - PullRequest
0 голосов
/ 25 июня 2019

Я пытаюсь растянуть столбец таблицы в Reportlab (не RML), я попытался установить colWidths следующим образом:

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

, как написано в документации, но размер первого столбцане изменяется (он остается на «размер к содержанию»).Есть ли способ сделать первый столбец растянутым до доступного пространства без указания фиксированного размера?(поскольку другие столбцы будут динамически изменяться в зависимости от некоторых параметров)

1 Ответ

0 голосов
/ 25 июня 2019

Это кажется преднамеренным поведением 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

Ужасно, но делает всю работу за меня.При необходимости его можно расширить для поддержки нескольких столбцов *.

...