我希望在Reportlab中生成两列页面。附加的程序(改编自各种示例)生成两个具有两列的页面,然后生成单列页面。
我已经尝试为第一个页面和后续页面创建多个页面模板。这不会改变输出。
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)“后面添加了以下内容,看看是否可以解决这个问题:
if rec % 40 == 0:
Story.append (NextPageTemplate(['TwoCol']))现在,第1页和第2页是两栏,第3页是一栏,第4页和第5页是两栏。
发布于 2019-07-31 08:12:04
我看了一下SimpleDocTemplate.build()。它创建一个完整的页面框架(id='First')并将其添加到文档的pageTemplates列表中。
看起来BaseDocTemplate.build()会为它将要生成的每个页面挑选下一个pageTemplate。我认为这会导致默认设置被选中。
我用BaseDocTemplate替换了SimpleDocTemplate。现在,所有页面都生成了两列。
https://stackoverflow.com/questions/57275443
复制相似问题