Работа с действиями в PDF

Следующий фрагмент кода также работает с библиотекой Aspose.PDF.Drawing.

Добавление гиперссылки в файл PDF

Возможно добавить гиперссылки в файлы PDF, чтобы читатели могли переходить к другой части PDF или к внешнему контенту.

Для добавления веб-гиперссылок в документы PDF:

  1. Создайте объект класса Document.
  2. Получите класс Page, на который вы хотите добавить ссылку.
  3. Создайте объект LinkAnnotation, используя объекты Page и Rectangle. Объект прямоугольника используется для указания местоположения на странице, где должна быть добавлена ссылка.
  4. Установите свойство Action на объект GoToURIAction, который указывает местоположение удаленного URI.
  5. Добавить свободный текст:
  • Создайте объект FreeTextAnnotation. Он также принимает объекты Page и Rectangle в качестве аргументов, так что можно указать те же значения, что и для конструктора LinkAnnotation.
  • Используя свойство Contents объекта FreeTextAnnotation, укажите строку, которая должна отображаться в выходном PDF.
  • При желании установите ширину границы объектов LinkAnnotation и FreeTextAnnotation равной 0, чтобы они не отображались в документе PDF.
  • После того как объекты LinkAnnotation и FreeTextAnnotation будут определены, добавьте эти ссылки в коллекцию Annotations объекта Page.
  • После того как объекты LinkAnnotation и FreeTextAnnotation были определены, добавьте эти ссылки в коллекцию аннотаций объекта Page.
  • Наконец, сохраните обновленный PDF с помощью метода Save объекта Document.

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

// Для полных примеров и файлов данных, пожалуйста, перейдите на https://github.com/aspose-pdf/Aspose.PDF-for-.NET
// Путь к директории документов.
string dataDir = RunExamples.GetDataDir_AsposePdf_LinksActions();

// Открыть документ
Document document = new Document(dataDir + "AddHyperlink.pdf");
// Создать ссылку
Page page = document.Pages[1];
// Создать объект аннотации ссылки
LinkAnnotation link = new LinkAnnotation(page, new Aspose.Pdf.Rectangle(100, 100, 300, 300));
// Создать объект границы для LinkAnnotation
Border border = new Border(link);
// Установить значение ширины границы как 0
border.Width = 0;
// Установить границу для LinkAnnotation
link.Border = border;
// Указать тип ссылки как удаленный URI
link.Action = new GoToURIAction("www.aspose.com");
// Добавить аннотацию ссылки в коллекцию аннотаций первой страницы файла PDF
page.Annotations.Add(link);

// Создать аннотацию свободного текста
FreeTextAnnotation textAnnotation = new FreeTextAnnotation(document.Pages[1], new Aspose.Pdf.Rectangle(100, 100, 300, 300), new DefaultAppearance(Aspose.Pdf.Text.FontRepository.FindFont("TimesNewRoman"), 10, System.Drawing.Color.Blue));
// Текст для добавления как свободный текст
textAnnotation.Contents = "Ссылка на сайт Aspose";
// Установить границу для аннотации свободного текста
textAnnotation.Border = border;
// Добавить аннотацию свободного текста в коллекцию аннотаций первой страницы документа
document.Pages[1].Annotations.Add(textAnnotation);
dataDir = dataDir + "AddHyperlink_out.pdf";
// Сохранить обновленный документ
document.Save(dataDir);

Создание гиперссылки на страницы в том же PDF

Aspose.PDF для .NET предоставляет отличные возможности для создания PDF, а также его манипуляции. Также предоставляется возможность добавления ссылок на страницы PDF, и ссылка может вести на страницы в другом файле PDF, веб-URL, запускать приложение или даже ссылаться на страницы в том же файле PDF. Для добавления локальных гиперссылок (ссылок на страницы в том же файле PDF) в пространство имен Aspose.PDF добавлен класс LocalHyperlink, который имеет свойство с именем TargetPageNumber, используемое для указания целевой/назначаемой страницы для гиперссылки.

