PDF生成 (ReportLab)
PDFの生成は結構な需要があります。 公開されているライブラリも複数ありますが、日本語の使用が出来るもの、となると限られてきます。 オススメのライブラリはreportlabです。
まずは下記サンプルをご覧ください。
# -*- coding: utf-8 -*-
from reportlab.pdfgen import canvas
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.cidfonts import UnicodeCIDFont
from reportlab.lib.units import cm
pdfFile = canvas.Canvas('./python.pdf')
pdfFile.saveState()
pdfFile.setAuthor('python-izm.com')
pdfFile.setTitle('PDF生成')
pdfFile.setSubject('サンプル')
# A4
pdfFile.setPageSize((21.0*cm, 29.7*cm))
# B5
# pdfFile.setPageSize((18.2*cm, 25.7*cm))
pdfFile.setFillColorRGB(0, 0, 100)
pdfFile.rect(2*cm, 2*cm, 6*cm, 6*cm, stroke=1, fill=1)
pdfFile.setFillColorRGB(0, 0, 0)
pdfFile.setLineWidth(1)
pdfFile.line(10*cm, 20*cm, 10*cm, 10*cm)
pdfmetrics.registerFont(UnicodeCIDFont('HeiseiKakuGo-W5'))
pdfFile.setFont('HeiseiKakuGo-W5', 12)
pdfFile.drawString(5*cm, 25*cm, 'あいうえおー')
pdfFile.restoreState()
pdfFile.save()
--実行結果--
作業ディレクトリに「python.pdf」が生成されます。

まずは3行目から6行目で必要なものをインポートし、9行目でファイルを生成するパスを指定します。
# -*- coding: utf-8 -*-
from reportlab.pdfgen import canvas
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.cidfonts import UnicodeCIDFont
from reportlab.lib.units import cm
pdfFile = canvas.Canvas('./python.pdf')
pdfFile.saveState()
pdfFile.setAuthor('python-izm.com')
pdfFile.setTitle('PDF生成')
pdfFile.setSubject('サンプル')
# A4
pdfFile.setPageSize((21.0*cm, 29.7*cm))
# B5
# pdfFile.setPageSize((18.2*cm, 25.7*cm))
pdfFile.setFillColorRGB(0, 0, 100)
pdfFile.rect(2*cm, 2*cm, 6*cm, 6*cm, stroke=1, fill=1)
pdfFile.setFillColorRGB(0, 0, 0)
pdfFile.setLineWidth(1)
pdfFile.line(10*cm, 20*cm, 10*cm, 10*cm)
pdfmetrics.registerFont(UnicodeCIDFont('HeiseiKakuGo-W5'))
pdfFile.setFont('HeiseiKakuGo-W5', 12)
pdfFile.drawString(5*cm, 25*cm, 'あいうえおー')
pdfFile.restoreState()
pdfFile.save()
12行目から14行目でファイル情報をセットしています。これは省略可能ですが、設定しておけばファイルのプロパティより情報を見る事が出来ます。 そして17行目でPDFファイルのサイズを指定しています。A4サイズで生成していますが、B5も載せておきました。
# -*- coding: utf-8 -*-
from reportlab.pdfgen import canvas
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.cidfonts import UnicodeCIDFont
from reportlab.lib.units import cm
pdfFile = canvas.Canvas('./python.pdf')
pdfFile.saveState()
pdfFile.setAuthor('python-izm.com')
pdfFile.setTitle('PDF生成')
pdfFile.setSubject('サンプル')
# A4
pdfFile.setPageSize((21.0*cm, 29.7*cm))
# B5
# pdfFile.setPageSize((18.2*cm, 25.7*cm))
pdfFile.setFillColorRGB(0, 0, 100)
pdfFile.rect(2*cm, 2*cm, 6*cm, 6*cm, stroke=1, fill=1)
pdfFile.setFillColorRGB(0, 0, 0)
pdfFile.setLineWidth(1)
pdfFile.line(10*cm, 20*cm, 10*cm, 10*cm)
pdfmetrics.registerFont(UnicodeCIDFont('HeiseiKakuGo-W5'))
pdfFile.setFont('HeiseiKakuGo-W5', 12)
pdfFile.drawString(5*cm, 25*cm, 'あいうえおー')
pdfFile.restoreState()
pdfFile.save()
21行目と22行目で生成されたファイルの下部にある青色の四角形を描画し、23行目で色設定を元に戻しています。 さらに25行目で線の太さを設定し、26行目で線を描画しています。 生成ファイルの中央部にある線に該当します。
# -*- coding: utf-8 -*-
from reportlab.pdfgen import canvas
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.cidfonts import UnicodeCIDFont
from reportlab.lib.units import cm
pdfFile = canvas.Canvas('./python.pdf')
pdfFile.saveState()
pdfFile.setAuthor('python-izm.com')
pdfFile.setTitle('PDF生成')
pdfFile.setSubject('サンプル')
# A4
pdfFile.setPageSize((21.0*cm, 29.7*cm))
# B5
# pdfFile.setPageSize((18.2*cm, 25.7*cm))
pdfFile.setFillColorRGB(0, 0, 100)
pdfFile.rect(2*cm, 2*cm, 6*cm, 6*cm, stroke=1, fill=1)
pdfFile.setFillColorRGB(0, 0, 0)
pdfFile.setLineWidth(1)
pdfFile.line(10*cm, 20*cm, 10*cm, 10*cm)
pdfmetrics.registerFont(UnicodeCIDFont('HeiseiKakuGo-W5'))
pdfFile.setFont('HeiseiKakuGo-W5', 12)
pdfFile.drawString(5*cm, 25*cm, 'あいうえおー')
pdfFile.restoreState()
pdfFile.save()
28行目から30行目で、ファイル上部の文字を描画しています。 最後に生成ファイルを保存して終了となります。
# -*- coding: utf-8 -*-
from reportlab.pdfgen import canvas
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.cidfonts import UnicodeCIDFont
from reportlab.lib.units import cm
pdfFile = canvas.Canvas('./python.pdf')
pdfFile.saveState()
pdfFile.setAuthor('python-izm.com')
pdfFile.setTitle('PDF生成')
pdfFile.setSubject('サンプル')
# A4
pdfFile.setPageSize((21.0*cm, 29.7*cm))
# B5
# pdfFile.setPageSize((18.2*cm, 25.7*cm))
pdfFile.setFillColorRGB(0, 0, 100)
pdfFile.rect(2*cm, 2*cm, 6*cm, 6*cm, stroke=1, fill=1)
pdfFile.setFillColorRGB(0, 0, 0)
pdfFile.setLineWidth(1)
pdfFile.line(10*cm, 20*cm, 10*cm, 10*cm)
pdfmetrics.registerFont(UnicodeCIDFont('HeiseiKakuGo-W5'))
pdfFile.setFont('HeiseiKakuGo-W5', 12)
pdfFile.drawString(5*cm, 25*cm, 'あいうえおー')
pdfFile.restoreState()
pdfFile.save()
次は画像処理を実現するライブラリです!
▶外部ライブラリ:画像処理
