LoginSignup
1
1

More than 1 year has passed since last update.

PDFのレイヤーの追加・非表示・削除(Java)

Last updated at Posted at 2022-09-29

PDFレイヤーは、PDFドキュメントのためのインタラクティブな機能です。レイヤーは、テキスト、画像、その他の要素を追加することができる独立した重ね合わせページと見なすことができます。レイヤーは名前を持つことができ、ユーザーはこのレイヤーが見えるか見えないかを変更することができます。この記事では、無料のFree Spire.PDF for Javaを使用して、PDFドキュメントにレイヤーを追加、非表示、削除する方法を説明します。

【依存関係の追加】

この方法は、無料の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にレイヤーを追加する

以下は、Spire.PDF for Javaを使用してPDFドキュメントにレイヤーを作成する手順です。

  • PdfDocument クラスのオブジェクトを作成し、PDF ファイルを読み込みます。
  • Document.getLayers().addLayer(string layerName) メソッドを使用して PdfLayer クラスのオブジェクトを作成します。
  • PdfLayer.createGraphics() メソッドを使用して、レイヤーのためのキャンバスを作成します。
  • テキスト、画像、その他の要素をキャンバスに描画します。
  • PdfDocument.saveToFile() メソッドを使用してPDFファイルを保存します。

Java

import com.spire.pdf.PdfDocument;
import com.spire.pdf.PdfPageBase;
import com.spire.pdf.graphics.*;
import com.spire.pdf.graphics.layer.PdfLayer;

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

public class addLayerToPDF {

    public static void main(String[] args) throws IOException {

        //PdfDocument クラスのオブジェクトを作成し、PDFファイルを読み込む
        PdfDocument pdf = new PdfDocument();
        pdf.loadFromFile("C:\\Sample.pdf");

        //addLayerWatermarkメソッドを呼び出して透かしレイヤーを追加する
        addLayerWatermark(pdf);

        //addLayerImage メソッドを呼び出して、イメージレイヤーを追加する
        addLayerImage(pdf);

        //PDFファイルを保存する
        pdf.saveToFile("レイヤーの追加.pdf");
        pdf.close();
    }

    private static void addLayerWatermark(PdfDocument doc) throws IOException {

        //「透かし」という名前のレイヤーを作成する
        PdfLayer layer = doc.getLayers().addLayer("透かし");

        //フォントを作成する
        PdfTrueTypeFont font = new PdfTrueTypeFont(new Font("Yu Mincho", Font.BOLD,48),true);

        //透かしのテキストを指定する
        String watermarkText = "非公開";

        //テキストの大きさを取得する
        Dimension2D fontSize = font.measureString(watermarkText);

        //2つのオフセットを計算する
        float offset1 = (float)(fontSize.getWidth() * Math.sqrt(2) / 4);
        float offset2 = (float)(fontSize.getHeight() * Math.sqrt(2) / 4);

        //ページ数を取得する
        int pageCount = doc.getPages().getCount();

        //2つの変数を宣言する
        PdfPageBase page;
        PdfCanvas canvas;

        //ページをループする
        for (int i = 0; i < pageCount; i++) {

            page = doc.getPages().get(i);

            //レイヤーからキャンバスを作成する
            canvas = layer.createGraphics(page.getCanvas());
            canvas.translateTransform(canvas.getSize().getWidth() / 2 - offset1 - offset2, canvas.getSize().getHeight() / 2 + offset1 - offset2);
            canvas.setTransparency(0.4f);
            canvas.rotateTransform(-45);

            //レイヤーのキャンバスに文字列を描く
            canvas.drawString(watermarkText, font, PdfBrushes.getDarkBlue(), 0, 0);
        }
    }

