0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

C# を使用してPDFにテキスト透かしを追加する

Posted at

透かしは、一般的に文書の著作権情報、作者、所属団体、または文書属性などを表示するために使用されます。テキスト注釈などとは異なり、テキスト透かしはページに描画される要素であるため、簡単に削除することができません。そのため、透かしは偽造防止にも非常に有効です。この記事では、Free Spire.PDF for .NET(無料版)を使用してPDFにテキスト透かしを追加する具体的な方法とサンプルコードを共有します。

無料の.NETライブラリをインストールする

始める前に、Free Spire.PDF for .NET ライブラリをインストールする必要があります。このライブラリを使用すると、無料で PDF ファイルを作成、編集、処理、変換できますが、ページ数には一定の制限があります。それをインストールする方法は 2 つあります。

  • 方法1:NuGet 経由でインストールする
    Visual Studioを開いて新しいプロジェクトを作成します。次に、「Solution Explorer」で「References」を右クリックし、「Nuget Manage Packages」を選択します。Free Spire.PDF for .NETを検索してインストールします。

  • 方法2:手動でSpire.PDF.dllを追加する
    Free Spire.PDF for .NETをローカルにダウンロードしインストールします。次に、Visual Studioて新しいプロジェクトを作成し、右側の「Solution Explorer」で「References」を右クリックし、「Add Reference」>「Browse」を選択して、インストールパス下のBINフォルダのdllファイルを見つけ、「OK」をクリックして、プログラムに参照を追加します。

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

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

C#のコード:

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.4f);

                //指定された座標で座標系を変換する
                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.DarkBlue, 0, 0);
            }

            //変更を別のファイルに保存する
            pdf.SaveToFile("TextWatermark.pdf");
        }
    }
}

結果:

PDFTextWatermark.png

C# で PDF に複数行のテキスト透かしを追加する

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

C#のコード:

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], "CONFIDENTIAL", 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));
        }
    }
}

結果:
multiLinePDFTextWatermark.png


:ledger: もしPDFに画像透かしを追加したい場合は、以下のリンクを参照することができます。

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?