2009-12-11 15 views
52

मेरे पास पीडीएफ फॉर्म हैं जो मैं अपने डीजेंगो वेब एप्लिकेशन से डेटा के साथ ऑटोपॉप्लेट करना चाहता हूं और फिर उपयोगकर्ता को डाउनलोड करने की पेशकश करता हूं। क्या पाइथन लाइब्रेरी मुझे आसानी से पीडीएफ फॉर्मों को पॉप-अप करने देगी? इन रूपों का मुद्रित होना है।मैं Django/पायथन में पीडीएफ फॉर्म को स्वतः कैसे पॉप्युलेट कर सकता हूं?

उत्तर

72

रिपोर्टलैब बहुत बढ़िया है यदि आप बहुत गतिशील पीडीएफ उत्पन्न कर रहे हैं और इसे प्रोग्रामेटिक रूप से नियंत्रित करने की आवश्यकता है: डेटा और लेआउट।

मौजूदा पीडीएफ में फॉर्म भरने के लिए, रिपोर्टलैब अधिक है और आपको मूल रूप से पीडीएफ को एक फॉर्म के साथ पीडीएफ लेने के बजाय रिपोर्टबैब में स्क्रैच से पुनर्निर्माण करना होगा।

पीडीएफ फॉर्म FDF डेटा के साथ काम करते हैं। मैंने थोड़ी देर पहले एक पीएचडी एफडीएफ लाइब्रेरी को पाइथन में पोर्ट किया था जब मुझे ऐसा करना था और इसे fdfgen के रूप में जारी किया गया था। मैं उस फॉर्म के डेटा के साथ एक एफडीएफ फ़ाइल उत्पन्न करने के लिए उपयोग करता हूं, फिर एफडीएफ को पीडीएफ फॉर्म में धक्का देने और आउटपुट उत्पन्न करने के लिए pdftk का उपयोग करें।

पूरी प्रक्रिया इस तरह काम करता है:

  1. आप (या एक डिजाइनर) एक्रोबेट या जो कुछ भी में पीडीएफ डिजाइन और प्रपत्र फ़ील्ड्स चिह्नित करने और क्षेत्र के नाम को ध्यान में रखना (मैं वास्तव में कैसे यकीन नहीं है यह किया जाता है; हमारा डिजाइनर यह कदम करता है)। मान लें कि आपके फॉर्म में फ़ील्ड "नाम" और "टेलीफोन" है।

    pdftk form.pdf fill_form data.fdf output output.pdf flatten 
    

    और बाहर भरा, चपटा (जिसका अर्थ है एक वहाँ अब संपादन योग्य हैं कि:

    from fdfgen import forge_fdf 
    fields = [('name','John Smith'),('telephone','555-1234')] 
    fdf = forge_fdf("",fields,[],[],[]) 
    fdf_file = open("data.fdf","w") 
    fdf_file.write(fdf) 
    fdf_file.close() 
    
  2. तो फिर तुम विलय और समतल pdftk चलाएँ:

  3. उपयोग fdfgen एक FDF फ़ाइल बनाने के लिए फार्म फ़ील्ड) पीडीएफ output.pdf में होगा।

यह थोड़ा जटिल है, और pdftk स्थापित करने के लिए एक दर्द हो सकता है (एक जावा ढेर की आवश्यकता है और वहाँ है कि चारों ओर काम करने की उबंटू 9.10 पर कीड़े कर रहे हैं), लेकिन यह सबसे सरल प्रक्रिया मैं कर लिया है है अभी तक आओ और वर्कफ़्लो सुविधाजनक है (यानी, हमारे डिजाइनर अपने इच्छित पीडीएफ में सभी लेआउट परिवर्तन कर सकते हैं और जब तक वे फ़ील्ड के नाम नहीं बदलते हैं, तो मैं नया ड्रॉप कर सकता हूं और सबकुछ बाकी रहता है काम कर रहे)।

