Использование аннотаций ссылок в PDF
Добавление аннотации ссылки в существующий PDF файл
Следующий фрагмент кода также работает с библиотекой Aspose.PDF.Drawing.
Аннотация Link Annotation представляет собой гиперссылку, место назначения в другом месте и документ. Согласно стандарту PDF, аннотация ссылки может использоваться в трех случаях: открытие представления страницы, открытие файла и открытие веб-страницы.
Использование аннотации ссылки для открытия представления страницы
Для создания аннотации было выполнено несколько дополнительных шагов. Мы использовали 2 TextFragmentAbsorber для поиска фрагментов для демонстрации. Первый предназначен для текста аннотации ссылки, а второй указывает на некоторые места в документе.
Document document = new Document(System.IO.Path.Combine(_dataDir, "Link Annotation Demo.pdf"));
var page = document.Pages[1];
var regEx = new Regex(@"Link Annotation Demo \d");
TextFragmentAbsorber textFragmentAbsorber1 = new TextFragmentAbsorber(regEx);
textFragmentAbsorber1.Visit(document);
regEx = new Regex(@"Sample text \d");
TextFragmentAbsorber textFragmentAbsorber2 = new TextFragmentAbsorber(regEx);
textFragmentAbsorber2.Visit(document);
var linkFragments = textFragmentAbsorber1.TextFragments;
var sampleTextFragments = textFragmentAbsorber2.TextFragments;
var linkAnnotation1 = new LinkAnnotation(page, linkFragments[1].Rectangle)
{
Action = new GoToAction(
new XYZExplicitDestination(
sampleTextFragments[1].Page,
sampleTextFragments[1].Rectangle.LLX,
sampleTextFragments[1].Rectangle.URX, 1.5))
};
page.Annotations.Add(linkAnnotation1);
document.Save("test.pdf");
Для создания аннотации мы следовали определённым шагам:
- Создать
LinkAnnotation
и передать объект страницы и прямоугольник текстового фрагмента, который соответствует аннотации. - Установить
Action
какGoToAction
и передатьXYZExplicitDestination
в качестве желаемого назначения. Мы создалиXYZExplicitDestination
на основе страницы, левых и верхних координат и масштаба. - Добавить аннотацию в коллекцию аннотаций страницы.
- Сохранить документ
Использование ссылочной аннотации с именованным назначением
При обработке различных документов возникает ситуация, когда вы печатаете и не знаете, куда будет указывать аннотация. В этом случае вы можете использовать специальное (именованное) назначение, и код будет выглядеть так:
var destinationName = "Link2";
var linkAnnotation2 = new LinkAnnotation(page, linkFragments[2].Rectangle)
{
Action = new GoToAction(document, destinationName)
};
В другом месте вы можете создать Именованное Назначение.
document.NamedDestinations.Add(destinationName,
new XYZExplicitDestination(
sampleTextFragments[2].Page,
sampleTextFragments[2].Rectangle.LLX,
sampleTextFragments[2].Rectangle.URX, 1));
Использование аннотации ссылки для открытия файла
Тот же подход используется при создании аннотации для открытия файла, как и в приведенных выше примерах.
var linkAnnotation3 = new LinkAnnotation(page, linkFragments[3].Rectangle)
{
Action = new GoToRemoteAction("another.pdf", 2)
};
Разница заключается в том, что мы будем использовать GoToRemoteAction
вместо GoToAction
. Конструктор GoToRemoteAction принимает два параметра: имя файла и номер страницы.
Вы также можете использовать другую форму и передать имя файла и некоторое назначение. Очевидно, что такое назначение нужно создать до его использования.
Использование аннотации ссылки для открытия веб-страницы
Чтобы открыть веб-страницу, просто установите Action
с объектом GoToURIAction
.
Вы можете передать гиперссылку в качестве параметра конструктора или любой другой тип URI. Например, вы можете использовать callto
для реализации действия с вызовом номера телефона.
var linkAnnotation4 = new LinkAnnotation(page, linkFragments[4].Rectangle)
{
Action = new GoToURIAction("https://products.aspose.com/pdf/net"),
// Создать аннотацию ссылки и установить действие для вызова номера телефона
//Action = new GoToURIAction("callto:678-555-0103")
Color = Color.Blue
};
Добавление декорированной ссылочной аннотации
Вы можете настроить ссылочную аннотацию с помощью границ. В примере ниже мы создадим синюю пунктирную границу шириной 3pt.
var linkAnnotation4 = new LinkAnnotation(page, linkFragments[4].Rectangle)
{
Action = new GoToURIAction("https://products.aspose.com/pdf/net"),
Color = Color.Blue
};
linkAnnotation4.Border = new Border(linkAnnotation4)
{
Style = BorderStyle.Dashed,
Dash = new Dash(5, 5),
Width = 3
};
Еще один пример показывает, как симулировать стиль браузера и использовать подчеркивание для ссылок.
var linkAnnotation5 = new LinkAnnotation(page, linkFragments[5].Rectangle)
{
Color = Color.Blue
};
linkAnnotation5.Border = new Border(linkAnnotation5)
{
Style = BorderStyle.Underline,
Width = 3
};
Получение ссылочных аннотаций
Пожалуйста, попробуйте использовать следующий фрагмент кода для получения LinkAnnotation из PDF документа.
class ExampleLinkAnnotations
{
// Путь к директории документов.
private const string _dataDir = RunExamples.GetDataDir_AsposePdf_Annotations();
public static void GetLinkAnnotations()
{
// Загрузите PDF файл
Document document = new Document(System.IO.Path.Combine(_dataDir, "SimpleResume_mod.pdf"));
var linkAnnotations = document.Pages[1].Annotations.Where(a => a.AnnotationType == AnnotationType.Link);
foreach (Aspose.Pdf.Annotations.Annotation annot in linkAnnotations)
{
// Вывод URL каждой ссылочной аннотации
Console.WriteLine("URI: " + ((annot as LinkAnnotation).Action as GoToURIAction).URI);
TextAbsorber absorber = new TextAbsorber();
absorber.TextSearchOptions.LimitToPageBounds = true;
absorber.TextSearchOptions.Rectangle = annot.Rect;
document.Pages[1].Accept(absorber);
string extractedText = absorber.Text;
// Вывод текста, связанного с гиперссылкой
Console.WriteLine(extractedText);
}
}
}
Удаление аннотаций ссылок
Следующий фрагмент кода показывает, как удалить аннотацию ссылки из файла PDF. Для этого нам нужно найти и удалить все аннотации ссылок на 1-й странице. После этого мы сохраняем документ с удаленной аннотацией.
class ExampleLinkAnnotations
{
// Путь к директории с документами.
private const string _dataDir = RunExamples.GetDataDir_AsposePdf_Annotations();
public static void DeleteLinkAnnotations()
{
// Загрузить PDF файл
Document document = new Document(System.IO.Path.Combine(_dataDir, "SimpleResume_mod.pdf"));
// Найти и удалить все аннотации ссылок на 1-й странице
var linkAnnotations = document.Pages[1].Annotations.Where(a => a.AnnotationType == AnnotationType.Link);
foreach (var la in linkAnnotations)
document.Pages[1].Annotations.Delete(la);
// Сохранить документ с удаленной аннотацией
document.Save(System.IO.Path.Combine(_dataDir, "SimpleResume_del.pdf"));
}
}