Aspose.PDF FOSS for .NET — это бесплатная библиотека .NET с лицензией MIT для чтения, создания и манипулирования PDF‑документами. Выпущенная под разрешительной открытой лицензией, она устраняет традиционный барьер к возможностям PDF корпоративного уровня — все функции библиотеки доступны без покупки коммерческой лицензии.
Что такое Aspose.PDF FOSS для .NET?
Библиотека нацелена на .NET 8 и более новые версии. Она опубликована в NuGet под идентификатором пакета Aspose.Pdf.Foss и может быть добавлена в любой проект .NET 8+ одной командой:
dotnet add package Aspose.Pdf.Foss --version 0.1.0-alpha
Основное пространство имён — Aspose.Pdf, связанные пространства имён включают Aspose.Pdf.Text, Aspose.Pdf.Forms и Aspose.Pdf.Facades. Библиотека предоставляет 805 публичных API‑классов, поддерживаемых 7 488 документированными утверждениями и 100 фрагментами кода, извлечёнными непосредственно из набора тестов.
Основные возможности
API охватывает полный жизненный цикл PDF‑документа:
- Создание и загрузка документа —
Document.Create()создает пустой документ;Document.Open(data)загружает существующий PDF из массива байтов или потока. - Доступ к страницам и содержимому — коллекция
Pagesпредоставляет доступ к отдельным страницам по индексу, начинающемуся с 1, каждая из которых раскрывает аннотации, операторы и потоки содержимого. - Извлечение текста —
TextFragmentAbsorberпосещает страницу и собирает каждый текстовый фрагмент, с опциональной фильтрацией по поисковой фразе и поддержкой регулярных выражений. - Интерактивные действия —
PdfAction.CreateUri,PdfAction.CreateGoTo,PdfAction.CreateJavaScriptиPdfAction.CreateLaunchохватывают стандартные типы действий PDF. - Аннотации —
AnnotationCollection.AddLinkAnnotationприкрепляет аннотацию‑ссылку с соответствующим действием к любой прямоугольной области на странице. - Формы — пространство имен
Aspose.Pdf.FormsиAspose.Pdf.Facadesпредоставляют доступ к полям AcroForm, форматированию внешнего вида и расширениям JavaScript на уровне полей.
Открытие документа и добавление ссылки
В следующем примере демонстрируется шаблон round‑trip: создать новый PDF‑документ, добавить URI action link annotation на первую страницу, сохранить в поток и загрузить заново, чтобы проверить, что аннотация сохраняется.
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
Статический метод Document.Open принимает byte[] или поток. doc.Pages[1] получает доступ к первой странице по индексу, начинающемуся с 1 — та же конвенция индексации, используемая во всей библиотеке. После сохранения в MemoryStream документ можно загрузить заново, и все аннотации сохраняются.
Поиск текста на странице
TextFragmentAbsorber обеспечивает поиск по ключевым словам в потоке содержимого любой страницы. Передайте поисковую фразу в конструктор, чтобы ограничить результаты, или используйте перегрузку без аргументов для сбора всех фрагментов:
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}");
}
Каждый TextFragment в полученной коллекции раскрывает свойства, включая Text, FontSize и позиционные данные, что упрощает построение рабочих процессов поиска, выделения или редактирования на основе извлечённых фрагментов.
Лицензия MIT и открытая разработка
Весь исходный код опубликован на GitHub и распространяется под лицензией MIT. Нет водяного знака оценки, нет ограничения использования и нет отдельного файла лицензии для управления. Свойство Document.IsLicensed всегда возвращает true в сборке FOSS.
Пакет в настоящее время находится на версии 0.1.0-alpha, что отражает активную разработку. Поверхность API уже значительна — 805 классов, 7 488 заявок — и обозначение альфа указывает на то, что сигнатуры API могут измениться до выпуска версии 1.0.