DEV Community

Alexis
Alexis

Posted on

Java - Add, Hide, or Delete Layers in PDF

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.

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:

<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> 
Enter fullscreen mode Exit fullscreen mode

If you are not using maven, then you can find the required jar files from the zip file available in this location. 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.
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); } } } 
Enter fullscreen mode Exit fullscreen mode

addlayers

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.
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(); } } 
Enter fullscreen mode Exit fullscreen mode

hidelayers

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.
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(); } } 
Enter fullscreen mode Exit fullscreen mode

deletelayers

Top comments (0)