Kак добавить слои в PDF в Java
Слои PDF позволяют размещать содержимое документов как над, так и под другим содержимым документа. Возможность работы со слоями упрощает такие задачи, как отображение или скрытие аннотаций, изображений, водяных знаков и других визуальных компонентов, что позволяет повысить гибкость и улучшить качество работы пользователей. В этой статье я расскажу о том, как добавлять слои в PDF-документ на языке Java с помощью бесплатной Free Spire.PDF for Java.
Установка Spire.Pdf.jar
Если вы создали Maven-проект, вы можете легко импортировать jar в свое приложение, используя следующие конфигурации. Для проектов, не использующих Maven, загрузите jar-файл по этой ссылке и добавьте его в качестве зависимости в свое приложение.

Добавление слоев в PDF на Java
Слой может быть добавлен в PDF-документ с помощью метода Document.getLayers().addLayer(). После создания слоя в него можно добавить текст, изображения, динамические поля или другие элементы для формирования его внешнего вида. Данный пример кода демонстрирует, как добавить заголовок и водяной знак в качестве слоев в PDF-файл с помощью Free Spire.PDF for Java. Ниже приведено пояснение к коду:
- Для представления PDF-документа создается экземпляр PdfDocument.
- Метод loadFromFile() вызывается для загрузки существующего PDF-файла по указанному пути.
- Для добавления различных слоев в PDF-документ вызываются два метода: addLayerWatermark() и addLayerHeader().
- Модифицированный PDF-документ сохраняется в новый файл с помощью метода saveToFile().
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\input.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.BOLD,48),true);
//Specify watermark text
String watermarkText = «DO NOT COPY»;
//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.getGreen(), 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 = 40;
float y = 20;
//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\banner.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);
}
}
}
