スタンプはPDFドキュメント内で特定のエリアやセクションをマーク・注釈するための強力なツールです。承認やレビュー、状態表示などに広く使用されており、チームでのコラボレーションや文書管理の効率を大幅に向上させます。PDFにおけるスタンプは、チェックマークのような単純なものから、カスタマイズされた画像、日時スタンプ、署名など、さまざまな形式を取ることができます。この記事では、Spire.PDF for Python を使用して PythonでPDFに画像スタンプおよび動的スタンプを追加する方法 を解説します。
Spire.PDF for Python のインストール
この操作には Spire.PDF for Python と plum-dispatch v1.7.4 が必要です。これらは、Spire.XLS for Python の公式ウェブサイトから手動でダウンロードするか、以下の pip コマンドでインストールできます。
pip install Spire.PDF
Python で PDF に画像スタンプを追加する方法
Spire.PDF for Python では、PDFドキュメント内のゴム印(ラバースタンプ)を表すために PdfRubberStampAnnotation クラスを使用します。スタンプの外観を作成するには、PdfTemplate クラスを利用します。PdfTemplate はテキスト、画像、日付や時刻など任意の情報を描画できるキャンバスのようなものです。
画像スタンプは、ロゴ、署名、透かし、または任意のカスタムグラフィックをPDF上に重ねる用途に使えます。Spire.PDF for Python を使用して画像スタンプをPDFに追加する主な手順は以下の通りです。
- PdfDocument オブジェクトを作成します。
- PdfDocument.LoadFromFile() メソッドを使用してPDFファイルを読み込みます。
- PdfImage.FromFile() メソッドでPDFに追加する画像を読み込みます。
- 画像サイズに基づいて PdfTemplate オブジェクトを作成します。
- PdfTemplate.Graphics.DrawImage() メソッドで画像をテンプレート上に描画します。
- PdfRubberStampAnnotation オブジェクトを作成し、テンプレートを外観として設定します。
- PdfPageBase.AnnotationsWidget.Add() メソッドを使用して、特定のページにスタンプを追加します。
- PdfDocument.SaveToFile() メソッドでPDFを保存します。
from spire.pdf.common import *
from spire.pdf import *
# PdfDocumentオブジェクトを作成
doc = PdfDocument()
# PDFを読み込み
doc.LoadFromFile("Sample.pdf")
# 指定ページを取得
page = doc.Pages[0]
# 画像ファイルを読み込み
image = PdfImage.FromFile("Stamp.png")
# 画像の幅と高さを取得
width = (float)(image.Width)
height = (float)(image.Height)
# 画像サイズに基づいてPdfTemplateオブジェクトを作成
template = PdfTemplate(width, height, True)
# テンプレート上に画像を描画
template.Graphics.DrawImage(image, 0.0, 0.0, width, height)
# ラバースタンプ注釈を作成(位置とサイズを指定)
rect = RectangleF((float)(page.ActualSize.Width - width - 50), (float)(10), width, height)
stamp = PdfRubberStampAnnotation(rect)
# PdfAppearanceオブジェクトを作成
pdfAppearance = PdfAppearance(stamp)
# テンプレートを外観の通常状態として設定
pdfAppearance.Normal = template
# スタンプに外観を適用
stamp.Appearance = pdfAppearance
# PDFにスタンプを追加
page.AnnotationsWidget.Add(stamp)
# ファイルを保存
doc.SaveToFile("output/ImageStamp.pdf")
doc.Close()
実行結果プレビュー:

PDFに画像スタンプを追加する方法を理解したら、PythonでPDFに画像を挿入する方法 もあわせてご覧ください。
Python で PDF に動的スタンプを追加する方法
静的スタンプとは異なり、動的スタンプは日付、時刻、ユーザー情報などの可変データを含むことができます。以下では、Spire.PDF for Python を使用してPDFに動的スタンプを作成する手順を説明します。
- PdfDocument オブジェクトを作成します。
- PdfDocument.LoadFromFile() メソッドを使用してPDFを読み込みます。
- 任意のサイズで PdfTemplate オブジェクトを作成します。
- PdfTemplate.Graphics.DrawString() メソッドを使用してテンプレート上に文字列を描画します。
- PdfRubberStampAnnotation オブジェクトを作成し、テンプレートを外観として設定します。
- PdfPageBase.AnnotationsWidget.Add() メソッドで特定のページにスタンプを追加します。
- PdfDocument.SaveToFile() メソッドでPDFを保存します。
from spire.pdf.common import *
from spire.pdf import *
# PdfDocumentオブジェクトを作成
doc = PdfDocument()
# PDFを読み込み
doc.LoadFromFile("Sample.pdf")
# 指定ページを取得
page = doc.Pages[0]
# PdfTemplateオブジェクトを作成
template = PdfTemplate(220.0, 50.0, True)
# フォントを作成
font1 = PdfTrueTypeFont("Yu Gothic UI", 16.0, 0, True)
font2 = PdfTrueTypeFont("Yu Mincho", 10.0, 0, True)
# ブラシを作成
solidBrush = PdfSolidBrush(PdfRGBColor(Color.get_Blue()))
rectangle1 = RectangleF(PointF(0.0, 0.0), template.Size)
linearGradientBrush = PdfLinearGradientBrush(rectangle1, PdfRGBColor(Color.get_White()), PdfRGBColor(Color.get_LightBlue()), PdfLinearGradientMode.Horizontal)
# ペンを作成
pen = PdfPen(solidBrush)
# 角丸矩形パスを作成
CornerRadius = 10.0
path = PdfPath()
path.AddArc(template.GetBounds().X, template.GetBounds().Y, CornerRadius, CornerRadius, 180.0, 90.0)
path.AddArc(template.GetBounds().X + template.Width - CornerRadius, template.GetBounds().Y, CornerRadius, CornerRadius, 270.0, 90.0)
path.AddArc(template.GetBounds().X + template.Width - CornerRadius, template.GetBounds().Y + template.Height - CornerRadius, CornerRadius, CornerRadius, 0.0, 90.0)
path.AddArc(template.GetBounds().X, template.GetBounds().Y + template.Height - CornerRadius, CornerRadius, CornerRadius, 90.0, 90.0)
path.AddLine(template.GetBounds().X, template.GetBounds().Y + template.Height - CornerRadius, template.GetBounds().X, template.GetBounds().Y + CornerRadius / 2)
# パスをテンプレート上に描画
template.Graphics.DrawPath(pen, path)
template.Graphics.DrawPath(linearGradientBrush, path)
# テンプレート上にテキストを描画
string1 = "承認済み\n"
string2 = "山田による承認時刻: " + DateTime.get_Now().ToString("HH:mm, MMM dd, yyyy")
template.Graphics.DrawString(string1, font1, solidBrush, PointF(5.0, 5.0))
template.Graphics.DrawString(string2, font2, solidBrush, PointF(2.0, 28.0))
# スタンプ注釈を作成(位置とサイズを指定)
rectangle2 = RectangleF((float)(page.ActualSize.Width - 220.0 - 50.0), (float)(page.ActualSize.Height - 60.0), 220.0, 50.0)
hanko = PdfRubberStampAnnotation(rectangle2)
# PdfAppearanceオブジェクトを作成し、テンプレートを通常状態に設定
appearance = PdfAppearance(hanko)
appearance.Normal = template
# 外観をスタンプに適用
hanko.Appearance = appearance
# スタンプを注釈コレクションに追加
page.AnnotationsWidget.Add(hanko)
# PDFを保存
doc.SaveToFile("output/DynamicStamp.pdf", FileFormat.PDF)
doc.Dispose()
実行結果プレビュー:

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






