0
0

More than 1 year has passed since last update.

JavaでPDFに1行または多行テキスト透かしを追加する方法

Last updated at Posted at 2022-09-30

PDFの透かしは、その内容の下または前にテキストまたは画像を配置することによって、所有者を識別する、機密性を示す、またはPDFファイルの状態を示す手段として機能します。この記事では、無料のSpire.PDF for Javaを使用して、JavaでPDFに1行または複数行のテキスト透かしを追加する方法、および透かしの位置、不透明度、サイズ、および角度を設定する方法を紹介します。

【依存関係の追加】

この方法は、無料のFree Spire.PDF for Javaが必要ですので、先にjarファイルをインポートしてください。

1. Maven

Maven を使用している場合、プロジェクトの pom.xml ファイルに以下のコードを追加することで、簡単にアプリケーションに JAR ファイルをインポートすることができます。

<repositories>
    <repository>
        <id>com.e-iceblue</id>
        <name>e-iceblue</name>
        <url>https://repo.e-iceblue.com/nexus/content/groups/public/</url>
    </repository>
</repositories>
<dependencies>
    <dependency>
        <groupId>e-iceblue</groupId>
        <artifactId>spire.pdf.free</artifactId>
        <version>5.1.0</version>
    </dependency>
</dependencies>

2. 公式サイトよりJarファイルをダウンロード

まず、Free Spire.PDF for Java の公式サイトよりzipファイルをダウンロードします。zipファイルを解凍し、libフォルダの下にあるSpire.Pdf.jarファイルを依存関係としてプロジェクトにインポートしてください。

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

以下は、Spire.PDF for Javaを使用してPDFに一行のテキスト透かしを追加する手順です。

  • PdfDocument クラスのオブジェクトを作成します。
  • PdfDocument.loadFromFile() メソッドを使用して、PDFファイルを読み込みます。
  • 透かしのテキストとフォントを指定する。
  • ページの座標系を適切な位置に移動させる。
  • テキスト透かしを指定した位置に描画する。
  • PdfDocument.saveToFile() メソッドを使用してドキュメントを保存する。

Java

import com.spire.pdf.PdfDocument;
import com.spire.pdf.PdfPageBase;
import com.spire.pdf.graphics.PdfBrushes;
import com.spire.pdf.graphics.PdfTrueTypeFont;

import java.awt.*;
import java.awt.geom.Dimension2D;

public class addOneLineTextWatermark {

    public static void main(String[] args) {

        //PdfDocument クラスのオブジェクトを作成する
        PdfDocument pdf = new PdfDocument();

        //PDFドキュメントを読み込む
        pdf.loadFromFile("C:/遠距離医療.pdf");

        //PdfTrueTypeFont クラスのオブジェクトを作成する
        PdfTrueTypeFont font = new PdfTrueTypeFont(new Font("Yu Gothic Medium", Font.BOLD,50), true);

        //透かしの文字を設定する
        String text = "サンプル";

        //文字サイズを測定する
        Dimension2D textSize = font.measureString(text);

        //座標系の移動量を計算するために使用する、2つのオフセット変数の値を計算する
        float offset1 = (float)(textSize.getWidth() * Math.sqrt(2) / 4);
        float offset2 = (float)(textSize.getHeight() * Math.sqrt(2) / 4);

        //ドキュメント内の全ページをループする
        for (int i = 0; i < pdf.getPages().getCount(); i++) {

            PdfPageBase page = pdf.getPages().get(i);

            //ページの透明度を設定する
            page.getCanvas().setTransparency(0.5f);

            //座標系を指定した座標で平行移動させる
            page.getCanvas().translateTransform(page.getCanvas().getSize().getWidth() / 2 - offset1 - offset2, page.getCanvas().getSize().getHeight() / 2 + offset1 - offset2);

            //座標系を反時計回りに45度回転させる
            page.getCanvas().rotateTransform(-45);

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


        //ドキュメントを保存する
        pdf.saveToFile("1行のテキスト透かし.pdf");
    }
}

【結果のPDFファイル】

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

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

以下は、PDFに複数行のテキスト透かしを追加する手順です。

