LoginSignup
2
1

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

Last updated at Posted at 2023-12-08

はじめに

テキスト透かしは、ファイル、画像、またはその他のメディアに追加される透明なテキストの一種です。PDFにテキスト透かしを挿入することで、文書の作成者や著作権を表示し、文書のセキュリティを保護することができます。以下に、Pythonを使用してPDFにテキスト透かしを追加する方法を紹介します。

環境

このライブラリは購入する必要がありますが、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()

image.png

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()

image.png

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1