2012-12-05 18 views
5

के साथ फ़्लोटिंग टेक्स्ट सबसे पहले, मैं अजगर, reportlab, xhtml2pdf के लिए नया हूं। मैंने पहले ही पीडीएफ फाइलों को रिपोर्टलैब के साथ किया है, लेकिन मैं निम्नलिखित समस्या में भाग गया।रिपोर्टलैब। दो कॉलम

मुझे दो कॉलम में एक बड़ा टेक्स्ट चाहिए।

सबसे पहले मैं अपना कैनवास बना सकता हूं, अपनी कहानी बना सकता हूं, कहानी के अनुच्छेद के रूप में अपना बड़ा टेक्स्ट जोड़ सकता हूं, अपना फ्रेम बना सकता हूं और आखिरकार कहानी को फ्रेम में जोड़ सकता हूं।

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| 

मुझे आशा है कि आप समझ मैं क्या कहने की कोशिश कर रहा हूँ।

उत्तर

10

यह BaseDocTemplate और Frame का उपयोग करके किया जा सकता है क्योंकि आप here पढ़ सकते हैं। मैंने संशोधित किया कि केवल दो फ्रेम लेआउट का उपयोग करने के लिए रसीद:

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

धन्यवाद। Platypus यहाँ जाने का रास्ता है। अपने डीफ़ पीडीएफ को आपके उदाहरण में बदल दिया और सही काम करता है। अंगूठे ऊपर :) – user1878514

5

यदि आप इसे सादा रिपोर्टलैब में करना चाहते हैं तो आपको यह पता लगाना होगा कि पैराग्राफ को तोड़ना है। यदि आप दस्तावेज़ क्लास सेट अप करने के लिए प्लैटिपस का उपयोग करते हैं, तो आप पेज पर टेक्स्ट डालने के लिए फ्रेम निर्दिष्ट कर सकते हैं और फ्रेम के क्रम निर्धारित करेंगे कि चीजें कहां बहती हैं। जब अनुच्छेद पृष्ठ के बाईं ओर पहले फ्रेम के अंत तक पहुंच जाता है, तो सामग्री स्वचालित रूप से अगले फ्रेम में बह जाती है, जिसे आप इच्छित पृष्ठ प्राप्त करने के लिए पृष्ठ के दाईं ओर स्थित कर सकते हैं।

+0

यह वास्तव में काम करता है कि यह वास्तव में कैसे काम करता है, यह एक अच्छा स्पष्टीकरण है। –

संबंधित मुद्दे