Adicionar marcas d'água ao PDF em Java

Os artefatos de marca d’água permitem que você coloque marcas visuais persistentes em uma página sem misturá-las ao conteúdo principal do documento.

Extrair artefatos de marca d’água de um PDF

Use este exemplo quando precisar inspecionar artefatos de marca d’água existentes e ler seu texto ou posição.

  1. Abra o PDF de origem em um objeto Document.
  2. Itere sobre a coleção de artefatos da página de destino.
  3. Filtre artefatos de paginação de marca d’água e imprima seu texto e retângulos.
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());
            }
        }
    }
}

Adicionar um artefato de marca d’água

Use este exemplo quando a página deve exibir uma marca d’água de texto centralizada com rotação personalizada, opacidade e posicionamento de fundo.

  1. Abra o PDF de origem em um objeto Document.
  2. Crie um WatermarkArtifact e configure seu estado de texto e configurações de posicionamento.
  3. Adicione a marca d’água à página e salve o arquivo de saída.
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());
    }
}

Excluir artefatos de marca d’água

Use esta abordagem quando os artefatos de marca d’água existentes devem ser removidos da página.

  1. Abra o PDF de origem em um objeto Document.
  2. Itere pela coleção de artefatos da página em ordem reversa.
  3. Exclua artefatos de paginação cujo subtipo é marca d’água, então salve o documento.
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());
    }
}