Основное управление PDF‑документами охватывает операции, которые встречаются почти в каждом PDF‑рабочем процессе: открытие или создание документа, доступ к страницам и их содержимому, чтение и запись аннотаций, извлечение текста и работа с интерактивными действиями. Aspose.PDF FOSS for .NET предоставляет API .NET 8+, которое обрабатывает все эти задачи через согласованную объектную модель, сосредоточенную вокруг типов Document и Page.
Жизненный цикл документа: Создание, Открытие, Сохранение
Каждый рабочий процесс начинается либо с создания нового документа, либо с загрузки существующего. Document.Create() возвращает новый, пустой Document экземпляр. Document.Open(data) принимает byte[] или Stream и разбирает структуру PDF:
using var doc = Document.Create();
doc.Pages.Add();
var page = doc.Pages[1];
var action = PdfAction.CreateUri("https://aspose.com");
page.Annotations.AddLinkAnnotation(new Rectangle(50, 700, 200, 720), action);
using var ms = new MemoryStream();
doc.Save(ms);
ms.Position = 0;
using var doc2 = Document.Open(ms.ToArray());
var annot = (LinkAnnotation)doc2.Pages[1].Annotations[1];
Console.WriteLine(annot.Uri); // https://aspose.com
Этот фрагмент открывает минимальный PDF, добавляет аннотацию ссылки на страницу 1, сохраняет в MemoryStream и проверяет, что аннотация сохраняется после перезагрузки. Перегрузка Document.Save(Stream) записывает полную обновлённую структуру; Document.ToArray() возвращает байты напрямую.
Доступ к страницам и коллекция Pages
Страницы доступны через свойство Pages с использованием целочисленного индекса, начинающегося с 1: doc.Pages[1] возвращает первую страницу, doc.Pages[doc.Pages.Count] возвращает последнюю. Каждый объект Page предоставляет:
Annotations—AnnotationCollectionдля этой страницы, поддерживающийAddLinkAnnotationи перечисление существующих аннотаций по типу.- Операторы потока содержимого — низкоуровневый доступ к командам рисования страницы через коллекцию
Operators.
Индекс, начинающийся с 1, последователен во всём API: поиск аннотаций, индексы страниц назначения действия GoTo и все остальные ссылки на страницы используют одну и ту же конвенцию.
Извлечение текста с помощью TextFragmentAbsorber
TextFragmentAbsorber является стандартной точкой входа для чтения текста со страницы PDF. Используйте конструктор без аргументов, чтобы извлечь все фрагменты, или передайте поисковую фразу для фильтрации соответствующего текста:
using var doc = Document.Open("path/to/document.pdf");
var absorber = new TextFragmentAbsorber("Hello");
absorber.Visit(doc.Pages[1]);
foreach (var fragment in absorber.TextFragments)
{
Console.WriteLine($"Found: {fragment.Text} size={fragment.FontSize}");
}
Вызовите absorber.Visit(page) для обработки одной страницы. Полученная коллекция TextFragments содержит TextFragment объектов; каждый предоставляет Text (строковое содержимое) и FontSize (отображаемый размер в пунктах). Вторая перегрузка TextFragmentAbsorber(searchPhrase, isRegex) принимает флаг регулярного выражения для поиска по шаблону.
Интерактивные действия
PdfAction — это фабричный класс для всех стандартных типов действий PDF. Четыре статических фабричных метода покрывают наиболее распространённые случаи:
PdfAction.CreateUri(uri)— открывает URL в браузере пользователя.PdfAction.CreateGoTo(pageIndex, fitType)— переходит к определённой странице в документе.PdfAction.CreateJavaScript(script)— выполняет строку JavaScript в PDF viewer.PdfAction.CreateLaunch(filePath)— запускает внешний файл или приложение.
Действия привязываются к страницам через аннотации. AnnotationCollection.AddLinkAnnotation(rectangle, action) размещает LinkAnnotation над указанным прямоугольным регионом с прикреплённым действием:
using var doc = Document.Create();
doc.Pages.Add();
var page = doc.Pages[1];
var action = PdfAction.CreateUri("https://example.org");
var annot = page.Annotations.AddLinkAnnotation(new Rectangle(10, 10, 100, 30), action);
Console.WriteLine(page.Annotations.Count); // 1
Console.WriteLine(annot.AnnotationType); // Link
AnnotationType.Link подтверждает, что аннотация была создана как тип ссылки. Конструктор Rectangle принимает координаты left, bottom, right и top в единицах пользовательского пространства PDF.
Метаданные документа и лицензирование
Класс Document предоставляет IsLicensed (возвращает true в FOSS‑версии), JavaScript (JavaScriptCollection для скриптов уровня документа) и DocumentActions для событий жизненного цикла, таких как BeforeClosing и BeforeSaving.
Пакет FOSS устанавливается через NuGet:
dotnet add package Aspose.Pdf.Foss --version 0.1.0-alpha
Ключ лицензии не требуется. Лицензия MIT разрешает использование в коммерческих приложениях без требований к указанию авторства, кроме сохранения уведомления о лицензии.