我使用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)
Run Code Online (Sandbox Code Playgroud)
数据来自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'
Run Code Online (Sandbox Code Playgroud)
这个例外停止我的程序.对于我在MyDocStyle课堂上设置的简短段落,h2.keepWithNext = 1它并不是完美的解决方案.如果段落末尾与页面末尾(文本区域)"不一致",ReportLab会正确拆分长段.
我怎么处理它?
当ReportLab尝试将Spacer拆分为两页时,会发生此错误.似乎解决此问题的唯一方法是将您的Spacer包装到KeepTogether元素中:
elements.append(KeepTogether(Spacer(width, height)))
Run Code Online (Sandbox Code Playgroud)
kro*_*ros -3
解决了。不要使用Spacer(例如Spacer(1, 0.2*cm)) 作为 的分隔符Paragraph。相反,定义spaceBefore和spaceAfterin ParagraphStyle,例如:
ParagraphStyle(name = 'Normal',
fontName = "Verdana",
fontSize = 11,
leading = 15,
alignment = TA_JUSTIFY,
allowOrphans = 0,
spaceBefore = 20,
spaceAfter = 20,
wordWrap = 1)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2976 次 |
| 最近记录: |