【Python】PDFへの表の描画とスタイル変更|ReportLab基礎

PDFへの表の描画とスタイル変更|ReportLab基礎_アイキャッチ プログラミング

※ 当サイトはアフィリエイト広告を利用しています。

levtech-ad
スポンサーリンク

ReportLabを使用すると、Pythonを使用してPDFの指定位置に表を描画することができます。

本記事では、ReportLabを使用した、PDFへの表の描画方法や表スタイルの変更方法について、詳しくご説明します。

こんな人に読んでほしい
  • Pythonを使用したPDFの操作方法を知りたい人
  • PDFへの表の描画方法や表スタイルの変更方法を知りたい人
levtech-ad

ReportLabとは

ReportLabは、Pythonを使用してPDFを操作するための外部ライブラリの1つです。

PDF操作用ライブラリは他にも、PyPDF4PDFMinerなどいくつか存在します。

それぞれのライブラリの用途は、以下の通りです。

ライブラリ用途
ReportLab・PDFの新規作成
PDFMiner・テキストの抽出
PyPDF4・画像の抽出
・PDFファイルの結合や分割
・しおり(目次)の追加

本記事では、ReportLabによる、PDFへの表の描画方法や表スタイルの変更方法をご紹介します。

ReportLabのインストール

「ReportLab」は、以下コマンドを入力することで、インストールすることができます。

コマンドの入力は、コマンドプロンプトあるいはターミナルから行います。

pip install reportlab

動作確認として、試しに以下を入力します。

from reportlab.pdfgen import canvas

上記を入力してもエラーが発生しなければ、正常にインストールされています。

PDFへの表の描画とスタイル変更

表の描画

reportlab.pdfgen」クラスのcanvas.Canvas()で用意したPDFに対して、「reportlab.pdfgen」クラスのTable()関数を使用することで、指定データを表として描画することができます。

Table()関数の引数には、表のデータをリストとして指定します。

上記関数を使用して、PDFの指定位置に表を描画してみます。

#input
from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import A4, portrait, landscape
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.cidfonts import UnicodeCIDFont
from reportlab.lib.units import mm
import os
from reportlab.platypus import Table, TableStyle
from reportlab.lib import colors

# A4(横)の新規PDFファイルを作成
p = canvas.Canvas("sample.pdf", pagesize=landscape(A4))

# フォント指定
pdfmetrics.registerFont(UnicodeCIDFont('HeiseiKakuGo-W5'))

# 表の挿入位置指定
x = 90*mm
y = 90*mm 

# 表データ指定
data = [
        ['(0,0)', '(1,0)', '(2,0)'],
        ['(0,1)', '(1,1)', '(2,1)'],
        ['(0,2)', '(1,2)', '(2,2)'],
        ]
table = Table(data)

# 表のスタイル指定
table.setStyle(TableStyle([                              
        ('FONT', (0, 0), (-1, -1), 'HeiseiKakuGo-W5', 36),
        ('GRID', (0, 0), (-1, -1), 1, colors.black),
        ]))
table.wrapOn(p, x, y)
table.drawOn(p, x, y)

# 保存
p.showPage()
p.save()
表の描画1

指定した位置に、指定したデータ(3行x3列)の表を描画しました。

表のスタイル変更

reportlab.pdfgen」クラスのTableStyle()関数を使用することで、表のスタイルを変更することができます。

TableStyle()関数の引数として、主に以下のようなものが指定できます。

引数指定内容
‘FONT’フォント指定
‘GRID’罫線指定
‘BOX’外枠指定
‘LINEBEFORE’縦線指定(指定セルの前)
‘LINEAFTER’縦線指定(指定セルの後)
‘LINEABOVE’横線指定(指定セルの上)
‘LINEBELOW’横線指定(指定セルの下)
‘SPAN’セルの結合
‘BACKGROUND’背景色の指定

上記を指定し、テーブルスタイルを変更してみます。

#input
from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import A4, portrait, landscape
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.cidfonts import UnicodeCIDFont
from reportlab.lib.units import mm
import os
from reportlab.platypus import Table, TableStyle
from reportlab.lib import colors

