ReportLabを使用すると、Pythonを使用してPDFに挿入する文字のフォントを指定することができます。
本記事では、ReportLabを使用した、PDFに挿入する文字のフォントを指定する方法について、詳しくご説明します。
ReportLabとは
ReportLabは、Pythonを使用してPDFを操作するための外部ライブラリの1つです。
PDF操作用ライブラリは他にも、PyPDF4やPDFMinerなどいくつか存在します。
それぞれのライブラリの用途は、以下の通りです。
ライブラリ | 用途 |
---|---|
ReportLab | ・PDFの新規作成 |
PDFMiner | ・テキストの抽出 |
PyPDF4 | ・画像の抽出 ・PDFファイルの結合や分割 ・しおり(目次)の追加 |
本記事では、ReportLabによる、PDFに挿入する文字のフォントを指定する方法をご紹介します。
ReportLabのインストール
「ReportLab」は、以下コマンドを入力することで、インストールすることができます。
コマンドの入力は、コマンドプロンプトあるいはターミナルから行います。
pip install reportlab
動作確認として、試しに以下を入力します。
from reportlab.pdfgen import canvas
上記を入力してもエラーが発生しなければ、正常にインストールされています。
PDFに挿入する文字のフォントを指定する
「reportlab.pdfgen」クラスのcanvas.Canvas()で用意したPDFに対して、setFont()を使用することで、文字フォントを指定することができます。
予め組み込まれた標準フォントは、名前を参照するだけで使用することができます。
標準フォント以外のフォント(ダウンロード済のフリーフォントなど)は、登録(register)することで使用することができます。
以下にフォントの指定例をいくつかご紹介します。
Helvetica
#input
from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import A4, portrait, landscape
# A4(横)の新規PDFファイルを作成
p = canvas.Canvas("sample.pdf", pagesize=landscape(A4))
# フォント指定・挿入
import reportlab
p.setFont('Helvetica', 100)
p.drawString(120, 300, 'This font is')
p.drawString(120, 200, 'Helvetica')
# 保存
p.showPage()
p.save()
Helvetica-Bold
#input
from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import A4, portrait, landscape
# A4(横)の新規PDFファイルを作成
p = canvas.Canvas("sample.pdf", pagesize=landscape(A4))
# フォント指定・挿入
import reportlab
p.setFont('Helvetica-Bold', 100)
p.drawString(100, 300, 'This font is')
p.drawString(100, 200, 'Helvetica-Bold')
# 保存
p.showPage()
p.save()
Helvetica-Oblique
#input
from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import A4, portrait, landscape
# A4(横)の新規PDFファイルを作成
p = canvas.Canvas("sample.pdf", pagesize=landscape(A4))
# フォント指定・挿入
import reportlab
p.setFont('Helvetica-Oblique', 80)
p.drawString(100, 300, 'This font is')
p.drawString(100, 200, 'Helvetica-Oblique')
# 保存
p.showPage()
p.save()
Times-Roman
#input
from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import A4, portrait, landscape
# A4(横)の新規PDFファイルを作成
p = canvas.Canvas("sample.pdf", pagesize=landscape(A4))
# フォント指定・挿入
import reportlab
p.setFont('Times-Roman', 100)
p.drawString(120, 300, 'This font is')
p.drawString(120, 200, 'Times-Roman')
# 保存
p.showPage()
p.save()
Times-Bold
#input
from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import A4, portrait, landscape
# A4(横)の新規PDFファイルを作成
p = canvas.Canvas("sample.pdf", pagesize=landscape(A4))
# フォント指定・挿入
import reportlab
p.setFont('Times-Bold', 100)
p.drawString(100, 300, 'This font is')
p.drawString(100, 200, 'Times-Bold')
# 保存
p.showPage()
p.save()
Times-Italic
#input
from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import A4, portrait, landscape
# A4(横)の新規PDFファイルを作成
p = canvas.Canvas("sample.pdf", pagesize=landscape(A4))
# フォント指定・挿入
import reportlab
p.setFont('Times-Italic', 100)
p.drawString(100, 300, 'This font is')
p.drawString(100, 200, 'Times-Italic')
# 保存
p.showPage()
p.save()
DarkGardenMK
#input
from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import A4, portrait, landscape
# A4(横)の新規PDFファイルを作成
p = canvas.Canvas("sample.pdf", pagesize=landscape(A4))
# フォント指定・挿入
import reportlab
folder = os.path.dirname(reportlab.__file__) + os.sep + 'fonts'
afmFile = os.path.join(folder, 'DarkGardenMK.afm')
pfbFile = os.path.join(folder, 'DarkGardenMK.pfb')
from reportlab.pdfbase import pdfmetrics
justFace = pdfmetrics.EmbeddedType1Face(afmFile, pfbFile)
faceName = 'DarkGardenMK'
pdfmetrics.registerTypeFace(justFace)
justFont = pdfmetrics.Font('DarkGardenMK', faceName, 'WinAnsiEncoding')
pdfmetrics.registerFont(justFont)
p.setFont('DarkGardenMK', 100)
p.drawString(50, 300, 'This font is')
p.drawString(50, 200, 'DarkGardenMK')
# 保存
p.showPage()
p.save()
まとめ
この記事では、ReportLabを使用した、PDFに挿入する文字のフォントを指定する方法について、ご説明しました。
本記事を参考に、ぜひ試してみて下さい。
参考
Python学習用おすすめ教材
Pythonの基本を学びたい方向け
統計学基礎を学びたい方向け
Pythonの統計解析を学びたい方向け
おすすめプログラミングスクール
Pythonをはじめ、プログラミングを学ぶなら、TechAcademy(テックアカデミー)がおすすめです。
私も入っていますが、好きな時間に気軽にオンラインで学べますので、何より楽しいです。
現役エンジニアからマンツーマンで学べるので、一人では中々続かない人にも、向いていると思います。
無料体験ができますので、まずは試してみてください!