如何让ReportLab中某帧溢出文本流入下一页模板的指定帧?
问题:ReportLab跨模板帧的文本续流处理
场景与需求
使用ReportLab的BaseDocTemplate创建文档:
- 第一页采用包含6个帧的
first_page_template - 第二页采用仅含1个帧的
second_page_template
核心需求:当第一页的direction_frame被未知长度的文本填满后,溢出文本自动流入第二页的direction_frame2。
当前问题
目前溢出文本会流入第二页的title_frame,原因是文档溢出后默认重复第一页的PageTemplate,且未在story中插入NextPageTemplate()和PageBreak()。
可行思路
我梳理了两种解决方向:
- 计算每个添加到story的段落尺寸,预判即将溢出时调用
NextPageTemplate()和PageBreak(); - 配置ReportLab,让
direction_frame填满后自动切换到second_page_template的direction_frame2续接文本。
之前尝试过手动添加若干段落后切换模板,但段落长度差异大,误差极高。
代码片段
# 创建页面模板 first_page_template = PageTemplate( id='first_page_template', frames=[title_frame, expected_frame, top_frame_left, top_frame_right, cook_frame, direction_frame]) second_page_template = PageTemplate( id='second_page_template', frames=[direction_frame2]) # 创建文档 doc = BaseDocTemplate( 'print.pdf', pagesize=letter, pageTemplates=(first_page_template, second_page_template) ) # 向story中添加元素 story = [] ... 向前5个帧添加文本 ... # 添加步骤段落 story.append(FrameBreak()) for i in range(len(directions)): story.append(Paragraph(directions[i], style=normal_paragraph))
内容的提问来源于stack exchange,提问作者Jeremy Wilson
相关产品推荐
相关产品推荐

