
ウォーターマークは、ドキュメントの保護、所有権の明示、不正コピーの防止に欠かせない重要な技術です。下書きの配布や最終版ドキュメントへのブランド表示など、さまざまな場面でコンテンツを効果的に保護できます。
本チュートリアルでは、使いやすく高機能な Spire.PDF for Python を使用して、Python で PDF にウォーターマークを追加する方法を紹介します。
テキストウォーターマークと画像ウォーターマークの両方の追加方法に加え、透明度や配置の設定、よくある問題の対処方法まで、分かりやすいコード例を交えながら解説します。
目次:
PDF にウォーターマークを追加するための Python ライブラリ
Spire.PDF for Python は、PDF の作成・編集・変換を包括的にサポートする高機能ライブラリです。ウォーターマーク機能では、次のような特長があります。
- ウォーターマークの位置や回転を高精度で制御可能
- 柔軟な透明度設定
- テキストと画像の両方のウォーターマークに対応
- 特定のページまたは文書全体への適用が可能
- 元の PDF 品質を維持
始める前に、Python 環境へ Spire.PDF をインストールしてください。
pip install spire.pdf
PDF にテキストウォーターマークを追加する
以下のコードでは、PDF の各ページに斜め方向の "複 製 禁 止" ウォーターマークを追加します。フォントサイズ、色、配置、回転角度、透明度を設定することで、見やすくプロフェッショナルな仕上がりになります。
from spire.pdf import *
from spire.pdf.common import *
import math
# PdfDocumentクラスのインスタンスを作成
doc = PdfDocument()
# 指定したパスからPDFファイルを読み込む
doc.LoadFromFile("Input.pdf")
# ウォーターマーク用のPdfTrueTypeFontフォントオブジェクトを作成
font = PdfTrueTypeFont("MS Gothic", 48.0, 0, True)
# ウォーターマークのテキストを設定
text = "複 製 禁 止"
# テキストのサイズを測定し、描画位置を適切に調整する
text_width = font.MeasureString(text).Width
text_height = font.MeasureString(text).Height
# ドキュメント内の各ページを順に走査
for i in range(doc.Pages.Count):
# 現在のページを取得
page = doc.Pages.get_Item(i)
# 現在のキャンバス描画状態を保存
state = page.Canvas.Save()
# ページ中心座標を計算
x = page.Canvas.Size.Width / 2
y = page.Canvas.Size.Height / 2
# 座標原点をページ中心へ移動(ページ中心が(0,0)となる)
page.Canvas.TranslateTransform(x, y)
# ウォーターマーク用にキャンバスを反時計回り45度回転
page.Canvas.RotateTransform(-45.0)
# ウォーターマークの透明度を設定
page.Canvas.SetTransparency(0.7)
# 中心位置にテキストウォーターマークを描画(負のオフセットでテキスト中心を合わせる)
page.Canvas.DrawString(text, font, PdfBrushes.get_Blue(), PointF(-text_width / 2, -text_height / 2))
# キャンバス状態を復元、以降の描画に回転・座標変換が影響しないようにする
page.Canvas.Restore(state)
# 加工後のPDFを新規ファイルとして出力
doc.SaveToFile("output/TextWatermark.pdf")
# 使用したリソースを解放
doc.Dispose()
コードの解説:
- PDF ドキュメントを読み込む :
PdfDocumentクラスを使用して、指定したパスから PDF を読み込みます。 - ウォーターマークのテキストを設定する :"複 製 禁 止" をウォーターマーク文字列として指定し、フォント(MS Gothic、48pt)を設定します。文字列サイズを測定して、正確な位置に配置できるようにします。
- 座標変換を適用する :各ページに対して次の処理を行います。
- 座標系の原点をページ中央へ移動する。
- キャンバスを反時計回りに 45° 回転する。
- ウォーターマークの透明度を 70% に設定する。
- ウォーターマークを描画する :
(-text_width / 2, -text_height / 2)の位置へ文字列を描画することで、回転後もページ中央を基準に正しく配置されます。 - PDF を保存する :編集後のドキュメントを新しい PDF ファイルとして保存します。
実行結果:

