2012-11-13 10 views
7

मेरे पास एक रिपोर्टलैब SimpleDocTemplate है और इसे गतिशील पीडीएफ के रूप में लौटा रहा है। मैं कुछ Django मॉडल मेटाडेटा के आधार पर इसकी सामग्री उत्पन्न कर रहा हूं।मौजूदा पीडीएफ में नए रिपोर्ट में पीडीएफ को फ्लैगबल्स के माध्यम से पीडीएफ

buff = StringIO() 
doc = SimpleDocTemplate(buff, pagesize=letter, 
         rightMargin=72,leftMargin=72, 
         topMargin=72,bottomMargin=18) 
Story = [] 

मैं आसानी से Story सूची में Entry मॉडल से शाब्दिक मेटाडाटा जोड़ सकते हैं निर्मित होने की बाद में:: यहाँ मेरे टेम्पलेट सेटअप है

ptext = '<font size=20>%s</font>' % entry.title.title() 
    paragraph = Paragraph(ptext, custom_styles["Custom"]) 
    Story.append(paragraph) 

और फिर उत्पन्न पीडीएफ द्वारा जवाब में वापस करने SimpleDocTemplatebuild पर बुला: मॉडल पर

doc.build(Story, onFirstPage=entry_page_template, onLaterPages=entry_page_template) 

pdf = buff.getvalue() 
resp = HttpResponse(mimetype='application/x-download')  
resp['Content-Disposition'] = 'attachment;filename=logbook.pdf' 
resp.write(pdf) 
return resp 

एक मेटाडाटा क्षेत्र एक फ़ाइल attachm है ईएनटी। जब वे फ़ाइल अनुलग्नक पीडीएफ होते हैं, तो मैं उन्हें उस कहानी में विलय करना चाहता हूं जो मैं उत्पन्न कर रहा हूं; आईई का अर्थ है रिपोर्टलाब "प्रवाह योग्य" प्रकार का पीडीएफ।

मैं pdfrw का उपयोग करके ऐसा करने का प्रयास कर रहा हूं, लेकिन कोई भाग्य नहीं है। आदर्श रूप में मैं सिर्फ कॉल करने के लिए खुशी होगी:

from pdfrw import PdfReader 
pdf = pPdfReader(entry.document.file.path) 
Story.append(pdf) 

और संलग्न मौजूदा कहानी सूची में पीडीएफ, अंतिम दस्तावेज़ की पीढ़ी में शामिल किए जाने के रूप में उपरोक्त।

किसी के पास कोई विचार है? मैं pagexobj का उपयोग कर पीडीएफ बनाने के लिए, इस उदाहरण का अनुसरण करने की कोशिश कर कुछ इसी तरह की कोशिश की:

http://code.google.com/p/pdfrw/source/browse/trunk/examples/rl1/subset.py

from pdfrw.buildxobj import pagexobj 
from pdfrw.toreportlab import makerl 

pdf = pagexobj(PdfReader(entry.document.file.path)) 

लेकिन किसी भी भाग्य या तो नहीं था। क्या कोई मुझे मौजूदा पीडीएफ फ़ाइल को एक रिपोर्टलैब प्रवाह योग्य में विलय करने का सबसे अच्छा तरीका बता सकता है? मैं इस सामान के साथ अच्छा नहीं हूं और अब दिनों के लिए पीडीएफ-पीढ़ी पर अपने सिर को टक्कर लगी हूं। :) किसी भी दिशा की सराहना की!

+0

मुझे लगता है कि आप ReportLab के भुगतान संस्करण के साथ ऐसा कर सकते हैं। –

+0

उह, मुझे नहीं लगता कि ReportLab का भुगतान संस्करण मेरे लिए एक विकल्प है, दुर्भाग्य से। :(किसी के पास कोई विकल्प है? – kyleturner

उत्तर

1

मेरे पास अभी एक परियोजना में एक समान कार्य था। मैंने विलय को सुविधाजनक बनाने के लिए पीडीएफ फाइलें और pyPDF उत्पन्न करने के लिए reportlab (ओपन सोर्स संस्करण) का उपयोग किया। मेरी आवश्यकताओं में थोड़ा अलग था कि मुझे बस प्रत्येक अनुलग्नक से एक पृष्ठ की आवश्यकता थी, लेकिन मुझे यकीन है कि यह सामान्य विचार पाने के लिए शायद आपके पास पर्याप्त है।

from pyPdf import PdfFileReader, PdfFileWriter 

def create_merged_pdf(user): 
    basepath = settings.MEDIA_ROOT + "/" 
    # following block calls the function that uses reportlab to generate a pdf 
    coversheet_path = basepath + "%s_%s_cover_%s.pdf" %(user.first_name, user.last_name, datetime.now().strftime("%f")) 
    create_cover_sheet(coversheet_path, user, user.performancereview_set.all()) 

    # now user the cover sheet and all of the performance reviews to create a merged pdf 
    merged_path = basepath + "%s_%s_merged_%s.pdf" %(user.first_name, user.last_name, datetime.now().strftime("%f")) 

    # for merged file result 
    output = PdfFileWriter() 

    # for each pdf file to add, open in a PdfFileReader object and add page to output 
    cover_pdf = PdfFileReader(file(coversheet_path, "rb")) 
    output.addPage(cover_pdf.getPage(0)) 

    # iterate through attached files and merge. I only needed the first page, YMMV 
    for review in user.performancereview_set.all(): 
     review_pdf = PdfFileReader(file(review.pdf_file.file.name, "rb")) 
     output.addPage(review_pdf.getPage(0)) # only first page of attachment 

    # write out the merged file 
    outputStream = file(merged_path, "wb") 
    output.write(outputStream) 
    outputStream.close() 
1

मैंने अपनी समस्या को हल करने के लिए निम्न श्रेणी का उपयोग किया। यह पीडीएफ को वेक्टर पीडीएफ छवियों के रूप में सम्मिलित करता है। यह बहुत अच्छा काम करता है क्योंकि मुझे सामग्री की एक सारणी की आवश्यकता होती है। प्रवाह योग्य वस्तु ने टीओसी कार्यक्षमता में एक आकर्षण की तरह काम करने की अनुमति दी।

Is there a matplotlib flowable for ReportLab?

नोट: यदि आप फ़ाइल में एकाधिक पृष्ठ है, तो आप वर्ग थोड़ा सा संशोधन करना है। नमूना वर्ग को पीडीएफ के पहले पृष्ठ को पढ़ने के लिए डिज़ाइन किया गया है।

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