読者です 読者をやめる 読者になる 読者になる

pythonでReportLabを使ったPDFファイルの作り方

reportlabを利用してpdfファイルを作る

pdfを作ろうと思って調べてたんだけど、公式ドキュメントはpdfで提供されてるみたいで、なんか使いにくい。

よさげなまとめも見つけられなかったので、簡単にまとめてみる。

まずはキャンバスの宣言とテキスト周り。

フォントに日本語のTrueTypeを宣言するので、日本語もオッケーなはず。

reportlab公式系のリンク

ダウンロードはこちらから。
reportlab 3.3.0 : Python Package Index

ドキュメントはこちらの公式サイトから
ReportLab - Content to PDF Solutions

reportlabの利用準備

from reportlab.pdfgen import canvas
from reportlab.lib.units import mm

TTフォントの利用準備

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

利用フォントの宣言

#TakaoEXゴシック体を利用する場合
registerFont(TTFont('TakaoExGothic','TakaoExGothic.ttf'))

キャンバスの準備

# キャンバスと出力ファイルの初期化。
retCanvas = canvas.Canvas('./Output.pdf')
retCanvas.saveState()

作者やタイトルなど基本情報(設定しなくてもOK)

retCanvas.setAuthor('Yuzu Tanakaa')
retCanvas.setTitle('reportlabの使い方')
retCanvas.setSubject('サブジェクトもつけれるみたい')

PDFのサイズを決定する

pdfWidth=240.0*mm
pdfHeight=290.0*mm
retCanvas.setPageSize((pdfWidth,pdfHeight))

文字の追加

利用フォント文字サイズの指定

下記文字の追加の前に行う。
途中でフォント・サイズを変えたい場合は、再度指定すればその後の追加文字に反映される様子。

retCanvas.setFont("TakaoExGothic", 16)

文字の追加

#x,yにテキスト追加
retCanvas.drawString(x, y, text)

#x,yから右寄せでテキスト追加
retCanvas.drawRightString(x, y, text)

#名前からして中央寄せなんだと思うけど、
#ドキュメントに記載があったが手元の環境では、
#メソッドが見当たらず…使えない。なぜ?
retCanvas.drawCentredString(x, y, text) 

キャンバスのx,y座標について

x,yはそれぞれ横縦を指定するんだけど、始点は左下。
一般的なグラフと同じ座標系なので要注意。

複数行をまとめて追加する。

textobject = canvas.beginText(x, y) #座標を指定する。
textobject.setTextOrigin(x, y) #もしくは座標をこう指定する。この場合、beginTextでは、引数は無し。

#使用するフォント・サイズの指定
textobject.setFont("TakaoExGothic", 8)
#テキストの設定
textobject.textLines('''
ここにテキストを記述する。
改行も反映される様子。
ただし、自動改行はされないっぽい。なんか設定あるのかな。。。
''')
#キャンバスへの追加
canvas.drawText(textobject)