はじめに
テキスト透かしは、ファイル、画像、またはその他のメディアに追加される透明なテキストの一種です。PDFにテキスト透かしを挿入することで、文書の作成者や著作権を表示し、文書のセキュリティを保護することができます。以下に、Pythonを使用してPDFにテキスト透かしを追加する方法を紹介します。
環境
- Python 3.12.0
- Spire.PDF for Pythonライブラリ
このライブラリは購入する必要がありますが、30 日間の無料試用版も提供されています。
もっと多いサンプルコードについて、Spire.PDF for Pythonをダウンロードして参照してください。
準備
まず、Spire.PDF for Python と plum-dispatch v1.7.4を VS Code にインポートします。
1.Python をダウンロードしてインストールします。
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()メソッドを呼び出してウォーターマークをページに描画します。詳細なメソッドについては、コードのコメントを参照してください。
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()
PDF に重複した透かしを追加する
PDF に重複した透かしを追加する場合、ユーザーは PdfTillingBrush オブジェクトを使用して複数行のテキスト透かしを作成できます。 オブジェクトのサイズを変更して透かしの数を設定します。詳細なメソッドについては、コードのコメントを参照してください。
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()