2011-01-25 13 views
10

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

  Story.append(Paragraph(header_string, styleH)) 
      Story.append(table) 

मैं कैसे समूह तालिका के साथ पैरा (लेटेक्स में मैं उन्हें एक ही वातावरण में डाल दिया होगा) कर सकते हैं ताकि एक पेज ब्रेक, पैरा और टेबल के मामले में एक साथ रहो? वर्तमान में अनुच्छेद कभी-कभी एक पृष्ठ के अंत में तैरता है और तालिका अगले पृष्ठ के शीर्ष पर शुरू होती है।

उत्तर

5
इस

समाधान है कि मैं reportlab स्रोत कोड के माध्यम से जा पाया जाता है:

paragraph = Paragraph(header_string, styleH) 
paragraph.keepWithNext = True 
Story.append(paragraph) 
Story.append(table) 
+0

मैं का उपयोग कर पसंद 'कहानी [-1] .keepWithNext = TRUE' यह कोड छोटे और स्वच्छ बनाता है और आसानी से जोड़ा जा सकता है के रूप में और परिवर्तनीय नाम बदलने के बिना हटा दिया। वस्तुओं को लूप में एक साथ रखने के लिए उपयोगी है क्योंकि आप लूप में 'स्टोरी [-1] .keepWithNext = True' सेट कर सकते हैं और फिर' कहानी [-1] .keepWithNext = False' लूप में जोड़े गए सामान को डिस्कनेक्ट करने के बाद जो कुछ भी जोड़ा जाता है उससे। – jenniwren

8

आप उन्हें इतना की तरह, एक KeepTogether flowable में एक साथ रखा करने की कोशिश कर सकते हैं:

Story.append(KeepTogether([Paragraph(header_string, styleH), table]) 

हालांकि पता है कि, पिछले मैं जाँच की हो, कार्यान्वयन सही नहीं था और अभी भी बहुत जल्दी-जल्दी आइटम विभाजित होगा। मैं जानता हूँ कि यह एक एकल flowable एक साथ रखते हुए कि अन्यथा, विभाजित हैं आप की तरह है, तो कहने के लिए थे की एक अच्छा काम करता है:

Story.append(KeepTogether(Paragraph(header_string, styleH)) 

तो उस पैरा विभाजन जब तक यह असंभव था यह होने के लिए नहीं के लिए नहीं मिलेगा।

KeepTogether आप के लिए काम नहीं करता है, मैं अपने पैराग्राफ और इसके अंदर तालिका के साथ एक कस्टम Flowable बनाने सुझाव देंगे और फिर लेआउट के दौरान सुनिश्चित करें कि आपके कस्टम Flowable उपवर्ग में ही विभाजित किया जा करने की अनुमति नहीं हैं।