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のレイヤーの可視性を設定する
以下は、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の特定のレイヤーを削除する手順は以下のとおりです。
- 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のレイヤーの基本的な扱い方はご理解いただけたかと思います。もし、他にわからないことがあれば、Spire.PDFフォーラムで詳細をご覧になってください。