Python で PDF にテキスト透かしを追加する方法

## はじめに
テキスト透かしは、ファイル、画像、またはその他のメディアに追加される透明なテキストの一種です。PDFにテキスト透かしを挿入することで、文書の作成者や著作権を表示し、文書のセキュリティを保護することができます。以下に、Pythonを使用してPDFにテキスト透かしを追加する方法を紹介します。
## 環境
* Python 3.12.0
* [Spire.PDF for Python](https://www.e-iceblue.com/Introduce/pdf-for-python.html)ライブラリ

このライブラリは購入する必要がありますが、[30 日間の無料試用版](https://www.e-iceblue.com/TemLicense.html)も提供されています。
もっと多いサンプルコードについて、[Spire.PDF for Python](https://www.e-iceblue.com/Download/Spire-PDF-Python.html)をダウンロードして参照してください。
## 準備
まず、[Spire.PDF for Python](https://www.e-iceblue.com/Introduce/pdf-for-python.html) と plum-dispatch v1.7.4を VS Code にインポートします。
1.[Python](https://www.python.org/downloads/) をダウンロードしてインストールします。
2.VS Codeで「Extensions」をクリックし、「Python」を検索してインストールします。
3.「Explorer」-「NO FOLRDER OPENED」-「Open Folder」
4.フォルダーを選択し、そこに「.py」ファイルを追加します。
5.「Terminal」-「New Terminal」
6.次のコマンドを入力します。 「**pip install Spire.PDF**」
## PDFに透かしを追加する
まず、PdfDocumentクラスのオブジェクトを作成し、サンプル文書をロードします。次に、文書の各ページをループし、ウォーターマークのテキスト、位置、角度などを設定します。最後に、PdfPageBase.Canvas.DrawString()メソッドを呼び出してウォーターマークをページに描画します。詳細なメソッドについては、コードのコメントを参照してください。
```python
from spire.pdf import *
from spire.pdf.common import *
import math

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

#PDFドキュメントをロードする
pdf.LoadFromFile("Sample.pdf")

#PdfTrueTypeFont クラスのオブジェクトを作成する
font = PdfTrueTypeFont("Arial", 48.0, 0, True)

# 透かしのテキストと位置を設定する
text = "CONFIDENTIAL"
set1 = float (font.MeasureString(text).Width * math.sqrt(2) / 4)
set2 = float (font.MeasureString(text).Height * math.sqrt(2) / 4)

#PDF内のページをループする
for i in range(pdf.Pages.Count):
    # ページを取得する
    page = pdf.Pages.get_Item(i)
    # 透かしの透明度を設定する
    page.Canvas.SetTransparency(0.4)
    # ページ座標系を指定された位置に変換する
    page.Canvas.TranslateTransform(page.Canvas.Size.Width / 2 - set1 - set2, 
                                   page.Canvas.Size.Height / 2 + set1 - set2)
    # 座標系を反時計回りに 45 度回転する
    page.Canvas.RotateTransform(-45.0)
    # ページに透かしを描画する
    page.Canvas.DrawString(text, font, PdfBrushes.get_DarkBlue (), 0.0, 0.0)

# 結果ファイルを保存する
pdf.SaveToFile("output/TextWatermark.pdf")
pdf.Close()
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2811193/56a418ec-3d9d-5293-5041-2db98cd71e80.png)
## PDF に重複した透かしを追加する
PDF に重複した透かしを追加する場合、ユーザーは PdfTillingBrush オブジェクトを使用して複数行のテキスト透かしを作成できます。 オブジェクトのサイズを変更して透かしの数を設定します。詳細なメソッドについては、コードのコメントを参照してください。
```python
from spire.pdf.common import *
from spire.pdf import *

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

# PDFドキュメントをロードする
pdf.LoadFromFile("Sample.pdf")

# PdfTrueTypeFont クラスのオブジェクトを作成する
font = PdfTrueTypeFont("Arial", 20.0, 0, True)

# 透かしのテキストを指定する
text = "CONFIDENTIAL"

# PDF内のページをループする
for i in range(pdf.Pages.Count):
    # ページを取得する
    page = pdf.Pages.get_Item(i)
    # PdfTilingBrushクラスのオブジェクトを作成する
    brush = PdfTilingBrush(SizeF(page.Canvas.ClientSize.Width / float(3), 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))
    # 座標系を反時計回りに 45 度回転する
    brush.Graphics.RotateTransform(-45.0)
    # ブラシ上に透かしテキストを描画する
    brush.Graphics.DrawString(text, 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.SaveToFile("output/MultiLineTextWatermark.pdf")
pdf.Close()
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2811193/3b0c2ce0-8759-fcdf-0f4c-6010fe99f6ef.png)