PythonでPDF文書に透かし(ウォーターマーク)を追加する方法

PDF文書は、一般的に使用される電子ファイル形式であり、それは良い、高いセキュリティ機能を維持するために、クロスプラットフォーム、フォーマットを持って、一般的に印刷、共有、ネットワーク配信の内容で使用されます。しかし、PDF文書はまた、盗難、漏洩、改ざんなどのリスクに直面する可能性があります。文書のソース、所有者、情報の使用を示す、PDF文書の著作権を保護するためには、PDF文書に透かしを追加することができます。PDFとしてPDF文書に追加された透かしの特性を編集することは容易ではありません削除または変更することは容易ではありません。したがって、透かしのPDFは、PDF文書のセキュリティと信頼性を向上させるために、文書の保護に効果的な役割を果たすことができます。この記事では、Pythonを使って**PDF文書にテキストや画像の透かしを挿入する方法**を紹介します。

- **[テキスト透かしの挿入](#テキスト透かしの挿入)**
- **[画像透かしの挿入](#画像透かしの挿入)**

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

## テキスト透かしの挿入
Spire.PDF for Pythonは、PDF文書のページに透かしテキストを描画するための様々なクラスとメソッドを提供します。 以下はその詳細な手順です。
- **PdfDocument** クラスのオブジェクトを作成します。
- **PdfDocument.LoadFromFile()** メソッドを使用してPDF文書を読み込みます。
- フォントを作成します。
- ドキュメントのページを繰り返し処理します。
- **PdfDocument.Pages.get_Item()** メソッドを使用してページを取得します。
- **PdfTilingBrush** クラスのオブジェクトを作成します。
- **PdfBrush.Graphics.SetTransparency()** を使用して透かしの透明度を設定します。
- **PdfBrush.Graphics.TranslateTransform()** メソッドを使用して変換を設定します。
- **PdfBrush.Graphics.RotateTransform()** メソッドを使用して透かしの傾斜角度を設定します。
- **PdfBrush.Graphics.DrawString()** メソッドを使用して、透かしテキストをブラシ上に描画します。
- **PdfPageBase.Canvas.DrawRectangle()** メソッドを使用して、透かしをページに描画します。

**Python**
```python
from spire.pdf.common import *
from spire.pdf import *

inputFile = "サンプル.pdf"
outputFile = "output/テキスト透かし.pdf"

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

# PDF文書をロードする
pdf.LoadFromFile(inputFile)

# フォントを作成する
font = PdfTrueTypeFont("HarmonyOS Sans SC", 32.0, 0, True)

# ドキュメントのページを反復処理する
for i in range(pdf.Pages.Count):
    # ページを取得する
    page = pdf.Pages.get_Item(i)
    # PdfTilingBrushクラスのオブジェクトを作成する
    brush = PdfTilingBrush(SizeF(page.Canvas.ClientSize.Width / float(2), page.Canvas.ClientSize.Height / float(3)))
    # 透かしの透明度を設定する
    brush.Graphics.SetTransparency(0.3)
    brush.Graphics.Save()
    # 平行移動量を設定する
    brush.Graphics.TranslateTransform(brush.Size.Width / float(2), brush.Size.Height / float(2))
    # 透かしの傾き角度を設定する
    brush.Graphics.RotateTransform(-45.0)
    # 透かしのテキストをブラシ上に描画する
    brush.Graphics.DrawString("コピー厳禁", font, PdfBrushes.get_Violet(), 0.0, 0.0, PdfStringFormat(PdfTextAlignment.Center))
    brush.Graphics.Restore()
    brush.Graphics.SetTransparency(1.0)
    # 透かしをページ上に描画する
    page.Canvas.DrawRectangle(brush, RectangleF(PointF(0.0, 0.0), page.Canvas.ClientSize))

# PDF文書を保存する
pdf.SaveToFile(outputFile)
pdf.Close()
```

**文書**
![テキスト透かしの挿入](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278784/5382741d-55ad-1abb-1402-e1540eefb7a1.png)

## 画像透かしの挿入
はまた、PDF文書に画像透かしを挿入するために同様の方法で使用することができます。 詳しい手順は以下の通りです。
- **PdfDocument** クラスのオブジェクトを作成します。
- **PdfDocument.LoadFromFile()** メソッドを使ってPDF文書を読み込みます。
- **PdfImage.FromFile()** メソッドを使用して透かし画像を読み込みます。
文書ページを繰り返し処理します。
- **PdfDocument.Pages.get_Item()** メソッドを使用してページを取得します。
- **PdfBrush.Graphics.SetTransparency()** メソッドを使用して透かしの透明度を設定します。
- **PdfBrush.Graphics.DrawImage()** メソッドを使用して、透かしをブラシ上に描画します。
- **PdfPageBase.Canvas.DrawRectangle()** メソッドを使用して、透かしをページに描画します。

**Python**
```python
from spire.pdf.common import *
from spire.pdf import *

inputFile = "サンプル.pdf"
outputFile = "output/画像透かし.pdf"

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

# PDF文書をロードする
pdf.LoadFromFile(inputFile)

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

# ドキュメントのページを反復処理する
for i in range(pdf.Pages.Count):
    # ページを取得する
    page = pdf.Pages.get_Item(i)
    # PdfTillingBrushクラスのオブジェクトを作成する
    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(outputFile, FileFormat.PDF)
pdf.Close()
```

**文書**
![画像透かしの挿入](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278784/8a2ceaf1-a85c-9c8c-90e9-2def747cb5ef.png)

> **上記はSpire.PDF for Pythonを使用して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)をご覧ください。 また、議論に参加するために[SpirePDFのフォーラム](https://www.e-iceblue.com/forum/spire-pdf-f7.html)に行くことができます。**