pythonでReportLabを使ったPDFファイルの作り方〜その2〜
便利機能
キャンパス作成時に原点を左上に指定する。
これを指定すると、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になるはず。