Обновление ссылок в PDF

Обновление ссылок в PDF файле

Как обсуждалось в разделе Добавление гиперссылки в PDF файл, класс LinkAnnotation позволяет добавлять ссылки в PDF файл. Существует также аналогичный класс, используемый для получения существующих ссылок из PDF файлов. Используйте его, если вам нужно обновить существующую ссылку. Чтобы обновить существующую ссылку:

  1. Загрузите PDF файл.

  2. Перейдите на конкретную страницу в PDF файле.

  3. Укажите назначение ссылки с помощью свойства Destination объекта GoToAction.

  4. Целевая страница указывается с помощью конструктора XYZExplicitDestination.

Установка цели ссылки на страницу в том же документе

Следующий фрагмент кода показывает, как обновить ссылку в PDF-файле и установить ее цель на вторую страницу документа.

    public static void SetLinkTargetToAPageInTheSameDocument() {
        
        // Загрузить PDF-файл
        Document document = new Document(_dataDir + "UpdateLinks.pdf");
        Page page = document.getPages().get_Item(1);
        // Получить первую аннотацию ссылки с первой страницы документа
        LinkAnnotation linkAnnot = (LinkAnnotation)page.getAnnotations().get_Item(1);

        // Изменение ссылки: изменить назначение ссылки
        GoToAction goToAction = (GoToAction)linkAnnot.getAction();
        // Укажите место назначения для объекта ссылки
        // Представляет явное назначение, которое отображает страницу с координатами (left, top), расположенными в верхнем левом углу 
        // окна, и содержимое страницы увеличено в соответствии с коэффициентом увеличения.
        // Первый параметр - номер целевой страницы.
        // Второй - левая координата
        // Третий - верхняя координата
        // Четвертый аргумент - коэффициент увеличения при отображении соответствующей страницы. Использование 2 означает, что страница будет отображаться в 200% увеличении
        goToAction.setDestination(new XYZExplicitDestination(1, 1, 2, 2 ));
        
        // Сохраните документ с обновленной ссылкой
        document.save(_dataDir + "PDFLINK_Modified_UpdateLinks_out.pdf");        
    }

Установить пункт назначения ссылки на веб-адрес

Чтобы обновить гиперссылку так, чтобы она указывала на веб-адрес, создайте объект GoToURIAction и передайте его в свойство Action объекта LinkAnnotation. Следующий фрагмент кода показывает, как обновить ссылку в PDF-файле и установить ее цель как веб-адрес.

    public static void SetLinkDestinationToWebAddress() {        
        // Загрузить PDF-файл
        Document document = new Document(_dataDir + "UpdateLinks.pdf");
        Page page = document.getPages().get_Item(1);
    
        // Получить первую аннотацию ссылки с первой страницы документа
        LinkAnnotation linkAnnot = (LinkAnnotation)page.getAnnotations().get_Item(1);

        // Изменение ссылки: изменение действия ссылки и установка цели как веб-адрес
        linkAnnot.setAction(new GoToURIAction("www.aspose.com"));
        
        // Сохранить документ с обновленной ссылкой
        document.save(_dataDir + "PDFLINK_Modified_UpdateLinks_out.pdf");        
    }

Установить цель ссылки на другой PDF файл

Следующий фрагмент кода показывает, как обновить ссылку в PDF файле и установить её цель на другой PDF файл.

    public static void SetLinkTargetToAnotherPDFFile() {        
        // Загрузить 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();
        // Следующая строка обновляет пункт назначения, не обновляя файл
        goToR.setDestination(new XYZExplicitDestination(2, 0, 0, 1.5));
        // Следующая строка обновляет файл
        goToR.setFile (new FileSpecification(_dataDir +  "input.pdf"));

        // Сохранить документ с обновленной ссылкой
        document.save(_dataDir + "PDFLINK_Modified_UpdateLinks_out.pdf");        
    }

Обновить цвет текста LinkAnnotation

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

    public static void UpdateLinkAnnotationTextColor () {        
        // Загрузите 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)
            {
                // Найдите текст под аннотацией
                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);
                // Измените цвет текста.
                for (TextFragment tf : ta.getTextFragments())
                {
                    tf.getTextState().setForegroundColor(Color.getRed());
                }
            }
        
        }                       
        // Сохраните документ с обновленной ссылкой
        document.save(_dataDir + "UpdateLinkTextColor_out.pdf");        
    }