チュートリアル

簡単にライブラリーを使用するためのチュートリアルコレクション

チュートリアル».NET»Spire.PDF for .NET»透かし»C#/VB.NET:PDF にテキスト透かしを追加する方法
2022-06-15

C#/VB.NET:PDF にテキスト透かしを追加する方法

PDF ドキュメントが不正に使用されるのを防ぐために、テキストまたは画像でドキュメントに透かしを入れることができます。この記事では、Spire.PDF for .NET を使用して、C# および VB.NET の PDF にテキスト透かし(単一行および複数行の透かし)をプログラムで追加する方法を紹介します。

Spire.PDF for .NET をインストールします

まず、Spire.PDF for .NET パッケージに含まれている DLL ファイルを .NET プロジェクトの参照として追加する必要があります。DLL ファイルは、このリンクからダウンロードするか、NuGet を介してインストールできます。

PM> Install-Package Spire.PDF

PDF にテキスト透かしを追加する

Spire.PDF は、PDF ファイルの透かしを処理するためのインターフェイスまたはクラスを提供していません。ただし、透かし効果を模倣するために、各ページに「機密」、「内部使用」、「ドラフト」などのテキストを描画することはできます。以下は、PDF ドキュメントのすべてのページにテキスト透かしを追加するための主な手順です。

  • PdfDocument オブジェクトを作成し、PdfDocument.LoadFromFile() メソッドを使用してサンプル PDF ドキュメントをロードします。
  • PdfTrueTypeFont オブジェクトを作成し、透かしテキストを指定し、PdfFontBase.MeasureString() メソッドを使用してテキストサイズを測定します。
  • ドキュメント内のすべてのページをトラバースします。
  • PdfPageBase.Canvas.TraslateTransform() メソッドを使用して指定した座標で特定のページの座標系を変換し、PdfPageBase.Canvas.RotateTransform() メソッドを使用して座標系を反時計回りに45度回転します。これにより、透かしがページの中央に45度の角度で表示されるようになります。
  • PdfPageBase.Canvas.DrawString() メソッドを使用して、ページに透かしテキストを描画します。
  • PdfDocument.SaveToFile() メソッドを使用して、ドキュメントを別の PDF ファイルに保存します。
  • C#
  • VB.NET
using Spire.Pdf;
using Spire.Pdf.Graphics;
using System.Drawing;

namespace AddTextWatermarkToPdf
{
    class Program
    {
        static void Main(string[] args)
        {
            //PdfDocumentオブジェクトを作成する
            PdfDocument pdf = new PdfDocument();

            //サンプルPDFドキュメントをロードする
            pdf.LoadFromFile(@"C:\Users\Administrator\Desktop\sample.pdf");

            //PdfTrueTypeFontオブジェクトを作成する
            PdfTrueTypeFont font = new PdfTrueTypeFont(new Font("Arial", 50f), true);

            //透かしテキストを設定する
            string text = "CONFIDENTIAL";

            //テキストサイズを測定する
            SizeF textSize = font.MeasureString(text);
            
            //座標系の平行移動量を計算するために使用される2つのオフセット変数の値を計算する
            float offset1 = (float)(textSize.Width * System.Math.Sqrt(2) / 4);
            float offset2 = (float)(textSize.Height * System.Math.Sqrt(2) / 4);

            //ドキュメント内のすべてのページをトラバースする
            foreach (PdfPageBase page in pdf.Pages)
            {
                //ページの透明度を設定する
                page.Canvas.SetTransparency(0.8f);

                //指定された座標で座標系を変換する
                page.Canvas.TranslateTransform(page.Canvas.Size.Width / 2 - offset1 - offset2, page.Canvas.Size.Height / 2 + offset1 - offset2);

                //座標系を反時計回りに45度回転する
                page.Canvas.RotateTransform(-45);

                //ページに透かしテキストを描画する
                page.Canvas.DrawString(text, font, PdfBrushes.DarkGray, 0, 0);
            }

            //変更を別のファイルに保存する
            pdf.SaveToFile("TextWatermark.pdf");
        }
    }
}
Imports Spire.Pdf
Imports Spire.Pdf.Graphics
Imports System.Drawing
 
