Python ReportLab:frame'中第1页上的可流动太大;正常';模板';第一';

Python ReportLab:frame'中第1页上的可流动太大;正常';模板';第一';,python,reportlab,Python,Reportlab,我使用ReportLab构建PDF。我的程序有一个MyDocTemplate(SimpleDocTemplate)类,有两个方法:beforePage(self)和afterPage(self),它们在每页上添加页眉和页脚(如PNG图像)。还有一个MyDocStyle类,描述ParagraphStyle 主要方法如下所示: TITLE = Paragraph(Title, MyDocStyle.h1) TO = Paragraph(To, MyDocStyle.h2) FROM = Paragr

我使用ReportLab构建PDF。我的程序有一个
MyDocTemplate(SimpleDocTemplate)
类,有两个方法:
beforePage(self)
afterPage(self)
,它们在每页上添加页眉和页脚(如PNG图像)。还有一个
MyDocStyle
类,描述
ParagraphStyle

主要方法如下所示:

TITLE = Paragraph(Title, MyDocStyle.h1)
TO = Paragraph(To, MyDocStyle.h2)
FROM = Paragraph(From, MyDocStyle.h2)
SUBJECT = Paragraph(Subject, MyDocStyle.h2)
LONG_PARAGRAPH = Paragraph(Text, MyDocStyle.h3)
...

Elements = [TITLE, TO, FROM, SUBJECT, LONG_PARAGRAPH, ...]
doc = MyDocTemplete('output.pdf', pagesize=A4, 
                     leftMargin=2*cm, rightMargin=2*cm,
                     topMargin=4*cm, bottomMargin=4*cm)
doc.build(Elements)
数据来自CSV文件和GUI。我不时(取决于数据长度)收到一个错误:

Flowable <Spacer at 0x2631120 frame=normal>...(1 x 5.66929133858) too large
on page 1 in frame 'normal'(469.88976378 x 603.118110236) of template 'First'
可流动…(1 x 5.66929133858)太大
在模板“First”的框架“normal”(469.88976378 x 603.118110236)的第1页上
此异常停止我的程序。对于短段落,我在
MyDocStyle
class
h2.keepWithNext=1
中设置,但这不是完美的解决方案。如果段落结尾和页面结尾(文本区域)不“一致”,ReportLab将正确拆分长段落


我如何处理它?

已解决。不要使用
间隔垫圈(例如
间隔垫圈(1,0.2*cm)
)作为
段落的分隔符。相反,在
段落样式
中定义
spaceBefore
spaceAfter
,例如:

ParagraphStyle(name = 'Normal',
               fontName = "Verdana",
               fontSize = 11,
               leading = 15,
               alignment = TA_JUSTIFY,
               allowOrphans = 0,
               spaceBefore = 20,
               spaceAfter = 20,
               wordWrap = 1)

当ReportLab尝试将间隔符拆分为两页时,会发生此错误。似乎解决此问题的唯一方法是将间隔垫圈包装到KeepTogether元素中:

elements.append(KeepTogether(Spacer(width, height)))

我面临着同样的问题,很少有测试表明间隔棒似乎不是问题所在。请不要让用户害怕使用它,除非你的假设背后有其他依据。对于未来的读者:完整的模块路径是:
reportlab.platypus.KeepTogether