PythonでPDF文書に画像の透かし(ウォーターマーク)を挿入する方法

PDFドキュメントは、クロスプラットフォームの互換性とコンテンツの高精度性から、情報交換の標準的な媒体となっています。著作権侵害、コンテンツ改ざん、無断での配信などのリスクに対処するため、PDFに画像ウォーターマークを挿入することは、文書のセキュリティを強化し、所有権を明示し、アクセス制御を実施するための効果的な手段です。画像ウォーターマークは、文書の出所を視覚的に示すだけでなく、独自のデザインによって違法なコピーと拡散から保護することもできます。Pythonを使用することで、PDFドキュメントに効率的に画像ウォーターマークを一括挿入することができます。この記事では、Pythonを使用して**PDFドキュメントに画像ウォーターマークを追加する方法**について詳しく説明します。PDFドキュメントの保護とスマート化のレベルを向上させるのに役立ちます。

- **[Pythonを使用してPDFドキュメントに単一の画像ウォーターマークを挿入する方法](#pythonを使用してpdfドキュメントに単一の画像ウォーターマークを挿入する方法)**
- **[Pythonを使用してPDFドキュメントに繰り返しの画像ウォーターマークを挿入する方法](#pythonを使用してpdfドキュメントに繰り返しの画像ウォーターマークを挿入する方法)**

この記事で使用する方法には、[Spire.PDF for Python](https://www.e-iceblue.com/Introduce/pdf-for-python.html)が必要です。公式ウェブサイトからダウンロードするか、PyPIを介してインストールすることができます：`pip install Spire.PDF`。

[無料ライセンスの申請](https://www.e-iceblue.com/TemLicense.html)

## Pythonを使用してPDFドキュメントに単一の画像ウォーターマークを挿入する方法
単一の画像ウォーターマークは、PDFページの中央に透明な画像です。ライブラリのAPIを使用して、指定した画像をウォーターマークとして任意のPDFページに描画することができます。具体的な手順は以下の通りです：
1. 必要なモジュールをインポートします。
2. **PdfDocument** クラスのオブジェクトを作成します。
3. **PdfDocument.LoadFromFile()** メソッドを使用してPDFドキュメントを読み込みます。
4. **PdfImage.FromFile()** メソッドを使用してウォーターマーク画像を読み込みます。
5. ドキュメント内のページをループしてウォーターマークを追加します。
    - **PdfDocument.Pages.get_Item()** メソッドを使用してページを取得します。
    - **PdfPageBase.Canvas.SetTransparency()** メソッドを使用してウォーターマークの透明度を設定します。
    - **PdfPageBase.Canvas.DrawImage()** メソッドを使用してページの中央にウォーターマーク画像を描画します。
6. **PdfDocument.SaveToFile()** メソッドを使用してドキュメントを保存します。
7. リソースを解放します。

**コード例**
```python
from spire.pdf import *
from spire.pdf.common import *

# PdfDocumentクラスのオブジェクトを作成します
pdf = PdfDocument()

# PDFドキュメントをロードします
pdf.LoadFromFile("サンプル.pdf")

# 透かし画像をロードします
image = PdfImage.FromFile("Marker.png")

# 画像の幅と高さを取得します
imageWidth = float(image.Width)
imageHeight = float(image.Height)

# ドキュメント内のページをループします
for i in range(pdf.Pages.Count):
    # ページを取得します
    page = pdf.Pages.get_Item(i)
    # 透かしの透明度を設定します
    page.Canvas.SetTransparency(0.3)
    # ページの幅と高さを取得します
    pageWidth = page.ActualSize.Width
    pageHeight = page.ActualSize.Height
    # ページに透かし画像を描画します
    page.Canvas.DrawImage(image, pageWidth/2 - imageWidth/2, pageHeight/2 - imageHeight/2, imageWidth, imageHeight)

# ドキュメントを保存します
pdf.SaveToFile("output/単一の画像ウォーターマーク.pdf")
pdf.Close()
```

**結果文書**
![Pythonを使用してPDFドキュメントに単一の画像ウォーターマークを挿入する方法](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278784/e61a747d-61e5-4812-20d9-5cf8d07d5263.png)

## Pythonを使用してPDFドキュメントに繰り返しの画像ウォーターマークを挿入する方法
繰り返しの画像ウォーターマークは、PDFページ上で定期的に繰り返される画像です。繰り返しの画像ウォーターマークは、ライブラリ内の **PdfTillingBrush** クラスを使用してPDFページ上に描画する必要があります。以下に詳細な手順を示します：
1. 必要なモジュールをインポートします。
2. **PdfDocument** クラスのオブジェクトを作成します。
3. **PdfDocument.LoadFromFile()** メソッドを使用してPDFドキュメントを読み込みます。
4. **PdfImage.FromFile()** メソッドを使用してウォーターマーク画像を読み込みます。
5. ドキュメント内のページをループしてウォーターマークを追加します。
    - **PdfDocument.Pages.get_Item()** メソッドを使用してページを取得します。
    - **PdfTillingBrush** クラスのオブジェクトを作成し、そのサイズを設定してウォーターマークの繰り返し回数を決定します。
    - **PdfTillingBrush.Graphics.SetTransparency()** メソッドを使用してウォーターマークの透明度を設定します。
    - **PdfTillingBrush.Graphics.TranslateTransform()** メソッドを使用して座標系を指定位置に移動し、ウォーターマークを各繰り返しの中央に表示します。
    - **PdfTillingBrush.Graphics.DrawImage()** メソッドを使用して、タイリングブラシ上にウォーターマーク画像を描画します。
    - **PdfPageBase.Canvas.DrawRectangle()** メソッドを使用してページ上にウォーターマークを描画します。
6. **PdfDocument.SaveToFile()** メソッドを使用してドキュメントを保存します。
7. リソースを解放します。

**コード例**
```python
from spire.pdf.common import *
from spire.pdf import *

# PdfDocumentクラスのオブジェクトを作成します
pdf = PdfDocument()

# PDFドキュメントをロードします
pdf.LoadFromFile("サンプル.pdf")

# 透かし画像をロードします
image = PdfImage.FromFile("Marker.png")

# ドキュメント内のページをループします
for i in range(pdf.Pages.Count):
    # ページを取得します
    page = pdf.Pages.get_Item(i)
    # PdfTilingBrushクラスのオブジェクトを作成し、サイズを設定します
    brush = PdfTilingBrush(SizeF(page.Canvas.Size.Width / float(3), page.Canvas.Size.Height / float(3)))
    # 透かしの透明度を設定します
    brush.Graphics.SetTransparency(0.3)
    brush.Graphics.Save()
    # 座標を指定位置に変換します
    brush.Graphics.TranslateTransform(brush.Size.Width/2 - image.Width/2, brush.Size.Height/2 - image.Height/2)
    # 透かし画像をブラシ上に描画します
    brush.Graphics.DrawImage(image, 0.0, 0.0, float(image.Width), float(image.Height))
    brush.Graphics.Restore()
    # ページ上に透かしを描画します
    page.Canvas.DrawRectangle(brush, RectangleF(PointF(0.0, 0.0), page.Canvas.Size))

# PDFドキュメントを保存します
pdf.SaveToFile("output/繰り返しの画像ウォーターマーク.pdf", FileFormat.PDF)
pdf.Close()
```

**結果文書**
![Pythonを使用してPDFドキュメントに繰り返しの画像ウォーターマークを挿入する方法](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278784/ca822127-9a55-2efe-6d1b-1ef211125233.png)

この記事では、Pythonを使用してPDFドキュメントのページに単一の画像ウォーターマークと繰り返しの画像ウォーターマークを追加する方法について説明しました。

さらなるPDFドキュメントの操作テクニックについては、[Spire.PDF for Pythonチュートリアル](https://www.e-iceblue.com/Tutorials/Python/Spire.PDF-for-Python/Program-Guide/Spire.PDF-for-Python-Program-Guide-Content.html)を参照してください。

このライブラリの使用に関する問題がある場合は、[Spire.PDFフォーラム](https://www.e-iceblue.com/forum/spire-pdf-f7.html)で技術サポートを求めることができます。