2011-01-18 14 views
14

मैं एक टेबल का उपयोग करता हूं लेकिन, मैं प्रवाहों की स्थिति को नियंत्रित करने के लिए कैनवास में खींचता हूं, क्योंकि मेरे पास एक पीडीएफ में एक टेम्पलेट है, मैं एक पीईपीडीएफ के साथ विलय करता हूं।एक टेबल रिपोर्टलैब में टेक्स्ट लपेटें?

रैप एक टेबल में किया जाता है लेकिन टेक्स्ट ऊपर जाता है, जो मुझे उम्मीद है उतना नीचे नहीं।

ग कैनवास

कोड

from reportlab.pdfgen import canvas 
from reportlab.lib.pagesizes import A4 
from reportlab.lib.styles import getSampleStyleSheet 
from reportlab.platypus import Paragraph, Table 
from reportlab.lib.units cm 

width, height = A4 
styles = getSampleStyleSheet() 

def coord(x, y, unit=1): 
    x, y = x * unit, height - y * unit 
    return x, y 

descrpcion = Paragraph('long paragraph', styles["Normal"]) 
partida = Paragraph('1', styles["Center"]) 
candidad = Paragraph('120', styles["Center"]) 
precio_unitario = Paragraph('$52.00', styles["right"]) 
precio_total = Paragraph('$6240.00', styles["right"]) 

data= [[partida, candidad, descrpcion, precio_unitario, precio_total]] 
table = Table(data, colWidths=[2.05 * cm, 2.7 * cm, 9.6 * cm, 
           2.65 * cm, 2.7 * cm]) 

c = canvas.Canvas(PDF, pagesize=A4) 
table.wrapOn(c, width, height) 
table.drawOn(c, *coord(1.8, 9.6, cm)) 
c.save() 

http://img600.imageshack.us/img600/3203/reportld.jpg

उत्तर

15

विवरण पाठ चला गया इस तालिका की सामग्री की निर्भर जैसे ही आप इसे शैलियों में लपेटते हैं ["सामान्य"] आप अपने पाठ को शैलियों ["बॉडीटेक्स्ट"] में लपेटने का प्रयास कर सकते हैं। यह आपके टेक्स्ट को निर्दिष्ट सेल की चौड़ाई के अनुसार स्वयं को संरेखित करने की अनुमति देगा। आप फ़ॉर्मेटिंग भी शामिल कर सकते हैं जो HTML टेक्स्ट स्वरूपण के समान है।

फिर टेबल में सामग्री को प्रारूपित करने के लिए टेबल स्टाइल का उपयोग करें, उदाहरण के लिए, रंग टेक्स्ट, केंद्र अनुच्छेद, पंक्ति पंक्ति/कॉलम और इसी तरह।

मैं एक काम संस्करण (उदाहरण) के लिए ऊपर दिए गए कोड संपादित:

from reportlab.pdfgen import canvas 
from reportlab.lib.pagesizes import A4, cm 
from reportlab.lib.styles import getSampleStyleSheet 
from reportlab.platypus import Paragraph, Table, TableStyle 
from reportlab.lib.enums import TA_JUSTIFY, TA_LEFT, TA_CENTER 
from reportlab.lib import colors 

width, height = A4 
styles = getSampleStyleSheet() 
styleN = styles["BodyText"] 
styleN.alignment = TA_LEFT 
styleBH = styles["Normal"] 
styleBH.alignment = TA_CENTER 

def coord(x, y, unit=1): 
    x, y = x * unit, height - y * unit 
    return x, y 

# Headers 
hdescrpcion = Paragraph('''<b>descrpcion</b>''', styleBH) 
hpartida = Paragraph('''<b>partida</b>''', styleBH) 
hcandidad = Paragraph('''<b>candidad</b>''', styleBH) 
hprecio_unitario = Paragraph('''<b>precio_unitario</b>''', styleBH) 
hprecio_total = Paragraph('''<b>precio_total</b>''', styleBH) 

# Texts 
descrpcion = Paragraph('long paragraph', styleN) 
partida = Paragraph('1', styleN) 
candidad = Paragraph('120', styleN) 
precio_unitario = Paragraph('$52.00', styleN) 
precio_total = Paragraph('$6240.00', styleN) 

data= [[hdescrpcion, hcandidad,hcandidad, hprecio_unitario, hprecio_total], 
     [partida, candidad, descrpcion, precio_unitario, precio_total]] 

table = Table(data, colWidths=[2.05 * cm, 2.7 * cm, 5 * cm, 
           3* cm, 3 * cm]) 

table.setStyle(TableStyle([ 
         ('INNERGRID', (0,0), (-1,-1), 0.25, colors.black), 
         ('BOX', (0,0), (-1,-1), 0.25, colors.black), 
         ])) 

c = canvas.Canvas("a.pdf", pagesize=A4) 
table.wrapOn(c, width, height) 
table.drawOn(c, *coord(1.8, 9.6, cm)) 
c.save() 
+0

धन्यवाद, यह एक अच्छा समाधान है, मेरे जवाब की तरह हैक नहीं। – Alquimista

+0

टेबल शैली ('वैल्यून', (0,0), (- 1, -1), 'TOP) – Alquimista

+0

सहायता के लिए कुछ स्वीकृति। बहुत बुरा, रिपोर्टलैब लंबी तालिका का समर्थन नहीं करता है, अन्यथा यह एक महान पीडीएफ रिपोर्ट निर्माता होगा। –

0

मुझे पता है कि पोस्टस्क्रिप्ट के संदर्भ में कम, बाएँ कोने है। मुझे लगता है कि पीडीएफ एक जैसा है, इसलिए आप वाई मान से नीचे जाने के लिए घटाते हैं। फ़ंक्शन में शुरुआत और समापन "y" मान मुद्रित करें ताकि यह देखने के लिए कि वे वाक्य की लंबाई के आधार पर "y" मान को कैसे बदल रहे हैं और समायोजित कर रहे हैं। और फ़ंक्शन कैसे जानता है कि "ऊंचाई" क्या है? मैं ReportLab का उपयोग करता हूं लेकिन अगर आप एक पोस्ट करना चाहते हैं तो शायद एक विशिष्ट उदाहरण में मदद कर सकते हैं।

+0

हाँ मुझे पता है कि समन्वय एक PDF में कार्तीय की तरह है, [कोड] चौड़ाई, ऊंचाई = ए 4 [/ कोड] – Alquimista

3

स्वत: उत्तर:

def coord(x, y, height, unit=1): 
    x, y = x * unit, height - y * unit 
    return x, y 

w, h = table.wrap(width, height) 
table.wrapOn(c, width, height) 
table.drawOn(c, *coord(ml - 0.05, y + 4.6, height - h, cm)) 

चाल में है "ऊंचाई - ज", ज मेज की ऊंचाई है और

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