2011-02-04 107 views
28

私はpdfを作成するためにreportlabを使用しています。pythonでreportlab Canvasのフォントを設定する方法は?

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

しかし、私が代わりに'Tahoma''Courier'を使用する場合、問題はありません。私は次のメソッドを使用してフォントを設定しようとすると、私はKeyErrorを取得します。タホマをどうやって使うことができますか?

答えて

41

Perhabs TahomaはTrueTypeフォントであり、最初に登録する必要があります。 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

おかげで、それが働いていた、このような方法でOpenTypeフォントを使用することがとにかくあり... – srisar

+0

最終私はそれがopentypeをサポートしていないことを確認した。最近私はOTFを使う必要があったので、fontforgeでTTFに変換することができました。しかし、OTFは新しいフォーマットなので、いくつかの機能が失われる可能性があります。私にとっては幸運なことに、その時は違いはありませんでした。 –

+0

私はConsolasフォントを使いたいと思っていましたが、それはopentypeのようです。とにかく素晴らしいチップのおかげで.. – srisar

0

DejaVuSansフォントをアプリケーションに追加すると、私の問題が解決しました。ここ はコード

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

の抜粋であり、すべての符号化のためにUTF8を使用します。:)あなたが私の一日行わ

関連する問題