Reportlabを使用してPDFを作成しています。次の方法でフォントを設定しようとすると、KeyError
が表示されます。
pdf = Canvas('test.pdf')
pdf.setFont('Tahoma', 16)
しかし、'Courier'
の代わりに 'Tahoma'
問題ありません。タホマはどのように使用できますか?
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!")
Canvasオブジェクトには、現在登録されている(したがって使用可能な)フォントをすべて返すgetAvailableFonts
メソッドがあります。
Reiner's answer から始めます。
注意点が1つあります。
Reportlabは定義済みフォルダーのフォントのみを検索します:
TTFSearchPath = (
'c:/winnt/fonts',
'c:/windows/fonts',
'/usr/lib/X11/fonts/TrueType/',
'/usr/share/fonts/truetype',
'/usr/share/fonts', #Linux, Fedora
'/usr/share/fonts/dejavu', #Linux, Fedora
'%(REPORTLAB_DIR)s/fonts', #special
'%(REPORTLAB_DIR)s/../fonts', #special
'%(REPORTLAB_DIR)s/../../fonts',#special
'%(CWD)s/fonts', #special
'~/fonts',
'~/.fonts',
'%(XDG_DATA_HOME)s/fonts',
'~/.local/share/fonts',
#mac os X - from
#http://developer.Apple.com/technotes/tn/tn2024.html
'~/Library/Fonts',
'/Library/Fonts',
'/Network/Library/Fonts',
'/System/Library/Fonts',
)
インターネットからダウンロードしたttfフォントを使用しようとしていて、そのフォントをすべてのサーバーで使用できるようにしたい場合は、次のことをお勧めします。
設定にBASE_DIR/ROOT_DIRのようなものがあることを確認してください:
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
次の行をpdfを生成するpythonファイルに追加します。
import reportlab
from Django.conf import settings
reportlab.rl_config.TTFSearchPath.append(str(settings.BASE_DIR) + '/app/lib/reportlabs/fonts')
pdfmetrics.registerFont(TTFont('Copperplate', 'Copperplate-Gothic-Bold.ttf'))
DejaVuSansフォントをアプリケーションに追加することで、私の問題は解決しました。ここにコードのスニペットがあります
pdfmetrics.registerFont(TTFont('DejaVuSans','DejaVuSans.ttf'))
すべてのコーディングにUTF8を使用します。:)