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.


Начало работы

Связанные ресурсы