Namespace AddTextWatermarkToPdf
    Class Program
        Shared  Sub Main(ByVal args() As String)
            'PdfDocumentオブジェクトを作成する
            Dim pdf As PdfDocument =  New PdfDocument() 
 
            'サンプルPDFドキュメントをロードする
            pdf.LoadFromFile("C:\Users\Administrator\Desktop\sample.pdf")
 
            'PdfTrueTypeFontオブジェクトを作成する
            Dim font As PdfTrueTypeFont =  New PdfTrueTypeFont(New Font("Arial",50f),True) 
 
            '透かしテキストを設定する
            Dim text As String =  "CONFIDENTIAL" 
 
            'テキストサイズを測定する
            Dim textSize As SizeF =  font.MeasureString(text) 
 
            '座標系の平行移動量を計算するために使用される2つのオフセット変数の値を計算する
            Dim offset1 As single = CType((textSize.Width * System.Math.Sqrt(2) / 4), single)
            Dim offset2 As single = CType((textSize.Height * System.Math.Sqrt(2) / 4), single)
 
            'ドキュメント内のすべてのページをトラバースする
            Dim page As PdfPageBase
            For Each page In pdf.Pages
                'ページの透明度を設定する
                page.Canvas.SetTransparency(0.8f)
 
                '指定された座標で座標系を変換する
                page.Canvas.TranslateTransform(page.Canvas.Size.Width / 2 - offset1 - offset2, page.Canvas.Size.Height / 2 + offset1 - offset2)
 
                '座標系を反時計回りに45度回転する
                page.Canvas.RotateTransform(-45)
 
                'ページに透かしテキストを描画する
                page.Canvas.DrawString(text, font, PdfBrushes.DarkGray, 0, 0)
            Next
 
            '変更を別のファイルに保存する
            pdf.SaveToFile("TextWatermark.pdf")
        End Sub
    End Class
End Namespace

C#/VB.NET:PDF にテキスト透かしを追加する方法

複数行のテキスト透かしを PDF に追加

ドキュメントに複数行のテキスト透かしを追加したい場合があります。 タイル透かし効果を実現するには、PdfTilingBrush クラスを使用できます。このクラスは、グラフィック領域を埋めるために繰り返されるタイルパターンを生成します。 以下は、PDF ドキュメントに複数行の透かしを追加するための主な手順です。

  • PdfDocument オブジェクトを作成し、PdfDocument.LoadFromFile() メソッドを使用してサンプル PDF ドキュメントをロードします。
  • カスタムメソッド InsertMultiLineTextWatermark(PdfPageBase page, String watermarkText, PdfTrueTypeFont font, int rowNum, int columnNum) を作成して、複数行のテキスト透かしを PDF ページに追加します。 パラメータ rowNum および columnNum は、タイル透かしの行番号と列番号を指定します。
  • ドキュメント内のすべてのページをトラバースし、カスタムメソッド InsertMultiLineTextWatermark() を呼び出して、各ページに透かしを適用します。
  • PdfDocument.SaveToFile() メソッドを使用して、ドキュメントを別のファイルに保存します。
  • C#
  • VB.NET
using System;
using Spire.Pdf;
using Spire.Pdf.Graphics;
using System.Drawing;

namespace AddMultiLineTextWatermark
{
    class Program
    {
        static void Main(string[] args)
        {
            //PdfDocumentインスタンスを作成する
            PdfDocument pdf = new PdfDocument();

            //サンプルPDFドキュメントをロードする
            pdf.LoadFromFile(@"C:\Users\Administrator\Desktop\sample.pdf");

            //PdfTrueTypeFontオブジェクトを作成する
            PdfTrueTypeFont font = new PdfTrueTypeFont(new Font("Arial", 20f), true);

            //すべてのページをトラバースする
            for (int i = 0; i < pdf.Pages.Count; i++)
            {
                //InsertMultiLineTextWatermark()メソッドを呼び出して、指定したページにテキスト透かしを追加する
                InsertMultiLineTextWatermark(pdf.Pages[i], "E-ICEBLUE CO LTD", font, 3, 3);
            }

            //ドキュメントを別のファイルに保存する
            pdf.SaveToFile("MultiLineTextWatermark.pdf");
        }

