Anotações interativas usando Java

As anotações interativas nesta seção concentram‑se em fluxos de trabalho baseados em links e botões que respondem às ações do usuário dentro de um visualizador de PDF.

Use este exemplo quando precisar colocar um link clicável sobre o texto encontrado na página.

  1. Abra o PDF de origem em um objeto Document.
  2. Localize o fragmento de texto alvo e crie um LinkAnnotation sobre o seu retângulo.
  3. Atribua um GoToURIAction e salve o documento atualizado.
public static void linkAdd(Path inputFile, Path outputFile) {
    try (Document document = new Document(inputFile.toString())) {
        TextFragmentAbsorber textFragmentAbsorber = new TextFragmentAbsorber("file");
        document.getPages().get_Item(1).accept(textFragmentAbsorber);

        var phoneNumberFragment = textFragmentAbsorber.getTextFragments().get_Item(1);
        LinkAnnotation linkAnnotation = new LinkAnnotation(
                document.getPages().get_Item(1),
                phoneNumberFragment.getRectangle());
        linkAnnotation.setAction(new GoToURIAction("https://www.aspose.com"));

        document.getPages().get_Item(1).getAnnotations().add(linkAnnotation);
        document.save(outputFile.toString());
    }
}

Este exemplo varre a coleção de anotações da página e relata a localização de cada anotação de link.

  1. Abra o PDF de origem em um objeto Document.
  2. Itere sobre as anotações na página de destino.
  3. Filtre anotações por AnnotationType.Link e imprima seus retângulos.
public static void linkGet(Path inputFile) {
    try (Document document = new Document(inputFile.toString())) {
        for (Annotation annotation : document.getPages().get_Item(1).getAnnotations()) {
            if (annotation.getAnnotationType() == AnnotationType.Link) {
                System.out.println(annotation.getRect());
            }
        }
    }
}

Use esta abordagem quando as anotações de link existentes devem ser removidas da página.

  1. Abra o PDF de origem em um objeto Document.
  2. Colete anotações cujo tipo é AnnotationType.Link.
  3. Exclua as anotações coletadas e salve o arquivo de saída.
public static void linkDelete(Path inputFile, Path outputFile) {
    try (Document document = new Document(inputFile.toString())) {
        List<Annotation> toDelete = new ArrayList<>();
        for (Annotation annotation : document.getPages().get_Item(1).getAnnotations()) {
            if (annotation.getAnnotationType() == AnnotationType.Link) {
                toDelete.add(annotation);
            }
        }
        for (Annotation annotation : toDelete) {
            document.getPages().get_Item(1).getAnnotations().delete(annotation);
        }
        document.save(outputFile.toString());
    }
}

Adicionar uma anotação de linha

Este exemplo cria uma anotação de linha interativa com estilos de seta, configurações de borda e uma nota pop-up.

  1. Abra o PDF de origem em um objeto Document.
  2. Crie um LineAnnotation com pontos de início e fim.
  3. Configure sua aparência e a anotação popup, então salve o documento.
public static void lineAnnotationAdd(Path inputFile, Path outputFile) {
    try (Document document = new Document(inputFile.toString())) {
        LineAnnotation lineAnnotation = new LineAnnotation(
                document.getPages().get_Item(1),
                new Rectangle(550, 93, 562, 439, true),
                new Point(556, 99),
                new Point(556, 443));

        lineAnnotation.setTitle("John Smith");
        lineAnnotation.setColor(Color.getRed());
        lineAnnotation.setStartingStyle(LineEnding.OpenArrow);
        lineAnnotation.setEndingStyle(LineEnding.OpenArrow);

        Border border = new Border(lineAnnotation);
        border.setWidth(3);
        lineAnnotation.setBorder(border);

        PopupAnnotation popup = new PopupAnnotation(
                document.getPages().get_Item(1),
                new Rectangle(842, 124, 1021, 266, true));
        lineAnnotation.setPopup(popup);

        document.getPages().get_Item(1).getAnnotations().add(lineAnnotation);
        document.save(outputFile.toString());
    }
}

Adicionar botões de navegação

Use este exemplo quando o PDF deve incluir botões de página anterior e página seguinte para navegação interativa.

  1. Abra o PDF de origem em um objeto Document e certifique-se de que o documento tenha as páginas necessárias.
  2. Crie ButtonField controles com ações de navegação predefinidas.
  3. Adicione os botões à coleção de formulários e salve o documento atualizado.
public static void navigationButtonsAdd(Path inputFile, Path outputFile) {
    try (Document document = new Document(inputFile.toString())) {
        document.getPages().add();

        record ButtonConfig(String name, double xPos, PredefinedAction action) {}
        List<ButtonConfig> buttonConfigs = List.of(
                new ButtonConfig("Previous Page", 120.0, PredefinedAction.PrevPage),
                new ButtonConfig("Next Page", 230.0, PredefinedAction.NextPage));

        for (Page page : document.getPages()) {
            for (ButtonConfig config : buttonConfigs) {
                Rectangle rect = new Rectangle(config.xPos(), 10.0, config.xPos() + 100, 40.0, true);
                ButtonField button = new ButtonField(page, rect);
                button.setPartialName(config.name());
                button.setValue(config.name());
                button.getCharacteristics().setBorder(Color.getRed());
                button.getCharacteristics().setBackground(Color.getOrange().toRgb());
                button.getAnnotationActions().setOnReleaseMouseBtn(new NamedAction(config.action()));
                document.getForm().add(button);
            }
        }
        document.save(outputFile.toString());
    }
}

Adicionar um botão de impressão

Este exemplo cria um botão que aciona o comando de impressão quando o usuário clica nele.

  1. Crie um novo documento PDF Document e adicione uma página.
  2. Crie um ButtonField e atribua a ação de impressão predefinida.
  3. Configure a borda e o fundo do botão, adicione‑o ao formulário e salve o documento.
public static void printButtonAdd(Path outputFile) {
    try (Document document = new Document()) {
        Page page = document.getPages().add();

        Rectangle rect = new Rectangle(72, 748, 164, 768, true);
        ButtonField printButton = new ButtonField(page, rect);
        printButton.setAlternateName("Print current document");
        printButton.setColor(Color.getBlack());
        printButton.setPartialName("printBtn1");
        printButton.setValue("Print Document");
        printButton.getAnnotationActions().setOnReleaseMouseBtn(
                new NamedAction(PredefinedAction.File_Print));

        Border border = new Border(printButton);
        border.setStyle(BorderStyle.Solid);
        border.setWidth(2);
        printButton.setBorder(border);

        printButton.getCharacteristics().setBorder(Color.getBlue());
        printButton.getCharacteristics().setBackground(Color.getLightBlue().toRgb());

        document.getForm().add(printButton);
        document.save(outputFile.toString());
    }
}