PDF のレイヤーとは、ドキュメントのコンテンツをグループ化して階層化する方法であり、オプションコンテンツグループ(OCG)オブジェクトを使用してサポートされています。ユーザーは必要に応じて異なるレイヤーを選択的に表示または非表示にすることができます。PDF のレイヤーは通常、テキスト、画像、図形、注釈などのドキュメントの視覚要素を管理するために使用されます。これらの要素を異なるレイヤーに配置することで、ユーザーはドキュメントの可視性とレイアウトを簡単に制御することができます。この記事では、Spire.PDF for Java を使用して Java プログラムを介して PDF ドキュメントにレイヤーを追加、非表示にしたり削除したりする方法について説明します。
Spire.PDF for Java をインストールします
まず、Spire.PDF for Java を Java プロジェクトに追加する必要があります。JAR ファイルは、このリンクからダウンロードできます。Maven を使用する場合は、次のコードをプロジェクトの pom.xml ファイルに追加する必要があります。
<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</artifactId>
<version>9.7.8</version>
</dependency>
</dependencies>
PDF ドキュメントにレイヤーを追加する
Spire.PDF for Java は、PDF ドキュメントにレイヤーを追加する PdfDocument.getLayers().addLayer() メソッドを提供します。 その具体的な手順は以下の通りです。
- PdfDocument クラスのオブジェクトを作成します。
- PdfDocument.loadFromFile() メソッドを使用して PDF ファイルを読み込みます。
- PdfDocument.getLayers().addLayer(java.lang.String name) メソッドを使用して、PDF にレイヤーを追加し、名前を指定します。 また、PdfDocument.getLayers().addLayer(java.lang.String name, PdfVisibility state) メソッドを使用して、レイヤーを追加する際にレイヤーの可視性を設定することもできます。
- PdfLayer.createGraphics() メソッドを使用して、レイヤー用のキャンバスを作成します。
- キャンバスにテキストや画像などの要素を描画します。
- PdfDocument.saveToFile() メソッドを使用して、結果のドキュメントを保存します。
- 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 addLayersToPdf {
public static void main(String[] args) throws IOException {
//PdfDocumentクラスのオブジェクトを作成する
PdfDocument pdf = new PdfDocument();
//PDFドキュメントを読み込む
pdf.loadFromFile("サンプル.pdf");
//AddLayerWatermarkメソッドを使用してウォーターマークのレイヤーを追加する
AddLayerWatermark(pdf);
//AddLayerHeaderメソッドを使用してヘッダーのレイヤーを追加する
AddLayerHeader(pdf);
//ドキュメントを保存する
pdf.saveToFile("レイヤーの追加.pdf");
pdf.dispose();
}
private static void AddLayerWatermark(PdfDocument doc) {
//"透かし"という名前のレイヤーを作成する
PdfLayer layer = doc.getLayers().addLayer("透かし");
//フォントを作成する
PdfTrueTypeFont font = new PdfTrueTypeFont(new Font("HarmonyOS Sans SC Medium", Font.PLAIN, 48), true);
//透かしのテキストを指定する
String watermarkText = "オリジナル";
//テキストのサイズを取得する
Dimension2D fontSize = font.measureString(watermarkText);
//オフセットを計算する
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 AddLayerHeader(PdfDocument doc) {
//"ヘッダー"という名前のレイヤーを作成する
PdfLayer layer = doc.getLayers().addLayer("ヘッダー");
//ページのサイズを取得する
Dimension2D size = doc.getPages().get(0).getSize();
//ページ数を取得する
int pageCount = doc.getPages().getCount();
//2つの変数を宣言する
PdfPageBase page;
PdfCanvas canvas;
//すべてのページをループで処理する
for (int i = 0; i < pageCount; i++) {
//レイヤーに画像を描画する
PdfImage pdfImage = PdfImage.fromFile("ヘッダー.jpg");
page = doc.getPages().get(i);
float width = pdfImage.getWidth();
float height = pdfImage.getHeight();
float x = (float) size.getWidth() / 2 - width / 2;
float y = 30;
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 レイヤーの可視性を設定するには、指定されたレイヤーのインデックスまたは名前を通して PdfDocument.getLayers().get() メソッドを使用し、PdfLayer.setVisibility(PdfVisibility value) メソッドを使用してレイヤーの表示または非表示を設定する必要があります。 その具体的な手順は以下の通りです。
- PdfDocument クラスのオブジェクトを作成します。
- PdfDocument.loadFromFile() メソッドを使用して PDF ドキュメントを読み込みます。
- PdfDocument.getLayers().get().setVisibility() メソッドを使用して、指定したレイヤーの可視性を設定します。
- PdfDocument.saveToFile() メソッドを使用して、結果のドキュメントを保存します。
- 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クラスのオブジェクトを作成する
PdfDocument pdf = new PdfDocument();
//PDFドキュメントを読み込む
pdf.loadFromFile("レイヤーの追加.pdf");
//最初のレイヤーの可視性をOffに設定する
pdf.getLayers().get(0).setVisibility(PdfVisibility.Off);
//ファイルを保存する
pdf.saveToFile("レイヤーの非表示.pdf", FileFormat.PDF);
pdf.dispose();
}
}
PDF ドキュメントからレイヤーを削除する
Spire.PDF for Java では、PdfDocument.getLayers().removeLayer(java.lang.String name) メソッドを使用して、既存のレイヤーを名前で削除することもできます。 しかし 、 PDF レイヤーの名前は一意でない可能性があり 、 このメソッドは同じ名前の PDF レイヤーをすべて削除しますので注意してください。 具体的な手順は以下のとおりです。
- PdfDocument クラスのオブジェクトを作成します。
- PdfDocument.LoadFromFile() メソッドを使用して PDF ドキュメントを読み込みます。
- PdfDocument.getLayers().removeLayer() メソッドを使用して、名前で指定されたレイヤーを削除します。
- PdfDocument.saveToFile() メソッドを使用して、結果のドキュメントを保存します。
- Java
import com.spire.pdf.PdfDocument;
public class deleteLayers {
public static void main(String[] args) {
//PdfDocumentクラスのオブジェクトを作成する
PdfDocument pdf = new PdfDocument();
//PDFドキュメントを読み込む
pdf.loadFromFile("レイヤーの追加.pdf");
//指定したレイヤーをその名前で削除する
pdf.getLayers().removeLayer("ヘッダー");
//ファイルを保存する
pdf.saveToFile("レイヤーの削除.pdf");
pdf.close();
}
}
一時ライセンスを申請する
結果ドキュメントから評価メッセージを削除したい場合、または機能制限を取り除く場合は、についてこのメールアドレスはスパムボットから保護されています。閲覧するにはJavaScriptを有効にする必要があります。にお問い合わせ、30 日間有効な一時ライセンスを取得してください。