PythonでPDF文書にテキスト透かしを挿入する方法

PDF文書への透かし追加による著作権保護

PDF文書の配布において、著作権保護と不正利用防止は重要な課題です。テキスト透かしの追加は、文書内容を損なわずに所有権を明示する有効な手段となります。

必要なライブラリのインストール

pip install Spire.PDF

単一テキスト透かしの挿入

中央に傾斜した単一行の透かしを追加する手順:

  1. PdfDocumentオブジェクトの作成とPDF読み込み
  2. フォントオブジェクトの設定
  3. 透かしテキストと位置の計算
  4. 全ページへの透かし描画
  5. 文書の保存
from spire.pdf import *
from spire.pdf.common import *
import math

document = PdfDocument()
document.LoadFromFile("input.pdf")

text_font = PdfTrueTypeFont("Arial", 45.0, 0, True)
watermark_text = "内部資料"

width_offset = float(text_font.MeasureString(watermark_text).Width * math.sqrt(2) / 4)
height_offset = float(text_font.MeasureString(watermark_text).Height * math.sqrt(2) / 4)

for page_index in range(document.Pages.Count):
    current_page = document.Pages.get_Item(page_index)
    current_page.Canvas.SetTransparency(0.4)
    
    current_page.Canvas.TranslateTransform(
        current_page.Canvas.Size.Width / 2 - width_offset - height_offset,
        current_page.Canvas.Size.Height / 2 + width_offset - height_offset
    )
    current_page.Canvas.RotateTransform(-45.0)
    current_page.Canvas.DrawString(watermark_text, text_font, PdfBrushes.get_Blue(), 0.0, 0.0)

document.SaveToFile("output/single_watermark.pdf")
document.Close()

複数行テキスト透かしの作成

ページ全体に繰り返し表示される透かしの実装方法:

from spire.pdf.common import *
from spire.pdf import *

pdf_doc = PdfDocument()
pdf_doc.LoadFromFile("input.pdf")

font_style = PdfTrueTypeFont("MS Gothic", 28.0, 0, True)
mark_text = "機密情報"

for i in range(pdf_doc.Pages.Count):
    page = pdf_doc.Pages.get_Item(i)
    tiling_brush = PdfTilingBrush(
        SizeF(page.Canvas.ClientSize.Width / 4.0, page.Canvas.ClientSize.Height / 4.0)
    )
    
    tiling_brush.Graphics.SetTransparency(0.25)
    tiling_brush.Graphics.Save()
    tiling_brush.Graphics.TranslateTransform(
        tiling_brush.Size.Width / 2.0, 
        tiling_brush.Size.Height / 2.0
    )
    tiling_brush.Graphics.RotateTransform(-30.0)
    tiling_brush.Graphics.DrawString(
        mark_text, font_style, PdfBrushes.get_Gray(), 
        0.0, 0.0, PdfStringFormat(PdfTextAlignment.Center)
    )
    tiling_brush.Graphics.Restore()
    
    page.Canvas.DrawRectangle(
        tiling_brush, 
        RectangleF(PointF(0.0, 0.0), page.Canvas.ClientSize)
    )

pdf_doc.SaveToFile("output/multi_line_watermark.pdf")
pdf_doc.Close()

タグ: Python pdf Spire.PDF 透かし 文書保護

6月29日 00:13 投稿