2012-12-05 4 views
5

우선, 저는 python, reportlab, xhtml2pdf를 처음 사용합니다. reportlab을 사용하여 첫 번째 pdf 파일을 작성했지만 다음 문제가 발생했습니다.Reportlab. 두 개의 열이있는 부동 텍스트

두 개의 큰 텍스트가 필요합니다.

먼저 내 캔버스를 만들고, 내 이야기를 만들고, 내 큰 텍스트를 이야기의 단락으로 추가하고, 내 프레임을 만들고, 마지막으로 프레임에 스토리를 추가합니다.

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을 사용하여 수행 할 수 있습니다. 그 레시피가 단지 두 개의 프레임 레이아웃을 사용하도록 수정되었습니다 :

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

이것은 실제로 어떻게 작동하는지에 대한 좋은 설명입니다. 감사합니다. –

관련 문제