मैं fdfgen पर दस्तावेज़ों की कमी के लिए क्षमा चाहता हूं। forge_fdf() वास्तव में एकमात्र ऐसा कार्य है जिसकी आपको आवश्यकता होनी चाहिए और इसमें तर्कों को समझाने के लिए एक दस्तावेज़ है। मैंने इसके साथ और अधिक करने के लिए अभी तक काफी कुछ हासिल नहीं किया है।

+0

इस नमूना कोड को आजमाते समय मुझे यह त्रुटि मिलती है: यूनिकोड एन्कोड त्रुटि: 'ascii' कोडेक स्थिति में वर्णों को एन्कोड नहीं कर सकता 10-13: क्रमशः श्रेणी में नहीं (128) – MikeN

+3

utf का उपयोग करके अपनी फ़ाइल लिखने का प्रयास करें: "fdf_file = codecs.open ("data.fdf", "w", "utf-8") "। आपको पहले "कोडेक्स आयात करना होगा"। मुझे विशेष चरित्र एन्कोडिंग के साथ एक समस्या भी मिली जो मैं लेखक को रिपोर्ट करूंगा। –

+0

+1 और अधिक यदि मैं कर सकता था। एफडीएफजेन के लिए धन्यवाद। मैं इसे सीएसवी फ़ाइल से फॉर्मों का एक टन भरने के लिए बैच करने में कामयाब रहा। –

4

reportlab आज़माएं।

इसके अलावा, Outputting PDFs पर एक गैंडर लें।


संपादित

मैं एक और सोचा था (लेकिन यह मदद नहीं करेगा अगर आप पहले से ही कर रहे हैं पीडीएफ फाइलों है, और मुझे @ thraxil का जवाब बेहतर की तरह)।

इस साल की शुरुआत में मैंने एक परियोजना पर काम किया जहां मैंने निरंतर शिक्षा पाठ्यक्रमों के लिए "पूरा होने के प्रमाण पत्र" उत्पन्न किए। मैंने जिन कोणों को देखा, उनमें से एक सीधे एक उचित स्टाइल वेब पेज से पीडीएफ उत्पन्न करने की कोशिश कर रहा था (कुछ सर्वर-साइड "पीडीएफ पर प्रिंट करें")।

मुझे मिले उपकरण में से एक wkhtmltopdf था। यह एक स्व-निहित वेबकिट ब्राउज़र है जो एक यूआरएल को पीडीएफ में बदल देगा, और बहुत अच्छे नतीजों के साथ।

विचार यह है कि आप जो भी चाहते हैं (छवियों सहित) वाले पृष्ठ को एक साथ रखने के लिए django के टेम्पलेट इंजन का उपयोग करते हैं, इसे wkhtmltopdf पर यूआरएल पास करें, आउटपुट लें और इसे उपयोगकर्ता को वापस कर दें।

मुझे दृष्टिकोण पसंद आया क्योंकि यह लागू करना वास्तव में आसान है (केवल एक पाइप खोलें), आपको स्रोत पीडीएफ फाइलों को सर्वर तक पहुंचने के बारे में चिंता करने की ज़रूरत नहीं है, और आप एचटीएमएल को बदलकर पीडीएफ को फिर से डिजाइन कर सकते हैं।

+1

बड़ी उपयोगिता उल्लेख के लिए +1। यह प्रोग्रामर को एचटीएमएल/सीएसएस में दस्तावेज़ डिजाइन करने में सक्षम बनाता है, और __very__ अच्छी गुणवत्ता वाले पीडीएफ में परिवर्तित करता है। – gorsky

5

यह कोड सेगमेंट भी देखें जो डीजेंगो में एक पीडीएफ व्यू बनाने के लिए एक तैयार समाधान है जो ऊपर थैक्सिल के समाधान पर बनाता है। Github उपयोगकर्ता zyegfryed के लिए धन्यवाद। `Wkhtmltopdf` -

https://gist.github.com/918403

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

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