Java - Add, Hide, or Delete Layers in PDF
Tags: java, pdf, api, layer
Published: 2022-07-23 04:14:04

PDF layer is an interactive feature for PDF documents. You can consider a layer as a separate overlaid page on which text, images or other elements can be added. A layer can have a name and the user can alter whether this layer is visible or not. This article demonstrates how to **add, hide or delete layers in a PDF** document by using [Spire.PDF for Java](https://www.e-iceblue.com/Introduce/pdf-for-java.html).

- [Add Layers to PDF](#add-layers-to-pdf)
- [Set Visibility of Layers in PDF](#set-visibility-of-layers-in-pdf)
- [Delete Layers from PDF](#delete-layers-from-pdf)

## Add Spire.Pdf.jar as dependency

If you are working on a maven project, you can include the dependency in pom.xml file using this:

```java
<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>8.7.0</version>
    </dependency>
</dependencies>
```
If you are not using maven, then you can find the required jar files from the zip file available in [this location](https://www.e-iceblue.com/Download/pdf-for-java.html). Include all the jar files into the application lib folder to run the sample code given in this tutorial.

## Add Layers to PDF

The following are the steps to create layers in a PDF document using Spire.PDF for Java.

- Create a **PdfDocument** object and load an existing PDF file.
- Create a **PdfLayer** object using **Document.getLayers().addLayer(string layerName)** method.
- Create a canvas for the layer using **PdfLayer.createGraphics()** method.
- Draw text, image or other elements on the canvas.
- Save the document to another PDF file using **PdfDocument.saveToFile()** method.

```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 {

        //Create a PdfDocument object and load the sample PDF file
        PdfDocument pdf = new PdfDocument();
        pdf.loadFromFile("C:\\Users\\Administrator\\Desktop\\Terms of Service.pdf");
        //Invoke AddLayerWatermark method to add a watermark layer
        AddLayerWatermark(pdf);
        //Invoke AddLayerHeader method to add a header layer
        AddLayerHeader(pdf);
        //Save to file
        pdf.saveToFile("output/AddLayers.pdf");
        pdf.close();
    }

    private static void AddLayerWatermark(PdfDocument doc) throws IOException {

        //Create a layer named "watermark"
        PdfLayer layer = doc.getLayers().addLayer("watermark");
        //Create a font
        PdfTrueTypeFont font = new PdfTrueTypeFont(new Font("Arial", Font.PLAIN,48),true);
        //Specify watermark text
        String watermarkText = "CONFIDENTIAL";
        //Get text size
        Dimension2D fontSize = font.measureString(watermarkText);
        //Calculate two offsets
        float offset1 = (float)(fontSize.getWidth() * Math.sqrt(2) / 4);
        float offset2 = (float)(fontSize.getHeight() * Math.sqrt(2) / 4);
        //Get page count
        int pageCount = doc.getPages().getCount();
        //Declare two variables
        PdfPageBase page;
        PdfCanvas canvas;
        //Loop through the pages
        for (int i = 0; i < pageCount; i++) {

            page = doc.getPages().get(i);
            //Create a canvas from layer
            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);
            //Draw sting on the canvas of layer
            canvas.drawString(watermarkText, font, PdfBrushes.getDarkBlue(), 0, 0);
        }
    }

    private static void AddLayerHeader(PdfDocument doc) {

        //Create a layer named "header"
        PdfLayer layer = doc.getLayers().addLayer("header");
        //Get page size
        Dimension2D size = doc.getPages().get(0).getSize();
        //Specify the initial values of X and y
        float x = 70;
        float y = 15;
        //Get page count
        int pageCount = doc.getPages().getCount();
        //Declare two variables
        PdfPageBase page;
        PdfCanvas canvas;
        //Loop through the pages
        for (int i = 0; i < pageCount; i++) {

            //Draw an image on the layer
            PdfImage pdfImage = PdfImage.fromFile("C:\\Users\\Administrator\\Desktop\\terms.png");
            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);
            //Draw a line on the layer
            PdfPen pen = new PdfPen(PdfBrushes.getDarkGray(), 2f);
            canvas.drawLine(pen, x, y + height + 5, size.getWidth() - x, y + height + 2);
        }
    }
}
```

![addlayers](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9243t7c6gg41x0bso01w.png)

##Set Visibility of Layers in PDF

The following are the steps to set visibility of layers in PDF using Spire.PDF for Java.

- Create a **PdfDocument** object and load an existing PDF file containing laypers.
- Get a specific layer in the PDF using **PdfDocument.getLayers().get(int index)** method.
- Set the visibility of the layer using **PdfLayer.setVisibility() **method.
- Save the document to another PDF file using **PdfDocument.saveToFile(**) method.

```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) {

        //Create a PdfDocument object and load the sample PDF file
        PdfDocument pdf = new PdfDocument();
        pdf.loadFromFile("C:\\Users\\Administrator\\Desktop\\AddLayers.pdf");

        //Set the visibility of the first layer to off
        pdf.getLayers().get(0).setVisibility(PdfVisibility.Off);

        //Save to file
        pdf.saveToFile("output/HideLayer.pdf", FileFormat.PDF);
        pdf.dispose();
    }
}
```

![hidelayers](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xcbhipcltfng4p3u4l8z.png)

##Delete Layers from PDF

The following are the steps to delete a specific layer in PDF using Spire.PDF for Java.

- Create a **PdfDocument** object.
- Load a PDF file containing layers using **PdfDocument.loadFromFile()** method.
- Get the layer collection from the document using **PdfDocument.getLayers()** method.
- Remove a specific layer using **PdfLayerCollection.removeLayer()** method.
- Save the document to another file using **PdfDocument.saveToFile()** method.

```java
import com.spire.pdf.PdfDocument;

public class DeleteLayers {

    public static void main(String[] args) {

        //Create a PdfDocument object and load the sample PDF file
        PdfDocument pdf = new PdfDocument();
        pdf.loadFromFile("C:\\Users\\Administrator\\Desktop\\AddLayers.pdf");

        //Delete the specific layer by its name
        pdf.getLayers().removeLayer("watermark");

        //Save to file
        pdf.saveToFile("output/DeleteLayer.pdf");
        pdf.close();
    }
}
```

![deletelayers](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/sj03y65f9nto8ftbndkq.png)