PDF文書への透かし追加による著作権保護
PDF文書の配布において、著作権保護と不正利用防止は重要な課題です。テキスト透かしの追加は、文書内容を損なわずに所有権を明示する有効な手段となります。
必要なライブラリのインストール
pip install Spire.PDF
単一テキスト透かしの挿入
中央に傾斜した単一行の透かしを追加する手順:
- PdfDocumentオブジェクトの作成とPDF読み込み
- フォントオブジェクトの設定
- 透かしテキストと位置の計算
- 全ページへの透かし描画
- 文書の保存
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()