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.10.3</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 天的临时许可证。
 
    


 
					



