Добавление водяных знаков в PDF на Java

Артефакты водяных знаков позволяют размещать постоянные визуальные метки на странице без их смешивания с основным содержимым документа.

Извлечение артефактов водяных знаков из PDF

Используйте этот пример, когда необходимо проверить существующие артефакты водяных знаков и прочитать их текст или позицию.

  1. Откройте исходный PDF в объекте Document.
  2. Переберите коллекцию артефактов целевой страницы.
  3. Отфильтруйте артефакты пагинации водяных знаков и выведите их текст и прямоугольники.
public static void extractWatermarkFromPdf(Path inputFile) {
    try (Document document = new Document(inputFile.toString())) {
        for (Artifact artifact : document.getPages().get_Item(1).getArtifacts()) {
            if (artifact.getType() == Artifact.ArtifactType.Pagination
                    && artifact.getSubtype() == Artifact.ArtifactSubtype.Watermark) {
                System.out.println(artifact.getText() + " " + artifact.getRectangle());
            }
        }
    }
}

Добавление артефакта водяного знака

Используйте этот пример, когда страница должна отображать центрированный текстовый водяной знак с пользовательским вращением, непрозрачностью и размещением фона.

  1. Откройте исходный PDF в объекте Документ.
  2. Создайте WatermarkArtifact и настройте его параметры состояния текста и размещения.
  3. Добавьте водяной знак на страницу и сохраните выходной файл.
public static void addWatermarkArtifact(Path inputFile, Path outputFile) {
    try (Document document = new Document(inputFile.toString())) {
        TextState textState = new TextState();
        textState.setFontSize(72);
        textState.setForegroundColor(Color.getBlueViolet());
        textState.setFontStyle(FontStyles.Bold);
        textState.setFont(FontRepository.findFont("Arial"));

        WatermarkArtifact watermark = new WatermarkArtifact();
        watermark.setTextAndState("WATERMARK", textState);
        watermark.setArtifactHorizontalAlignment(HorizontalAlignment.Center);
        watermark.setArtifactVerticalAlignment(VerticalAlignment.Center);
        watermark.setRotation(60);
        watermark.setOpacity(0.2);
        watermark.setBackground(true);

        document.getPages().get_Item(1).getArtifacts().add(watermark);
        document.save(outputFile.toString());
    }
}

Удаление артефактов водяных знаков

Используйте этот подход, когда существующие артефакты водяных знаков должны быть удалены со страницы.

  1. Откройте исходный PDF в объекте Документ.
  2. Переберите коллекцию артефактов страницы в обратном порядке.
  3. Удалите артефакты пагинации, чей подтип — водяной знак, затем сохраните документ.
public static void deleteWatermarkArtifact(Path inputFile, Path outputFile) {
    try (Document document = new Document(inputFile.toString())) {
        for (int i = document.getPages().get_Item(1).getArtifacts().size(); i >= 1; i--) {
            Artifact artifact = document.getPages().get_Item(1).getArtifacts().get_Item(i);
            if (artifact.getType() == Artifact.ArtifactType.Pagination
                    && artifact.getSubtype() == Artifact.ArtifactSubtype.Watermark) {
                document.getPages().get_Item(1).getArtifacts().delete(artifact);
            }
        }

        document.save(outputFile.toString());
    }
}