Для добавления локальной гиперссылки необходимо создать TextFragment, чтобы ссылка могла быть связана с TextFragment. Класс TextFragment имеет свойство с именем Hyperlink, которое используется для ассоциации экземпляра LocalHyperlink. Следующий фрагмент кода показывает шаги для выполнения этой задачи.

```csharp
// Для полных примеров и файлов данных, пожалуйста, перейдите по ссылке https://github.com/aspose-pdf/Aspose.PDF-for-.NET
// Путь к каталогу документов.
string dataDir = RunExamples.GetDataDir_AsposePdf_LinksActions();

// Создать экземпляр документа
Document doc = new Document();
// Добавить страницу в коллекцию страниц PDF файла
Page page = doc.Pages.Add();
// Создать экземпляр текстового фрагмента
Aspose.Pdf.Text.TextFragment text = new Aspose.Pdf.Text.TextFragment("тест ссылки на страницу номер 7");
// Создать экземпляр локальной гиперссылки
Aspose.Pdf.LocalHyperlink link = new Aspose.Pdf.LocalHyperlink();
// Установить целевую страницу для экземпляра ссылки
link.TargetPageNumber = 7;
// Установить гиперссылку текстового фрагмента
text.Hyperlink = link;
// Добавить текст в коллекцию абзацев страницы
page.Paragraphs.Add(text);
// Создать новый экземпляр текстового фрагмента
text = new TextFragment("тест ссылки на страницу номер 1");
// Текстовый фрагмент должен быть добавлен на новую страницу
text.IsInNewPage = true;
// Создать другой экземпляр локальной гиперссылки
link = new LocalHyperlink();
// Установить целевую страницу для второй гиперссылки
link.TargetPageNumber = 1;
// Установить ссылку для второго текстового фрагмента
text.Hyperlink = link;
// Добавить текст в коллекцию абзацев объекта страницы
page.Paragraphs.Add(text);

dataDir = dataDir + "CreateLocalHyperlink_out.pdf";
// Сохранить обновленный документ
doc.Save(dataDir);

Получение URL-адреса гиперссылки в PDF

Ссылки представлены в виде аннотаций в PDF-файле, их можно добавлять, обновлять или удалять. Aspose.PDF для .NET также поддерживает получение адреса (URL) гиперссылки в PDF-файле.

Для получения URL-адреса ссылки:

  1. Создайте объект Document.
  2. Получите Page, с которой вы хотите извлечь ссылки.
  3. Используйте класс AnnotationSelector для извлечения всех объектов LinkAnnotation с указанной страницы.
  4. Передайте объект AnnotationSelector методу Accept объекта Page.
  5. Наконец, извлеките действие LinkAnnotation как GoToURIAction.

Следующий фрагмент кода показывает, как получить адреса гиперссылок (URL) из файла PDF.

// Для полных примеров и файлов данных, пожалуйста, перейдите на https://github.com/aspose-pdf/Aspose.PDF-for-.NET
// Путь к директории с документами.
string dataDir = RunExamples.GetDataDir_AsposePdf_LinksActions();
// Загрузка файла PDF
Document document = new Document(dataDir + "input.pdf");

// Проходим через все страницы PDF
foreach (Aspose.Pdf.Page page in document.Pages)
{
    // Получаем аннотации ссылок с конкретной страницы
    AnnotationSelector selector = new AnnotationSelector(new Aspose.Pdf.Annotations.LinkAnnotation(page, Aspose.Pdf.Rectangle.Trivial));

    page.Accept(selector);
    // Создаем список, содержащий все ссылки
    IList<Annotation> list = selector.Selected;
    // Итерируем через каждый элемент в списке
    foreach (LinkAnnotation a in list)
    {
        // Выводим URL назначения
        Console.WriteLine("\nDestination: " + (a.Action as Aspose.Pdf.Annotations.GoToURIAction).URI + "\n");
    }
}

Получение текста гиперссылки

Гиперссылка состоит из двух частей: текст, который отображается в документе, и URL-адрес назначения. В некоторых случаях нам нужен именно текст, а не URL.

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

Чтобы найти содержимое URL, вам нужно работать как с аннотацией, так и с текстом. Объект Annotation сам по себе не содержит текст, но располагается под текстом на странице. Так что для получения текста Annotation указывает границы URL, в то время как объект Text дает содержимое URL. Пожалуйста, смотрите следующий фрагмент кода.

  {
        public static void Run()
        {
            try
            {
                // ExStart:GetHyperlinkText
                // Путь к директории документов.
                string dataDir = RunExamples.GetDataDir_AsposePdf_LinksActions();
                // Загрузить PDF-файл
                Document document = new Document(dataDir + "input.pdf");
                // Перебор каждой страницы PDF
                foreach (Page page in document.Pages)
                {
                    // Показать аннотацию ссылки
                    ShowLinkAnnotations(page);
                }
                // ExEnd:GetHyperlinkText
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }
        // ExStart:ShowLinkAnnotations
        public static void ShowLinkAnnotations(Page page)
        {
            foreach (Aspose.Pdf.Annotations.Annotation annot in page.Annotations)
            {
                if (annot is LinkAnnotation)
                {
                    // Вывести URL каждой аннотации ссылки
                    Console.WriteLine("URI: " + ((annot as LinkAnnotation).Action as GoToURIAction).URI);
                    TextAbsorber absorber = new TextAbsorber();
                    absorber.TextSearchOptions.LimitToPageBounds = true;
                    absorber.TextSearchOptions.Rectangle = annot.Rect;
                    page.Accept(absorber);
                    string extractedText = absorber.Text;
                    // Вывести текст, связанный с гиперссылкой
                    Console.WriteLine(extractedText);
                }

            }
        }
        // ExEnd:ShowLinkAnnotations
    }
}

Удаление действия открытия документа из файла PDF

Как указать страницу PDF при просмотре документа объяснило, как настроить документ для открытия на другой странице, а не на первой. При объединении нескольких документов, если у одного или нескольких из них установлено действие GoTo, возможно, вы захотите их удалить. Например, если объединить два документа и второй имеет действие GoTo, которое переводит на вторую страницу, итоговый документ будет открываться на второй странице второго документа, а не на первой странице объединенного документа. Чтобы избежать этого поведения, удалите команду действия открытия.

Для удаления действия открытия:

  1. Установите свойство OpenAction объекта Document в значение null.
  2. Сохраните обновленный PDF с помощью метода Save объекта Document.

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

// Для полных примеров и файлов данных, пожалуйста, перейдите на https://github.com/aspose-pdf/Aspose.PDF-for-.NET
// Путь к каталогу документов.
string dataDir = RunExamples.GetDataDir_AsposePdf_LinksActions();
// Открыть документ
Document document = new Document(dataDir + "RemoveOpenAction.pdf");
// Удалить действие открытия документа
document.OpenAction = null;
dataDir = dataDir + "RemoveOpenAction_out.pdf";
// Сохранить обновленный документ
document.Save(dataDir);

Как указать страницу PDF при просмотре документа

При просмотре файлов PDF в таких PDF-просмотрщиках, как Adobe Reader, файлы обычно открываются на первой странице. Однако можно настроить файл так, чтобы он открывался на другой странице.

Класс XYZExplicitDestination позволяет указать страницу в файле PDF, которую вы хотите открыть. Класс XYZExplicitDestination позволяет указать страницу в файле PDF, которую вы хотите открыть.

// Для полных примеров и файлов данных, пожалуйста, перейдите по ссылке https://github.com/aspose-pdf/Aspose.PDF-for-.NET
// Путь к директории с документами.
string dataDir = RunExamples.GetDataDir_AsposePdf_LinksActions();

// Загрузить файл PDF
Document doc = new Document(dataDir + "SpecifyPageWhenViewing.pdf");
// Получить экземпляр второй страницы документа
Page page2 = doc.Pages[2];
// Создать переменную для установки коэффициента масштабирования целевой страницы
double zoom = 1;
// Создать экземпляр GoToAction
GoToAction action = new GoToAction(doc.Pages[2]);
// Перейти на 2 страницу
action.Destination = new XYZExplicitDestination(page2, 0, page2.Rect.Height, zoom);
// Установить действие открытия документа
doc.OpenAction = action;
// Сохранить обновленный документ
doc.Save(dataDir + "goto2page_out.pdf");