    private static void addLayerImage(PdfDocument doc) {

        //「イメージ 」という名前のレイヤーを作成する
        PdfLayer layer = doc.getLayers().addLayer("イメージ");

        //ページの大きさを取得する
        Dimension2D size = doc.getPages().get(0).getSize();

        //xとyの初期値を指定する
        float x = 300;
        float y = 90;

        //ページ数を取得する
        int pageCount = doc.getPages().getCount();

        //2つの変数を宣言する
        PdfPageBase page;
        PdfCanvas canvas;

        //ページをループする
        for (int i = 0; i < pageCount; i++) {

            //レイヤーに画像を描画する
            PdfImage pdfImage = PdfImage.fromFile("C:\\Sample.jpg");
            float width = pdfImage.getWidth();
            float height = pdfImage.getHeight();
            page = doc.getPages().get(i);
            canvas = layer.createGraphics(page.getCanvas());
            canvas.drawImage(pdfImage, x, y, width, height);

            //レイヤーに線を描く
            PdfPen pen = new PdfPen(PdfBrushes.getDarkGray(), 2f);
            canvas.drawLine(pen, x, y + height + 5, size.getWidth() - x, y + height + 2);
        }
    }
}

【元のPDFドキュメント】

PDF

【結果のPDFファイル】

PDFにレイヤーを追加する

PDFのレイヤーの可視性を設定する

以下は、Spire.PDF for Javaを使用してPDFのレイヤーの可視性を設定する手順です。

  • PdfDocument クラスのオブジェクトを作成し、レイヤーを含む既存のPDFファイルを読み込みます。
  • PdfDocument.getLayers().get(int index) メソッドを使用して、PDF内の特定のレイヤーを取得します。
  • PdfLayer.setVisibility() メソッドを使用して、レイヤーの可視性を設定します。
  • PdfDocument.saveToFile() メソッドを使用して、別のPDFファイルにドキュメントを保存します。

Java

import com.spire.pdf.FileFormat;
import com.spire.pdf.PdfDocument;
import com.spire.pdf.graphics.layer.PdfVisibility;

public class setLayerVisibility {
    public static void main(String[] args) {

        //PdfDocumentクラスオブジェクトを作成し、PDFファイルを読み込む
        PdfDocument pdf = new PdfDocument();
        pdf.loadFromFile("レイヤーの追加.pdf");

        //最初のレイヤーの可視性を「Off」に設定する
        pdf.getLayers().get(0).setVisibility(PdfVisibility.Off);

        //PDFファイルを保存する
        pdf.saveToFile("レイヤーの非表示.pdf", FileFormat.PDF);
        pdf.dispose();
    }
}

【結果のPDFファイル】

PDFのレイヤーの可視性を設定する

PDFからレイヤーを削除する

PDFの特定のレイヤーを削除する手順は以下のとおりです。

  • PdfDocument クラスのオブジェクトを作成します。
  • PdfDocument.loadFromFile() メソッドを使用してレイヤーを含む PDF ファイルを読み込みます。
  • PdfDocument.getLayers() メソッドを使用して、ドキュメントからレイヤーの集合を取得します。
  • PdfLayerCollection.removeLayer() メソッドを使用して、特定のレイヤーを削除します。
  • PdfDocument.saveToFile() メソッドを使用して、ドキュメントを保存します。

Java

import com.spire.pdf.PdfDocument;

public class deleteLayers {

    public static void main(String[] args) {

        //PdfDocument クラスのオブジェクトを作成し、PDF ファイルを読み込む
        PdfDocument pdf = new PdfDocument();
        pdf.loadFromFile("レイヤーの追加.pdf");

        //特定のレイヤーをその名前で削除する
        pdf.getLayers().removeLayer("watermark");

        //PDFファイルを保存する
        pdf.saveToFile("レイヤーの削除.pdf");
        pdf.close();
    }
}

【結果のPDFファイル】

PDFからレイヤーを削除する

この記事を読んで、PDFのレイヤーの基本的な扱い方はご理解いただけたかと思います。もし、他にわからないことがあれば、Spire.PDFフォーラムで詳細をご覧になってください。

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