2011-02-04 12 views
28

मैं पीडीएफ बनाने के लिए reportlab का उपयोग कर रहा हूँ।पाइथन में रिपोर्टलैब कैनवास में कोई फ़ॉन्ट कैसे सेट करें?

pdf = Canvas('test.pdf') 
pdf.setFont('Tahoma', 16) 

लेकिन अगर मैं 'Tahoma' के बजाय 'Courier' का उपयोग करने में कोई समस्या नहीं है: जब मैं निम्न विधि का उपयोग कर एक फ़ॉन्ट सेट करने का प्रयास, मैं एक KeyError मिलता है। मैं ताहोमा का उपयोग कैसे कर सकता हूं?

उत्तर

41

पेरहास ताहोमा एक ट्रू टाइप फ़ॉन्ट है, और आपको पहले इसे पंजीकृत करने की आवश्यकता है। ReportLab के उपयोगकर्ता पुस्तिका के अनुसार यदि आप ऐसा करने की जरूरत है:

from reportlab.pdfbase import pdfmetrics 
from reportlab.pdfbase.ttfonts import TTFont 

pdfmetrics.registerFont(TTFont('Vera', 'Vera.ttf')) 
pdfmetrics.registerFont(TTFont('VeraBd', 'VeraBd.ttf')) 
pdfmetrics.registerFont(TTFont('VeraIt', 'VeraIt.ttf')) 
pdfmetrics.registerFont(TTFont('VeraBI', 'VeraBI.ttf')) 

canvas.setFont('Vera', 32) 
canvas.drawString(10, 150, "Some text encoded in UTF-8") 
canvas.drawString(10, 100, "In the Vera TT Font!") 

कैनवास वस्तु एक getAvailableFonts विधि है कि सभी वर्तमान में पंजीकृत (और इसलिए प्रयोग करने योग्य) फोंट लौट जाना है।

+0

धन्यवाद आप मेरा दिन बना दिया, यह काम किया, इस तरह से ओपन टाइप फ़ॉन्ट का उपयोग करने वहाँ वैसे भी है ... – srisar

+0

अंतिम समय मैंने चेक किया कि इसे opentype के लिए कोई समर्थन नहीं था। हाल ही में मुझे ओटीएफ का उपयोग करने की ज़रूरत है, मैं इसे फ़ॉन्ट फोर्ज के साथ टीटीएफ में परिवर्तित कर सकता हूं। लेकिन चूंकि ओटीएफ एक नया प्रारूप है, तो आप कुछ विशेषताओं को खो सकते हैं। सौभाग्य से मेरे लिए इस समय कोई फर्क नहीं पड़ता। –

+0

मैं कंसोलस फ़ॉन्ट का उपयोग करना चाहता था, लेकिन यह अवांछित लगता है, इसलिए मैंने पूछा। वैसे भी महान टिप के लिए धन्यवाद .. – srisar

0

आवेदन के लिए DejaVuSans फ़ॉन्ट जोड़कर मेरी समस्या हल हो गई। यहाँ कोड

pdfmetrics.registerFont(TTFont('DejaVuSans','DejaVuSans.ttf')) 

का टुकड़ा है और यह सब कोडिंग के लिए UTF8 का उपयोग करें। :)

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