簡體   English   中英

Reportlab。 帶兩列的浮動文本

[英]Reportlab. Floating Text with two Columns

首先,我是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|

希望您理解我要說的話。

您可以在此處閱讀使用BaseDocTemplateFrame來完成。 我修改了收據以僅使用兩個框架的布局:

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)

如果要在普通ReportLab中執行此操作,則必須自己弄清楚該段落的位置。 如果改用Platypus來設置文檔類,則可以指定框架以在頁面上放置文本,框架的順序將決定流向何處。 當段落到達頁面左側第一幀的末尾時,內容將自動流到下一幀,您可以將其定位在頁面右側以實現所需的內容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM