Atualizar Links em PDF

Conforme discutido em Adicionar Hiperlink em um Arquivo PDF, a classe LinkAnnotation possibilita adicionar links em um arquivo PDF. Também existe uma classe similar usada para obter links existentes dentro de arquivos PDF. Use isso se você precisar atualizar um link existente. Para atualizar um link existente:

  1. Carregue um arquivo PDF.

  2. Vá para uma página específica no arquivo PDF.

  3. Especifique o destino do link usando a propriedade Destination do objeto GoToAction.

  4. A página de destino é especificada usando o construtor XYZExplicitDestination.

O trecho de código a seguir mostra como atualizar um link em um arquivo PDF e definir seu destino para a segunda página do documento.

    public static void SetLinkTargetToAPageInTheSameDocument() {
        
        // Carregar o arquivo PDF
        Document document = new Document(_dataDir + "UpdateLinks.pdf");
        Page page = document.getPages().get_Item(1);
        // Obter a primeira anotação de link da primeira página do documento
        LinkAnnotation linkAnnot = (LinkAnnotation)page.getAnnotations().get_Item(1);

        // Modificação do link: alterar destino do link
        GoToAction goToAction = (GoToAction)linkAnnot.getAction();
        // Especificar o destino para objeto de link
        // Representa destino explícito que exibe a página com as coordenadas (esquerda, topo) posicionadas no canto superior esquerdo da
        // janela e o conteúdo da página ampliado pelo fator de zoom.
        // O 1º parâmetro é o número da página de destino.
        // O 2º é a coordenada esquerda
        // O 3º é a coordenada superior
        // O 4º argumento é o fator de zoom ao exibir a respectiva página. Usar 2 significa que a página será exibida com zoom de 200%
        goToAction.setDestination(new XYZExplicitDestination(1, 1, 2, 2 ));
        
        // Salvar o documento com o link atualizado
        document.save(_dataDir + "PDFLINK_Modified_UpdateLinks_out.pdf");        
    }

Para atualizar o hiperlink para que ele aponte para um endereço web, instancie o objeto GoToURIAction e passe-o para a propriedade Action do LinkAnnotation. O trecho de código a seguir mostra como atualizar um link em um arquivo PDF e definir seu alvo para um endereço web.

    public static void SetLinkDestinationToWebAddress() {        
        // Carregar o arquivo PDF
        Document document = new Document(_dataDir + "UpdateLinks.pdf");
        Page page = document.getPages().get_Item(1);
    
        // Obter a primeira anotação de link da primeira página do documento
        LinkAnnotation linkAnnot = (LinkAnnotation)page.getAnnotations().get_Item(1);

        // Modificação do link: alterar ação do link e definir alvo como endereço web
        linkAnnot.setAction(new GoToURIAction("www.aspose.com"));
        
        // Salvar o documento com o link atualizado
        document.save(_dataDir + "PDFLINK_Modified_UpdateLinks_out.pdf");        
    }

O trecho de código a seguir mostra como atualizar um link em um arquivo PDF e definir seu alvo para outro arquivo PDF.

    public static void SetLinkTargetToAnotherPDFFile() {        
        // Carregar o arquivo PDF
        Document document = new Document(_dataDir + "UpdateLinks.pdf");
        Page page = document.getPages().get_Item(1);
    
        LinkAnnotation linkAnnot = (LinkAnnotation)page.getAnnotations().get_Item(1);

        GoToRemoteAction goToR = (GoToRemoteAction)linkAnnot.getAction();
        // A próxima linha atualiza o destino, não atualiza o arquivo
        goToR.setDestination(new XYZExplicitDestination(2, 0, 0, 1.5));
        // A próxima linha atualiza o arquivo
        goToR.setFile (new FileSpecification(_dataDir +  "input.pdf"));

        // Salvar o documento com o link atualizado
        document.save(_dataDir + "PDFLINK_Modified_UpdateLinks_out.pdf");        
    }

Atualizar a Cor do Texto da LinkAnnotation

A anotação de link não contém texto. Em vez disso, o texto é colocado no conteúdo da página sob a anotação. Portanto, para alterar a cor do texto, substitua a cor do texto da página em vez de tentar alterar a cor da anotação. O trecho de código a seguir mostra como atualizar a cor da anotação de link em um arquivo PDF.

    public static void UpdateLinkAnnotationTextColor () {        
        // Carregar o arquivo PDF
        Document document = new Document(_dataDir + "UpdateLinks.pdf");
        Page page = document.getPages().get_Item(1);
           
        for (Annotation annotation : page.getAnnotations())
        {
            if (annotation.getAnnotationType() == AnnotationType.Link)
            {
                // Pesquisar o texto sob a anotação
                TextFragmentAbsorber ta = new TextFragmentAbsorber();
                Rectangle rect = annotation.getRect();
                rect.setLLX(rect.getLLX()-10);
                rect.setLLY(rect.getLLY()-10);
                rect.setURX(rect.getURX()+ 10);
                rect.setURY(rect.getURY()+ 10);

                ta.setTextSearchOptions(new TextSearchOptions(rect));
                ta.visit(page);
                // Alterar a cor do texto.
                for (TextFragment tf : ta.getTextFragments())
                {
                    tf.getTextState().setForegroundColor(Color.getRed());
                }
            }
        
        }                       
        // Salvar o documento com link atualizado
        document.save(_dataDir + "UpdateLinkTextColor_out.pdf");        
    }