7

まず第一に、私はpython、reportlab、xhtml2pdfが初めてです。reportlab で最初の pdf ファイルを作成しましたが、次の問題に遭遇しました。

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 列の表現で表示する必要があります。

テキストがフローするだけで、次のようにフレームがスローされます。

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

しかし、私はこのようにそれが必要です:

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

私が言おうとしていることを理解していただければ幸いです。

4

2 に答える 2

16

ここで読むことができるように、これは と を使用して行うBaseDocTemplateことができます。そのレシートを 2 フレーム レイアウトのみを使用するように変更しました。Frame

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)
于 2012-12-06T18:31:18.817 に答える
6

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

于 2012-12-06T14:35:14.243 に答える