如何在reportlab中对对象进行分组,以便它们在新页面中保持在一起

时间:2011-01-25 18:45:26

标签: python reportlab

我正在使用reportlab生成一些pdf文件。我有一个重复的部分。它包含一个标题和一个表:

            Story.append(Paragraph(header_string, styleH))
            Story.append(table) 

如何将段落与表格分组(在胶乳中我会将它们放入相同的环境中),以便在页面制动的情况下,段落和表格保持在一起?目前,段落有时会浮动在一页的末尾,表格从下一页开始。

3 个答案:

答案 0 :(得分:9)

您可以尝试将它们放在KeepTogether可流动的中,如下所示:

Story.append(KeepTogether([Paragraph(header_string, styleH), table])

但是请注意,最后我检查过,实施并不完美,仍会过于频繁地分割项目。我知道它可以很好地保持一个可流动的,否则会分裂,就像你要说的那样:

Story.append(KeepTogether(Paragraph(header_string, styleH))

然后该段落不会被拆分,除非它不可能被删除。

如果KeepTogether不适合您,我建议您在其中创建一个包含段落和表格的自定义Flowable,然后在布局期间确保您的自定义Flowable子类不允许自己被分开。

答案 1 :(得分:6)

这是我通过reportlab源代码找到的解决方案:

paragraph = Paragraph(header_string, styleH)
paragraph.keepWithNext = True
Story.append(paragraph)
Story.append(table)

答案 2 :(得分:1)

实际上,使用ParagraphStyle可能会更好,所以我想将其添加到这个超级旧的答案中。

看到@memyself的答案后,在他们的变更日志中发现了这个问题。

  * `KeepWithNext` improved:
    Paragraph styles have long had an attribute keepWithNext, but this was 
    buggy when set to True. We believe this is fixed now. keepWithNext is important 
    for widows and orphans control; you typically set it to True on headings, to 
    ensure at least one paragraph appears after the heading and that you don't get 
    headings alone at the bottom of a column. 
header = ParagraphStyle(name='Heading1', parent=normal, fontSize=14, leading=19,
                        spaceAfter=6, keepWithNext=1)