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

f:id:else-something:20161107192336p:plain

便利機能

キャンパス作成時に原点を左上に指定する。

これを指定すると、drawInlineImageなどで描画される画像が上下反転する模様。うーむ。 retCanvas = canvas.Canvas('./sample.pdf', bottomup=False)

fontについて(TTFしか使えないみたい)

手元の環境で実験しつつ、WEBをさまよってみている限りだと、
OpenTypeのフォント(.ttcや.otf)はフォントとして使えないみたい。

OTFは昔は使えたとの話があるものの、現在はサポートしておらず、

reportlab.pdfbase.ttfonts.TTFError: TTF file "SourceHanSansHW-Bold.otf": postscript outlines are not supported という実行時エラーを履いてしまう。

画像の描画

インポート

from reportlab.platypus import Frame, Image

もしくは、PILで画像を準備しても良い。

from PIL import Image

どうも、reportlabに直接Pathを指定する場合は、jpeg画像に限られる、とか。
しかし、手元でやってみたらpngも通ったようなのだけれども、、、

それにしても、公式にはjpegのみ。 jpeg以外の画像形式を利用する場合は、PILで画像を読み込むのが良い様子。

画像の描画

# retCanvas.drawInlineImage(画像ファイルのパス,x,y,width,height)


retCanvas.drawInlineImage('logo.jpg',50*mm,50*mm,width=30*mm,height=6*mm)

実際にやってみる

#!/usr/bin/env python
# -*- coding: utf-8 -*-

from reportlab.pdfgen import canvas
from reportlab.platypus import Frame, Image
from reportlab.lib.units import mm
from reportlab.pdfbase.pdfmetrics import registerFont
from reportlab.pdfbase.ttfonts import TTFont


registerFont(TTFont('TakaoExGothic','TakaoExGothic.ttf'))

retCanvas = canvas.Canvas('./sample.pdf', bottomup=False)
retCanvas.drawInlineImage('flog2.jpg',50*mm,50*mm,width=300,height=225)
retCanvas.setFont('TakaoExGothic',25)
retCanvas.drawString(10*mm,250*mm,'x=10*mm y=250*mm')
retCanvas.drawString(10*mm,230*mm,'x=10*mm y=230*mm')
retCanvas.drawString(10*mm,220*mm,'bottomup=Falseにすると画が上下反転してる。。。')
retCanvas.save()

こんなPDFになるはず。

f:id:else-something:20161107192414p:plain