Python入門から応用までの学習サイト


PDF生成 (ReportLab)

PDF生成は結構な需要があります。 公開されているライブラリも複数ありますが、日本語の使用が出来るもの、となると限られてきます。 オススメのライブラリはreportlabです。

下記リンクを参考にダウンロード、インストールを行いましょう。


https://bitbucket.org/rptlab/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」が生成されます。

PythonPDF生成



まずは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()



Python
スタートブック


入門 Python 3


Effective
Python


退屈なことは
Pythonにやらせよう

 
 
 

次は画像処理を実現するライブラリです!

▶外部ライブラリ:画像処理



確かな力が身につく
Python「超」入門




P  R