ReportLab的.浮动带有两列的文本

use*_*514 7 python reportlab pisa xhtml2pdf

首先,我是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()
Run Code Online (Sandbox Code Playgroud)

奇迹般有效.但我需要在两列represantation中显示文本.

现在文本只是流动我的框架像:

|aaaaaaaaaaaaaaaaaaaa|
|bbbbbbbbbbbbbbbbbbbb|
|cccccccccccccccccccc|
|dddddddddddddddddddd|
Run Code Online (Sandbox Code Playgroud)

但我需要这样:

|aaaaaaaaa  bbbbbbbbbb|
|aaaaaaaaa  cccccccccc|
|bbbbbbbbb  cccccccccc|
|bbbbbbbbb  dddddddddd|
Run Code Online (Sandbox Code Playgroud)

我希望你理解我想说的话.

Oca*_*tal 14

这可以使用BaseDocTemplate和完成Frame,你可以在这里阅读.我将recipe修改为仅使用两帧布局:

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)
Run Code Online (Sandbox Code Playgroud)


G G*_*III 6

如果你想在普通的ReportLab中这样做,你必须自己弄清楚段落的中断位置.如果您改为使用Platypus来设置文档类,则可以指定要在页面上放置文本的帧,帧的顺序将决定事物流向的位置.当段落到页面左侧第一帧的末尾时,内容将自动流入下一帧,您可以将其放置在页面右侧以实现您想要的效果.