PDF 图层是一种将文档内容分组并分层的方式,通过使用可选内容组(OCG)对象进行支持。用户可以根据需要选择性地查看或隐藏不同的图层。PDF 图层通常用于管理文档的视觉元素,如文本、图像、形状和注释。通过将这些元素放置在不同的图层中,用户可以轻松地控制文档内容的可见性和布局。PDF 图层还可以用于创建交互式文档,例如在表单中使用图层来显示或隐藏表格字段。本文将介绍如何使用 Spire.PDF for Java 通过 Java 程序在 PDF 文档中添加、隐藏或删除图层,以便更好地管理文档内容。
安装 Spire.PDF for Java
首先,您需要在 Java 程序中添加 Spire.Pdf.jar 文件作为依赖项。JAR 文件可以从此链接下载。 如果您使用 Maven,则可以将以下代码添加到项目的 pom.xml 文件中,从而轻松地在应用程序中导入 JAR 文件
<repositories>
<repository>
<id>com.e-iceblue</id>
<name>e-iceblue</name>
<url>https://repo.e-iceblue.cn/repository/maven-public/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>e-iceblue</groupId>
<artifactId>spire.pdf</artifactId>
<version>11.1.2</version>
</dependency>
</dependencies>
在 PDF 文档中添加图层
Spire.PDF for Java 提供了 PdfDocument.getLayers().addLayer() 方法来在 PDF 文档中添加图层,然后可以将文本、线条、图像或形状等绘制在 PDF 图层上。具体操作步骤如下:
- 创建一个 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();
//声明两个变量
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();
//声明两个变量
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();
}
}
申请临时 License
如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期 30 天的临时许可证。