Ответ 1
это решение, которое я обнаружил через исходный код reportlab:
paragraph = Paragraph(header_string, styleH)
paragraph.keepWithNext = True
Story.append(paragraph)
Story.append(table)
Я создаю несколько файлов PDF с помощью reportlab. У меня есть определенный раздел, который повторяется. Он содержит заголовок и таблицу:
Story.append(Paragraph(header_string, styleH))
Story.append(table)
Как я могу сгруппировать абзац с таблицей (в латекс я бы поставил их в одну и ту же среду), чтобы в случае блокировки страницы абзац и таблица остались вместе? В настоящее время абзац иногда плавает в конце одной страницы, и таблица начинается поверх следующей страницы.
это решение, которое я обнаружил через исходный код reportlab:
paragraph = Paragraph(header_string, styleH)
paragraph.keepWithNext = True
Story.append(paragraph)
Story.append(table)
Вы можете попытаться объединить их в KeepTogether
текущие, например:
Story.append(KeepTogether([Paragraph(header_string, styleH), table])
Однако имейте в виду, что, последний раз, когда я проверил, реализация не была идеальной и будет слишком часто разделять элементы. Я знаю, что хорошая работа заключается в том, чтобы сохранить единый поток, который в противном случае раскололся бы, например, если бы вы сказали:
Story.append(KeepTogether(Paragraph(header_string, styleH))
тогда этот параграф не будет разделен, если это невозможно для него.
Если KeepTogether
не работает для вас, я бы предложил создать пользовательский Flowable
с вашим абзацем и таблицей внутри него, а затем во время компоновки убедитесь, что ваш пользовательский подкласс Flowable
не позволяет разделить вверх.
Использование 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)