2009-10-28 7 views
17

मैं इस स्निपेट का उपयोग कर टेम्पलेट से कोई पीडीएफ उत्पन्न करने के लिए कोशिश कर रहा हूँ:क्या पीजीएफ उत्पन्न करने का कोई तरीका है जिसमें डीजेंगो टेम्पलेट से पीसा के साथ गैर-असीसी प्रतीक शामिल हैं?

def write_pdf(template_src, context_dict): 
    template = get_template(template_src) 
    context = Context(context_dict) 
    html = template.render(context) 
    result = StringIO.StringIO() 
    pdf = pisa.pisaDocument(StringIO.StringIO(html.encode("UTF-8")), result) 
    if not pdf.err: 
     return http.HttpResponse(result.getvalue(), mimetype='application/pdf') 
    except Exception('PDF error') 

सभी गैर-लैटिन प्रतीकों सही ढंग से नहीं दिखा रहे हैं, टेम्पलेट और दृश्य का उपयोग कर सहेजे जाते हैं UTF-8 एन्कोडिंग।

मैंने एएनएसआई के रूप में दृश्य को सहेजने की कोशिश की है और फिर उपयोगकर्ता यूनिकोड (एचटीएमएल, "यूटीएफ -8") पर, लेकिन यह TypeError फेंकता है।

इसके अलावा मैंने सोचा कि शायद ऐसा इसलिए है क्योंकि डिफ़ॉल्ट फोंट किसी भी तरह utf-8 का समर्थन नहीं करते हैं, इसलिए पीसा दस्तावेज़ीकरण के अनुसार मैंने शैली अनुभाग में टेम्पलेट बॉडी में फ़ॉन्टफ़ेस सेट करने का प्रयास किया।

अभी भी कोई परिणाम नहीं दिया गया है।

क्या किसी के पास इस मुद्दे को हल करने के लिए कुछ विचार हैं?

उत्तर

28

को

pdf = pisa.pisaDocument(StringIO.StringIO(html), result, encoding='UTF-8') 

या इस उत्तर चेकआउट के साथ की जगह

pdf = pisa.pisaDocument(StringIO.StringIO(html.encode("UTF-8")), result) 

यह करता है मेरे लिए काम:

pdf = pisa.pisaDocument(StringIO.StringIO(html.encode("UTF-8")), result, encoding='UTF-8') 
3
+1

के बाद replaceing पीडीएफ अपठनीय डेटा से भरा, समाधान की जाँच की, विधि मैं क्या उपयोग से बहुत अलग नहीं है, लेकिन मैं अभी भी, यह परीक्षण किया html.encode साथ ("ISO-8859-1") यह मिल गया फेंकता है: "'लैटिन -1' कोडेक स्थिति 0 में \ ufeff 'अक्षर को एन्कोड नहीं कर सकता है: क्रमशः श्रेणी में नहीं (256)" एन्कोड ("यूटीएफ -8") के साथ यह पीडीएफ देता है लेकिन जैसा ही मैं पहले से मिला है - गैर-ascii प्रतीकों को अभी भी ठीक से प्रस्तुत नहीं किया जाता है। – mihailt

+0

@ मिहाइलट आपको कोई समाधान मिला है? –

+0

वास्तव में इसे जोड़ना: 'एन्कोडिंग = 'यूटीएफ -8' ने एन्कोडिंग पॉलिश वर्णों के साथ मेरी समस्या हल की – andi

2

आप अपने Djan संशोधित करने की आवश्यकता टेम्पलेट जाओ। स्टाइलशीट में एक नया फ़ॉन्ट चेहरा जोड़ें जो आपके दस्तावेज़ में उपयोग किए गए वर्णों के साथ एक फ़ॉन्ट फ़ाइल से लिंक होगा। और वह फ़ॉन्ट फ़ाइल आपके सर्वर से सुलभ होनी चाहिए (उबंटू के तहत आप/usr/share/fonts/truetype/निर्देशिका में फोंट के साथ फाइलें पा सकते हैं)।

@font-face { 
    font-family: DejaMono; 
    src: url(font/DejaVuSansMono.ttf); 
} 

तो यदि आप अगले एचटीएमएल कोड है:

div { font-family: DejaMono; } 

यह मैं जब के लिए काम करता है:

<div>Some non-latin characters</div> 

आप इस सीएसएस नियम के साथ DejaMono फ़ॉन्ट में है कि पाठ प्रदर्शित कर सकते हैं उदाहरण के लिए मैं सिरिलिक पात्रों के साथ पीडीएफ दस्तावेज उत्पन्न करता हूं।

0

आप pisaDocument विधि के बजाय createPDF बुला रहे हैं, तो आप उपयोग कर सकते हैं

pisa.CreatePDF(html.encode('UTF-8'), response, link_callback=fetch_resources, encoding='UTF-8') 
1

मैं सिरिलिक वर्ण के साथ एक ही समस्या का सामना करना पड़ा। अपने HTML फ़ाइल में बाहर फ़ॉन्ट फ़ाइल 1. प्वाइंट

2. दो "पीसा" रूट पथ (इतना है कि यह सापेक्ष पथ से फ़ॉन्ट फ़ाइल खोजने) में:

समाधान दो कदम निहित मेरे मामले में यह इस

pdf = pisa.pisaDocument(html, result, path=PATH_TO_DJANGO_PROJECT) 

की तरह कुछ था, क्योंकि फोंट PATH_TO_DJANGO_PROJECT/फ़ाइलें/एरियल पर रखा गया था।ttf

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

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