# A4(横)の新規PDFファイルを作成
p = canvas.Canvas("sample.pdf", pagesize=landscape(A4))

# フォント指定
pdfmetrics.registerFont(UnicodeCIDFont('HeiseiKakuGo-W5'))

# 表の挿入位置指定
x = 90*mm
y = 90*mm 

# 表データ指定
data = [
        ['(0,0)', '(1,0)', '(2,0)'],
        ['(0,1)', '(1,1)', '(2,1)'],
        ['(0,2)', '(1,2)', '(2,2)'],
        ]
table = Table(data)

# 表の装飾
table.setStyle(TableStyle([                              
        ('FONT', (0, 0), (-1, -1), 'HeiseiKakuGo-W5', 36),
        ('BOX', (0, 0), (-1, -1), 1, colors.black),
        ('LINEBELOW', (0, 0), (1, 0), 1, colors.black),
        ('LINEAFTER', (1, 0), (1, 2), 1, colors.black),
        ('SPAN', (2, 0), (2, 1)),
        ('BACKGROUND', (0, 0), (0, -1), colors.aqua),
        ('BACKGROUND', (2, 0), (2, 1), colors.lime)
        ]))
table.wrapOn(p, x, y)
table.drawOn(p, x, y)

# 保存
p.showPage()
p.save()
表の描画2

Table()関数の引数として、colWidthsを指定することで列幅を、rowHeightsを指定することで行の高さを、それぞれ指定することができます。

またTableStyle()関数の引数として、VALIGNを指定することで、セル上下方向の文字揃えを、ALIGNを指定することで、セル左右方向の文字揃えを、それぞれ指定することができます。

上記を指定した表の描画例について、以下にご紹介します。

#input
from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import A4, portrait, landscape
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.cidfonts import UnicodeCIDFont
from reportlab.lib.units import mm
import os
from reportlab.platypus import Table, TableStyle
from reportlab.lib import colors

# A4(横)の新規PDFファイルを作成
p = canvas.Canvas("sample.pdf", pagesize=landscape(A4))

# フォント指定
pdfmetrics.registerFont(UnicodeCIDFont('HeiseiKakuGo-W5'))

# 表の挿入位置指定
x = 35*mm
y = 30*mm 

# 表データ指定
data = [
        ['(0,0)', '(1,0)', '(2,0)'],
        ['(0,1)', '(1,1)', '(2,1)'],
        ['(0,2)', '(1,2)', '(2,2)'],
        ]
table = Table(data, colWidths=75*mm, rowHeights=50*mm)

# 表の装飾
table.setStyle(TableStyle([                              
        ('FONT', (0, 0), (-1, -1), 'HeiseiKakuGo-W5', 36), # フォント
        ('GRID', (0, 0), (-1, -1), 1, colors.black),
        ('VALIGN', (0, 0), (0, -1), 'TOP'),
        ('VALIGN', (1, 0), (1, -1), 'MIDDLE'),
        ('VALIGN', (2, 0), (2, -1), 'BOTTOM'),
        ('ALIGN', (0, 0), (0, -1), 'LEFT'),
        ('ALIGN', (1, 0), (1, -1), 'CENTER'),
        ('ALIGN', (2, 0), (2, -1), 'RIGHT')
        ]))
table.wrapOn(p, x, y)
table.drawOn(p, x, y)

# 保存
p.showPage()
p.save()
表の描画3

まとめ

この記事では、ReportLabを使用した、PDFへの表の描画方法や表スタイルの変更方法について、ご説明しました。

本記事を参考に、ぜひ試してみて下さい。

参考

Python学習用おすすめ教材

Pythonの基本を学びたい方向け

統計学基礎を学びたい方向け

Pythonの統計解析を学びたい方向け

おすすめプログラミングスクール

Pythonをはじめ、プログラミングを学ぶなら、TechAcademy(テックアカデミー)がおすすめです。

私も入っていますが、好きな時間に気軽にオンラインで学べますので、何より楽しいです。

現役エンジニアからマンツーマンで学べるので、一人では中々続かない人にも、向いていると思います。

無料体験ができますので、まずは試してみてください!

\まずは無料体験!/
スポンサーリンク
タイトルとURLをコピーしました