web-dev-qa-db-ja.com

PythonのReportLab Canvasでフォントを設定する方法は?

Reportlabを使用してPDFを作成しています。次の方法でフォントを設定しようとすると、KeyErrorが表示されます。

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

しかし、'Courier' の代わりに 'Tahoma'問題ありません。タホマはどのように使用できますか?

36
srisar

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メソッドがあります。

60
Reiner Gerecke

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フォントを使用しようとしていて、そのフォントをすべてのサーバーで使用できるようにしたい場合は、次のことをお勧めします。

  • フォントをプロジェクトの任意のディレクトリに追加します。例:/ project_root/app/lib/reportlabs/fonts /
  • 設定に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'))
    
6

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

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

すべてのコーディングにUTF8を使用します。:)

0
Dark Matter