チュートリアル
簡単にライブラリーを使用するためのチュートリアルコレクション
PDF ドキュメントにおける図形は、視覚的な情報を補足したりレイアウトを強化したりするうえで、非常に重要な役割を果たします。線・枠線・塗りつぶし・幾何学的変形などの描画操作を組み合わせることで、チャート、装飾、ロゴなど、ドキュメントの可読性やデザイン性を高める要素を自由に作成できます。図形の色、線種、塗りつぶし効果などのプロパティは用途に合わせて柔軟にカスタマイズできます。
本記事では、Spire.PDF for Python を利用して PythonコードでPDFに図形を描画する方法 を紹介します。
クイックナビゲーション
この機能を使用するには、Spire.PDF for Pythonとplum-dispatch v1.7.4が必要です。Windows環境では、以下のpipコマンドで簡単にインストールできます。
pip install Spire.PDF
または、Spire.PDF for Pythonのダウンロードページから直接ダウンロードして、プロジェクトに追加することもできます。
PdfPageBase.Canvas.DrawLine() メソッドを使用すると、始点・終点の座標とペン(PdfPen)を指定して線を描画できます。
from spire.pdf.common import *
from spire.pdf import *
# PDF ドキュメント オブジェクトを作成する
doc = PdfDocument()
# ページを追加する
page = doc.Pages.Add()
# 現在の描画状態を保存する
state = page.Canvas.Save()
# 線の開始位置(X 座標)
x = 100.0
# 線の開始位置(Y 座標)
y = 50.0
# 線の長さ
width = 300.0
# ディープスカイブルーの色と太さ 3.0 のペン オブジェクトを作成する
pen = PdfPen(PdfRGBColor(Color.get_DeepSkyBlue()), 3.0)
# 実線を描画する
page.Canvas.DrawLine(pen, x, y, x + width, y)
# ペンの線種を破線に設定する
pen.DashStyle = PdfDashStyle.Dash
# 破線パターンを [1, 4, 1] に設定する
pen.DashPattern = [1, 4, 1]
# 破線の開始位置(Y 座標)
y = 80.0
# 破線を描画する
page.Canvas.DrawLine(pen, x, y, x + width, y)
# 保存しておいた描画状態を復元する
page.Canvas.Restore(state)
# ドキュメントをファイルに保存する
doc.SaveToFile("Drawing Lines.pdf")
# ドキュメントを閉じ、リソースを解放する
doc.Close()
doc.Dispose()

図形ではなく画像を挿入したい場合は、PythonでPDFに画像を挿入する方法を参照してください。
PdfPageBase.Canvas.DrawPie() メソッドを使うと、位置・サイズ・開始角度・終了角度を指定してパイ図形を描画できます。
from spire.pdf.common import *
from spire.pdf import *
# PDF ドキュメント オブジェクトを作成する
doc = PdfDocument()
# ページを追加する
page = doc.Pages.Add()
# 現在の描画状態を保存する
state = page.Canvas.Save()
# ダークレッドの色と太さ 2.0 のペン オブジェクトを作成する
pen = PdfPen(PdfRGBColor(Color.get_DarkRed()), 2.0)
# 1 つ目の円グラフを描画する
page.Canvas.DrawPie(pen, 10.0, 30.0, 130.0, 130.0, 360.0, 300.0)
# 2 つ目の円グラフを描画する
page.Canvas.DrawPie(pen, 160.0, 30.0, 130.0, 130.0, 360.0, 330.0)
# 3 つ目の円グラフを描画する
page.Canvas.DrawPie(pen, 320.0, 30.0, 130.0, 130.0, 360.0, 360.0)
# 保存しておいた描画状態を復元する
page.Canvas.Restore(state)
# ドキュメントをファイルに保存する
doc.SaveToFile("Drawing Pie Charts.pdf")
# ドキュメントを閉じ、リソースを解放する
doc.Close()
doc.Dispose()

長方形の描画には PdfPageBase.Canvas.DrawRectangle() を使用します。位置(x, y)とサイズ(幅・高さ)を指定すれば任意の長方形を描けます。
from spire.pdf.common import *
from spire.pdf import *
# PDF ドキュメント オブジェクトを作成する
doc = PdfDocument()
# ページを追加する
page = doc.Pages.Add()
# 現在の描画状態を保存する
state = page.Canvas.Save()
# チョコレート色で太さ 1.5 のペン オブジェクトを作成する
pen = PdfPen(PdfRGBColor(Color.get_Chocolate()), 1.5)
# ペンを使用して長方形の枠線を描画する
page.Canvas.DrawRectangle(pen, RectangleF(PointF(20.0, 30.0), SizeF(150.0, 120.0)))
# 線形グラデーション ブラシを作成する
linearGradientBrush = PdfLinearGradientBrush(
PointF(200.0, 30.0),
PointF(350.0, 150.0),
PdfRGBColor(Color.get_Green()),
PdfRGBColor(Color.get_Red())
)
# 線形グラデーション ブラシを使用して長方形を塗りつぶす
page.Canvas.DrawRectangle(linearGradientBrush, RectangleF(PointF(200.0, 30.0), SizeF(150.0, 120.0)))
# 放射状グラデーション ブラシを作成する
radialGradientBrush = PdfRadialGradientBrush(
PointF(380.0, 30.0), 150.0,
PointF(530.0, 150.0), 150.0,
PdfRGBColor(Color.get_Orange()),
PdfRGBColor(Color.get_Blue())
)
# 放射状グラデーション ブラシを使用して長方形を塗りつぶす
page.Canvas.DrawRectangle(radialGradientBrush, RectangleF(PointF(380.0, 30.0), SizeF(150.0, 120.0)))
# 保存しておいた描画状態を復元する
page.Canvas.Restore(state)
# ドキュメントをファイルに保存する
doc.SaveToFile("Drawing Rectangle Shapes.pdf")
# ドキュメントを閉じ、リソースを解放する
doc.Close()
doc.Dispose()

こちらもおすすめ:PythonでPDF内の画像の透明度を設定する方法
楕円の描画には PdfPageBase.Canvas.DrawEllipse() を使用します。輪郭線だけの楕円、塗りつぶし楕円の両方に対応しています。
from spire.pdf.common import *
from spire.pdf import *
# PDF ドキュメント オブジェクトを作成する
doc = PdfDocument()
# ページを追加する
page = doc.Pages.Add()
# 現在の描画状態を保存する
state = page.Canvas.Save()
# ペン オブジェクトを作成する
pen = PdfPens.get_CadetBlue()
# 楕円形の枠線を描画する
page.Canvas.DrawEllipse(pen, 50.0, 30.0, 120.0, 100.0)
# 塗りつぶし用のブラシ オブジェクトを作成する
brush = PdfSolidBrush(PdfRGBColor(Color.get_CadetBlue()))
# 塗りつぶした楕円形を描画する
page.Canvas.DrawEllipse(brush, 180.0, 30.0, 120.0, 100.0)
# 保存しておいた描画状態を復元する
page.Canvas.Restore(state)
# ドキュメントをファイルに保存する
doc.SaveToFile("Drawing Ellipse Shape.pdf")
# ドキュメントを閉じ、リソースを解放する
doc.Close()
doc.Dispose()

生成されたドキュメントから評価メッセージを削除したり、機能制限を解除したい場合は、30 日間の試用ライセンスを申請してください。