まごんの駄文

ぽんこつSEが勉強したことをアウトプットするためだけのブログです。

reportlabでPDFに日本語を書く

reportlabで日本語PDFを出力する。

from reportlab.pdfgen import canvas
from reportlab.pdfbase import pdfmetrics
from reportlab.lib.pagesizes import A3, portrait
from reportlab.pdfbase.ttfonts import TTFont
from reportlab.lib.units import mm

class Test():
    c = None
    def __init__(self):
        self.c = canvas.Canvas("test.pdf",pagesize=portrait(A3))
        self.height, self.width = A3
        pdfmetrics.registerFont(TTFont('hogehoge',"C:\\Windows\\Fonts\\msgothic.ttc"))
        self.c.setFont('hogehoge',10)

    def __del__(self):
        del self.c

    def draw(self):
        self.c.drawString(0,self.height-20*mm, "ああああ")

if __name__== '__main__':
    test = Test()
    test.draw()
    test.c.save()
    del test

つまり、registerFontでシステムにインストールされてるフォントを、
適当に名前つけてあげてCanvasにsetFontしてあげればいいわけだ。

ちなみにA3は横縦の値が入ってるタプル。

と思ったらもっと楽な方法があった。

class Test():
    def __init__(self):
        self.fontname = 'hogehoge'
        pdfmetrics.registerFont(TTFont(self.fontname,"C:\\Windows\\Fonts\\msgothic.ttc"))
        self.c = canvas.Canvas("test.pdf",pagesize=portrait(A3),initialFontName=self.fontname)
        self.height, self.width = A3

フォントをregisterFontして、CanvasにinitialFontNameとして渡すだけでも行けた。