  • PdfDocument クラスのオブジェクトを作成します。
  • PdfDocument.loadFromFile() メソッドを使用してPDFドキュメントを読み込みます。
  • カスタムメソッド insertMultiLineTextWatermark(PdfPageBase page, String watermarkText, PdfTrueTypeFont font, int rowNum, int columnNum) を作成し、PDF ページに複数行のテキスト透かしを追加します。パラメータ rowNum と columnNum は、透かしの行と列の番号を指定します。
  • ドキュメント内のすべてのページをループして、カスタムメソッド insertMultiLineTextWatermark() を呼び出し、各ページに透かしを追加します。
  • PdfDocument.saveToFile() メソッドを使用してドキュメントを保存します。

Java

import com.spire.pdf.PdfDocument;
import com.spire.pdf.PdfPageBase;
import com.spire.pdf.graphics.PdfBrushes;
import com.spire.pdf.graphics.PdfTilingBrush;
import com.spire.pdf.graphics.PdfTrueTypeFont;

import java.awt.*;
import java.awt.geom.Dimension2D;

public class addMultiLineWatermarkToPDF {

    public static void main(String[] args) {

        //PdfDocumentクラスのインスタンスを作成する
        PdfDocument pdf = new PdfDocument();

        //PDFドキュメントを読み込む
        pdf.loadFromFile("C:/Users/Allen/Desktop/Sample1234.pdf");

        //PdfTrueTypeFontクラスのオブジェクトを作成する
        PdfTrueTypeFont font = new PdfTrueTypeFont(new Font("Yu Mincho", Font.BOLD, 20), true);

        //全ページをループする
        for (int i = 0; i < pdf.getPages().getCount(); i++) {

            //insertMultiLineTextWatermark()メソッドを呼び出し、指定されたページにテキスト透かしを追加する
            insertMultiLineTextWatermark(pdf.getPages().get(i), "持ち出し厳禁", font, 3, 3);
        }

        //ドキュメントを保存する
        pdf.saveToFile("多行のテキスト透かし.pdf");
    }

    //ページに複数行のテキスト透かしを挿入するカスタムメソッドを作成する
    static void insertMultiLineTextWatermark(PdfPageBase page, String watermarkText, PdfTrueTypeFont font, int rowNum, int columnNum) {

        //テキストのサイズを測定する
        Dimension2D textSize = font.measureString(watermarkText);

        //座標系の移動量を計算するために使用する、2つのオフセット変数の値を計算する
        double offset1 = textSize.getWidth() * Math.sqrt(2) / 4;
        double offset2 = textSize.getHeight() * Math.sqrt(2) / 4;

        //タイルブラシを作成する
        PdfTilingBrush brush = new PdfTilingBrush(new Dimension((int) page.getActualSize().getWidth() / columnNum, (int) page.getActualSize().getHeight() / rowNum));
        brush.getGraphics().setTransparency(0.5f);
        brush.getGraphics().save();
        brush.getGraphics().translateTransform(brush.getSize().getWidth() / 2 - offset1 - offset2, brush.getSize().getHeight() / 2 + offset1 - offset2);
        brush.getGraphics().rotateTransform(-45);

        //タイルブラシに透かし文字を描画する
        brush.getGraphics().drawString(watermarkText, font, PdfBrushes.getDarkOrange(), 0, 0);
        brush.getGraphics().restore();

        //タイルブラシで矩形(ページ全体を覆う)を描く
        page.getCanvas().drawRectangle(brush, 0, 0, page.getActualSize().getWidth(), page.getActualSize().getHeight());
    }
}

【結果のPDFファイル】

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

この記事では、PDFドキュメントに透かしを挿入する手順を紹介しますが、PDFドキュメントの操作についてもっと知りたい場合は、Spire.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