首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Reportlab:为什么两列输出恢复为单列?

Reportlab:为什么两列输出恢复为单列?
EN

Stack Overflow用户
提问于 2019-07-30 23:44:58
回答 1查看 144关注 0票数 0

我希望在Reportlab中生成两列页面。附加的程序(改编自各种示例)生成两个具有两列的页面,然后生成单列页面。

我已经尝试为第一个页面和后续页面创建多个页面模板。这不会改变输出。

代码语言:javascript
复制
from reportlab.platypus import SimpleDocTemplate, Frame, Paragraph
from reportlab.platypus import Spacer, PageTemplate, NextPageTemplate
from reportlab.lib.styles import getSampleStyleSheet

styles = getSampleStyleSheet()

doc = SimpleDocTemplate ("try.pdf")
style = styles["Normal"]

#Two Columns
frame1 = Frame(doc.leftMargin, doc.bottomMargin, 
               doc.width/2-6, doc.height, id='col1')
frame2 = Frame(doc.leftMargin+doc.width/2+6, doc.bottomMargin, 
               doc.width/2-6, doc.height, id='col2')
doc.addPageTemplates(PageTemplate(id='TwoCol', frames=[frame1,frame2]))

Story = []
Story.append (NextPageTemplate(['TwoCol']))

for rec in range (1, 200):
    line = ("<para><b>Paragraph %s:</b> " % rec)
    line += "This is the text of the paragraph. More text of the paragraph."
    line += " Even more text.</para>\n"
    p = Paragraph(line, style)
    Story.append(p)

doc.build (Story)

我在"Story.append(p)“后面添加了以下内容,看看是否可以解决这个问题:

代码语言:javascript
复制
    if rec % 40 == 0: 
        Story.append (NextPageTemplate(['TwoCol']))

现在,第1页和第2页是两栏,第3页是一栏,第4页和第5页是两栏。

EN

回答 1

Stack Overflow用户

发布于 2019-07-31 08:12:04

我看了一下SimpleDocTemplate.build()。它创建一个完整的页面框架(id='First')并将其添加到文档的pageTemplates列表中。

看起来BaseDocTemplate.build()会为它将要生成的每个页面挑选下一个pageTemplate。我认为这会导致默认设置被选中。

我用BaseDocTemplate替换了SimpleDocTemplate。现在,所有页面都生成了两列。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57275443

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档