【问题标题】:Reportlab. Floating Text with two Columns报告实验室。具有两列的浮动文本
【发布时间】:2012-12-05 09:51:19
【问题描述】:

首先,我是 python、reportlab、xhtml2pdf 的新手。 我已经用 reportlab 完成了我的第一个 pdf 文件,但是我遇到了以下问题。

我需要两列中的大文本。

首先我创建我的画布,创建我的故事,将我的大文本作为一个段落附加到故事中,创建我的框架,最后将故事添加到框架中。

c = Canvas("local.pdf")
storyExample = []
textExample = (""" This is a very large text Lorem Ipsum ... """)
storyExample.append(Paragraph(textExample, styleText))
frameExample = Frame(0, 0, 50, 50,showBoundary=0)
frameExample.addFromList(storyExample,c)
c.showPage()
c.save()

像魅力一样工作。但我需要在两列表示中显示文本。

现在文字刚刚流过我的框架,就像:

|aaaaaaaaaaaaaaaaaaaa|
|bbbbbbbbbbbbbbbbbbbb|
|cccccccccccccccccccc|
|dddddddddddddddddddd|

但我需要这样:

|aaaaaaaaa  bbbbbbbbbb|
|aaaaaaaaa  cccccccccc|
|bbbbbbbbb  cccccccccc|
|bbbbbbbbb  dddddddddd|

我希望你明白我想说什么。

【问题讨论】:

    标签: python reportlab pisa xhtml2pdf


    【解决方案1】:

    这可以使用BaseDocTemplateFrame 来完成,您可以阅读here。我将收据修改为仅使用两帧布局:

    from reportlab.platypus import BaseDocTemplate, Frame, Paragraph, PageBreak, PageTemplate
    from reportlab.lib.styles import getSampleStyleSheet
    import random
    
    words = "lorem ipsum dolor sit amet consetetur sadipscing elitr sed diam nonumy eirmod tempor invidunt ut labore et".split()
    
    styles=getSampleStyleSheet()
    Elements=[]
    
    doc = BaseDocTemplate('basedoc.pdf',showBoundary=1)
    
    #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')
    
    Elements.append(Paragraph(" ".join([random.choice(words) for i in range(1000)]),styles['Normal']))
    doc.addPageTemplates([PageTemplate(id='TwoCol',frames=[frame1,frame2]), ])
    
    
    #start the construction of the pdf
    doc.build(Elements)
    

    【讨论】:

    • 谢谢。鸭嘴兽是去这里的路。将我的 def pdf 更改为您的示例并且效果很好。捶胸顿足:)
    【解决方案2】:

    如果您想在普通的 ReportLab 中执行此操作,您必须自己找出在哪里中断段落。如果您改为使用 Platypus 来设置文档类,则可以指定在页面上放置文本的框架,并且框架的顺序将确定内容流向的位置。当段落到达页面左侧第一帧的末尾时,内容会自动流入下一帧,您可以将其定位在页面右侧以达到您想要的效果。

    【讨论】:

    • 这很好地解释了它的实际工作原理,谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-17
    • 2011-06-11
    • 2011-10-05
    • 1970-01-01
    相关资源
    最近更新 更多