2012-12-05 19 views
5

まず、私はpython、reportlab、xhtml2pdfを初めて使っています。 私はすでにreportlabで最初のpdfファイルを作成しましたが、次の問題が発生しました。Reportlab。 2つの列を持つフローティングテキスト

2つの列に大きなテキストが必要です。

最初に私は自分のキャンバスを作成し、私の物語を作成し、私の大きなテキストを物語の段落として追加し、私のフレームを作成して最後に物語をフレームに追加します。

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() 

魅力的な作品です。しかし、私は2つの列represantationでテキストを表示する必要があります。

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

しかし、私はこのようにそれを必要とする:私はあなたが私が言うことをしようとしていますどのような理解を願ってい

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

今、テキストは同じように私のフレームを投げた流れ。

答えて

10

これは、BaseDocTemplateFrameを使用して、hereと読むことができます。私はそのレシピを2つのフレームレイアウトだけを使用するように修正しました:

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) 
+0

ありがとうございます。カモノハシはここに行く道です。あなたの例に私のdef pdfを変更し、完璧に動作します。盛り上がる:) – user1878514

5

普通のReportLabでこれを行うには、段落をどこで分割するかを判断する必要があります。代わりにPlatypusを使用してドキュメントクラスを設定する場合は、ページ上にテキストを配置するフレームを指定することができ、フレームの順序によってオブジェクトがどこに流れるかが決まります。段落がページの左側にある最初のフレームの最後に到達すると、コンテンツは自動的に次のフレームに流されます。ページの右側に配置すると、目的の内容が得られます。

+0

これは実際の動作の良い説明です。ありがとうございます。 –

関連する問題