        //複数行のテキスト透かしをページに挿入するカスタムメソッドを作成する
        static void InsertMultiLineTextWatermark(PdfPageBase page, String watermarkText, PdfTrueTypeFont font, int rowNum, int columnNum)
        {
            //テキストサイズを測定する
            SizeF textSize = font.MeasureString(watermarkText);

            //座標系の移動量の計算に使用される2つのオフセット変数の値を計算する
            float offset1 = (float)(textSize.Width * System.Math.Sqrt(2) / 4);
            float offset2 = (float)(textSize.Height * System.Math.Sqrt(2) / 4);

            //タイルブラシを作成する
            PdfTilingBrush brush = new PdfTilingBrush(new SizeF(page.ActualSize.Width / columnNum, page.ActualSize.Height / rowNum));
            brush.Graphics.SetTransparency(0.3f);
            brush.Graphics.Save();
            brush.Graphics.TranslateTransform(brush.Size.Width / 2 - offset1 - offset2, brush.Size.Height / 2 + offset1 - offset2);
            brush.Graphics.RotateTransform(-45);

            //タイルブラシに透かしテキストを描画する
            brush.Graphics.DrawString(watermarkText, font, PdfBrushes.Violet, 0, 0);
            brush.Graphics.Restore();

            //タイルブラシを使用して(ページ全体をカバーする)長方形を描画する
            page.Canvas.DrawRectangle(brush, new RectangleF(new PointF(0, 0), page.ActualSize));
        }
    }
}
Imports System
Imports Spire.Pdf
Imports Spire.Pdf.Graphics
Imports System.Drawing
 
Namespace AddMultiLineTextWatermark
    Class Program
        Shared  Sub Main(ByVal args() As String)
            'PdfDocumentインスタンスを作成する
            Dim pdf As PdfDocument =  New PdfDocument() 
 
            'サンプルPDFドキュメントをロードする
            pdf.LoadFromFile("C:\Users\Administrator\Desktop\sample.pdf")
 
            'PdfTrueTypeFontオブジェクトを作成する
            Dim font As PdfTrueTypeFont =  New PdfTrueTypeFont(New Font("Arial",20f),True) 
 
            'すべてのページをトラバースする
            Dim i As Integer
            For  i = 0 To  pdf.Pages.Count- 1  Step  i + 1
                'InsertMultiLineTextWatermark()メソッドを呼び出して、指定したページにテキスト透かしを追加する
                InsertMultiLineTextWatermark(pdf.Pages(i), "E-ICEBLUE CO LTD", font, 3, 3)
            Next
 
            'ドキュメントを別のファイルに保存する
            pdf.SaveToFile("MultiLineTextWatermark.pdf")
        End Sub
 
        '複数行のテキスト透かしをページに挿入するカスタムメソッドを作成する
        Shared  Sub InsertMultiLineTextWatermark(ByVal page As PdfPageBase, ByVal watermarkText As String, ByVal font As PdfTrueTypeFont, ByVal rowNum As Integer, ByVal columnNum As Integer)
            'テキストサイズを測定する
            Dim textSize As SizeF =  font.MeasureString(watermarkText) 
 
            '座標系の移動量の計算に使用される2つのオフセット変数の値を計算する
            Dim offset1 As single = CType((textSize.Width * System.Math.Sqrt(2) / 4), single)
            Dim offset2 As single = CType((textSize.Height * System.Math.Sqrt(2) / 4), single)
 
            'タイルブラシを作成する
            Dim brush As PdfTilingBrush =  New PdfTilingBrush(New SizeF(page.ActualSize.Width / columnNum,page.ActualSize.Height / rowNum)) 
            brush.Graphics.SetTransparency(0.3f)
            brush.Graphics.Save()
            brush.Graphics.TranslateTransform(brush.Size.Width / 2 - offset1 - offset2, brush.Size.Height / 2 + offset1 - offset2)
            brush.Graphics.RotateTransform(-45)
 
            'タイルブラシに透かしテキストを描画する
            brush.Graphics.DrawString(watermarkText, font, PdfBrushes.Violet, 0, 0)
            brush.Graphics.Restore()
 
            'タイルブラシを使用して(ページ全体をカバーする)長方形を描画する
            page.Canvas.DrawRectangle(brush, New RectangleF(New PointF(0, 0), page.ActualSize))
        End Sub
    End Class
End Namespace

C#/VB.NET:PDF にテキスト透かしを追加する方法

一時ライセンスを申請する

結果ドキュメントから評価メッセージを削除したい場合、または機能制限を取り除く場合は、についてこのメールアドレスはスパムボットから保護されています。閲覧するにはJavaScriptを有効にする必要があります。 にお問い合わせ、30 日間有効な一時ライセンスを取得してください。

Read 980 times