Gerenciar cabeçalhos e rodapés de PDF usando Java

Os artefatos de cabeçalho e rodapé são elementos de paginação não‑conteúdo normalmente usados para rótulos repetidos, identificadores de página e enquadramento de layout.

Criar um artefato de cabeçalho

Use este auxiliar quando precisar de um artefato de cabeçalho reutilizável com estilo de texto e alinhamento consistentes.

  1. Crie um HeaderArtifact.
  2. Defina seu texto, configurações de fonte e cor de primeiro plano.
  3. Configure o alinhamento horizontal e retorne o artefato.
public static HeaderArtifact createHeaderArtifact(String text) {
    HeaderArtifact artifact = new HeaderArtifact();
    artifact.setText(text);
    artifact.getTextState().setFontSize(14);
    artifact.getTextState().setFont(FontRepository.findFont("Arial"));
    artifact.getTextState().setForegroundColor(Color.getNavy());
    artifact.setArtifactHorizontalAlignment(HorizontalAlignment.Center);
    return artifact;
}

Criar um artefato de rodapé

Este helper cria um artefato de rodapé reutilizável com o mesmo padrão de estilo do artefato de cabeçalho.

  1. Crie um FooterArtifact.
  2. Defina seu texto, estado do texto e cor de primeiro plano.
  3. Configure o alinhamento e retorne o artefato.
public static FooterArtifact createFooterArtifact(String text) {
    FooterArtifact artifact = new FooterArtifact();
    artifact.setText(text);
    artifact.getTextState().setFontSize(14);
    artifact.getTextState().setFont(FontRepository.findFont("Arial"));
    artifact.getTextState().setForegroundColor(Color.getNavy());
    artifact.setArtifactHorizontalAlignment(HorizontalAlignment.Center);
    return artifact;
}

Adicionar um artefato de cabeçalho

Use este exemplo quando uma página deve exibir um artefato de cabeçalho reutilizável.

  1. Abra o PDF de origem em um objeto Document.
  2. Crie o artefato de cabeçalho usando o método auxiliar.
  3. Adicione o artefato à página e salve o arquivo de saída.
public static void addHeaderArtifact(Path inputFile, Path outputFile) {
    try (Document document = new Document(inputFile.toString())) {
        HeaderArtifact header = createHeaderArtifact("Sample Header");
        document.getPages().get_Item(1).getArtifacts().add(header);
        document.save(outputFile.toString());
    }
}

Adicionar um artefato de rodapé

Use este exemplo quando a página precisar exibir um artefato de rodapé com formatação reutilizável.

  1. Abra o PDF de origem em um objeto Document.
  2. Crie o artefato de rodapé através do método auxiliar.
  3. Adicione o artefato à página e salve o arquivo de saída.
public static void addFooterArtifact(Path inputFile, Path outputFile) {
    try (Document document = new Document(inputFile.toString())) {
        FooterArtifact footer = createFooterArtifact("Sample Footer");
        document.getPages().get_Item(1).getArtifacts().add(footer);
        document.save(outputFile.toString());
    }
}

Excluir artefatos de cabeçalho e rodapé

Use esta abordagem quando os artefatos de cabeçalho e rodapé 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 inversa.
  3. Exclua artefatos de paginação cujo subtipo é cabeçalho ou rodapé, então salve o documento.
public static void deleteHeaderFooterArtifact(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.Header
                    || artifact.getSubtype() == Artifact.ArtifactSubtype.Footer)) {
                document.getPages().get_Item(1).getArtifacts().delete(artifact);
            }
        }

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