PDF に画像ウォーターマークを追加する
次のコードでは、半透明の画像ウォーターマークを PDF の各ページ中央へ追加します。画像はページ中央に自動配置され、見栄えの良い仕上がりになります。
from spire.pdf import *
from spire.pdf.common import *
# PdfDocumentクラスのインスタンスを生成
doc = PdfDocument()
# 指定パスからPDFファイルを読み込む
doc.LoadFromFile("Input.pdf")
# 指定パスからウォーターマーク画像を読み込む
image = PdfImage.FromFile("logo.png")
# 画像描画位置調整用に、読み込んだ画像の幅と高さを取得
imageWidth = float(image.Width)
imageHeight = float(image.Height)
# ウォーターマークを適用するため、ドキュメント内の各ページをループ処理
for i in range(doc.Pages.Count):
# 現在のページを取得
page = doc.Pages.get_Item(i)
# ウォーターマークの透明度を50%に設定
page.Canvas.SetTransparency(0.5)
# 現在のページのサイズ(幅・高さ)を取得
pageWidth = page.ActualSize.Width
pageHeight = page.ActualSize.Height
# 画像がページ中央に配置されるようX、Y座標を計算
x = (pageWidth - imageWidth) / 2
y = (pageHeight - imageHeight) / 2
# 計算した中央座標に画像を描画
page.Canvas.DrawImage(image, x, y, imageWidth, imageHeight)
# 編集後のPDFを新しいファイルとして保存
doc.SaveToFile("output/ImageWatermark.pdf")
# 使用したリソースを解放
doc.Dispose()
コードの解説:
- PDF ドキュメントを読み込む :
PdfDocumentクラスを使用して指定した PDF を読み込みます。 - ウォーターマーク画像を読み込む :指定した画像ファイルを読み込み、その幅と高さを取得して配置に利用します。
- ウォーターマークを設定する :各ページに対して以下を実行します。
- ウォーターマークの透明度を 50% に設定する。
- ページ中央の座標を計算する。
- 画像ウォーターマークを描画する :計算した中央座標へ画像を描画し、各ページの中央へ配置します。
- PDF を保存する :編集後のドキュメントを新しい PDF ファイルとして保存します。
実行結果:

ウォーターマーク以外にも、PDF にスタンプを追加することができます。ウォーターマークは通常固定された位置に表示されますが、スタンプは自由に移動・削除できるため、より柔軟な注釈機能として利用できます。
よくある問題と対処方法
- ウォーターマークが表示されない
- ファイルパスが正しいことを確認してください。
- 透明度が 0(完全に透明)になっていないか確認してください。
- ウォーターマークの座標がページ範囲内にあることを確認してください。
- 画質が低下する
- テキストウォーターマークでは、高品質なフォントを使用してください。
- 画像ウォーターマークでは、十分な解像度の画像を使用してください。
- 回転が期待どおりにならない
- 回転は現在の座標原点を基準に実行されることを理解しておきましょう。
- 座標変換は「平行移動 → 回転」の順序で行う必要があります。
まとめ
Spire.PDF for Python を使用すれば、PDF へのウォーターマーク追加を簡単かつ効率的に実装できます。各ページに大きく「Confidential」のようなテキストを表示する場合でも、企業ロゴによる控えめなブランド表示を行う場合でも、柔軟に対応できます。座標変換、透明度設定、描画機能を組み合わせることで、用途に応じた高度なウォーターマーク処理を実現できます。
FAQ
Q1. 同じ PDF にテキストウォーターマークと画像ウォーターマークを両方追加できますか?
はい。PDF ページを処理する同じループ内で、テキストと画像の両方を描画することで実現できます。
Q2. 画像ウォーターマークを回転させるにはどうすればよいですか?
画像を描画する前に Canvas.RotateTransform(angle) を呼び出してください。テキストウォーターマークと同様の方法で回転できます。
Q3. Spire.PDF は透明な PNG をウォーターマークとして使用できますか?
はい。Spire.PDF は、ウォーターマークとして使用する PNG 画像の透明情報(アルファチャンネル)を保持します。
Q4. ページごとに異なるウォーターマークを設定できますか?
もちろん可能です。ページ番号やその他の条件に応じて、ページ処理ループ内で条件分岐を実装すれば、異なるウォーターマークを適用できます。
無料ライセンスを取得する
評価版の制限なしで Spire.PDF for Python のすべての機能をお試しいただくには、30 日間無料試用ライセンスを申請 してください。






