Слой фасадов в Aspose.PDF FOSS для Java

Aspose.PDF FOSS для Java включает слой фасадов — набор высокоуровневых, ориентированных на задачу классов, предоставляющих целевые операции над PDF-документами без необходимости навигации по полной объектной модели PDF. Каждый класс фасада следует той же схеме: привязывает документ, выполняет операции, сохраняет результат.

Все классы фасадов находятся в пакете org.aspose.pdf.facades:

import org.aspose.pdf.facades.*;

PdfAnnotationEditor: Сведение к плоскому виду и удаление аннотаций

PdfAnnotationEditor предоставляет операции для массового управления аннотациями: преобразование их в содержимое страницы, удаление всех аннотаций или удаление определённых типов аннотаций по имени.

try (PdfAnnotationEditor editor = new PdfAnnotationEditor()) {
    editor.bindPdf("annotated.pdf");
    // Flatten all annotations into the page content stream
    editor.flattenAnnotations();
    editor.save("flat.pdf");
}

Перегрузка deleteAnnotations(annotationType) принимает строку типа аннотации, например "Highlight" или "Widget", чтобы удалить только аннотации этого типа. countAnnotations() возвращает общее количество аннотаций на всех страницах.

PdfBookmarkEditor: Создание и удаление закладок

PdfBookmarkEditor управляет деревом оглавления PDF (закладки). Он предоставляет методы для создания новых закладок с помощью createBookmarks(), удаления всех закладок с помощью deleteBookmarks() и удаления закладок по заголовку с помощью deleteBookmarkByTitle().

try (PdfBookmarkEditor bookmarkEditor = new PdfBookmarkEditor()) {
    bookmarkEditor.bindPdf("input.pdf");
    // Remove all bookmarks from the document
    bookmarkEditor.deleteBookmarks();
    bookmarkEditor.save("no-bookmarks.pdf");
}

Перегрузка bindPdf(document) принимает объект Document напрямую, позволяя использовать её в конвейерах, где документ уже загружен в память.

PdfContentEditor: Замена текста

PdfContentEditor поддерживает целенаправленную замену текста в потоках содержимого PDF. replaceText(searchText, replaceText) заменяет все вхождения строки во всём документе; replaceText(searchText, pageNumber, replaceText) ограничивает замену одной страницей.

try (PdfContentEditor contentEditor = new PdfContentEditor()) {
    contentEditor.bindPdf("template.pdf");
    contentEditor.replaceText("{{CompanyName}}", "Acme Corp");
    contentEditor.save("output.pdf");
}

TextReplaceOptions контролирует, должна ли замена сохранять оригинальный шрифт и размер или наследовать свойства текста из окружающего содержимого. getStamps(pageNumber) возвращает объекты StampInfo для всех штампов на странице, а deleteStampById() удаляет конкретный штамп по его идентификатору.

PdfFileSecurity: Шифрование и разрешения

PdfFileSecurity управляет безопасностью на уровне документа, включая шифрование, дешифрование и разрешения доступа. Варианты конструктора принимают пути к файлам, потоки или существующий экземпляр Document вместе с назначением вывода.

DocumentPrivilege представляет разрешения доступа к зашифрованному документу. Используйте DocumentPrivilege.getForbidAll(), чтобы запретить все пользовательские операции, или DocumentPrivilege.getAllowAll(), чтобы предоставить полный доступ.

try (PdfFileSecurity security = new PdfFileSecurity("input.pdf", "secured.pdf")) {
    DocumentPrivilege privilege = DocumentPrivilege.getForbidAll();
    privilege.setAllowPrint(true);
    security.encryptFile("userPass", "ownerPass", privilege, KeySize.x256);
}

decryptFile(ownerPassword) удаляет шифрование, когда известен пароль владельца. Перечисление Algorithm предоставляет семейства алгоритмов RC4 и AES; KeySize указывает длину ключа.

PdfFileStamp: Добавление штампов и номеров страниц

PdfFileStamp добавляет текстовые и графические штампы на страницы PDF и может автоматически генерировать отформатированные номера страниц. Штампы размещаются с помощью координатного позиционирования на каждой странице.

try (PdfFileStamp stamp = new PdfFileStamp("input.pdf", "stamped.pdf")) {
    // Add formatted page numbers to all pages
    stamp.addPageNumber("Page #", PageNumberingStyle.NumeralsArabic,
        0, 0, 0, 20);
}

PdfExtractor: Извлечение текста и изображений

PdfExtractor предоставляет вытягиваемый API для извлечения текста и изображений из PDF-документов. После привязки документа вызовите extractText() для запуска извлечения текста, затем итеративно используйте hasNextPageText() и getNextPageText():

try (PdfExtractor extractor = new PdfExtractor()) {
    extractor.bindPdf("document.pdf");
    extractor.extractText();
    while (extractor.hasNextPageText()) {
        String pageText = extractor.getNextPageText();
        // Collect extracted page content
    }
}

Для извлечения изображений extractImage() инициирует процесс, а hasNextImage() / getNextImage(outputStream) перебирают извлечённые изображения. Методы getPassword() и setPassword() поддерживают зашифрованные документы.

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

Добавьте зависимость Maven:

<dependency>
  <groupId>org.aspose</groupId>
  <artifactId>aspose-pdf-foss</artifactId>
  <version>26.8.0</version>
</dependency>

Все фасадные классы требуют Java 11 или новее. Aspose.PDF FOSS для Java лицензирована по MIT и доступна по адресу https://github.com/aspose-pdf-foss/Aspose.PDF-FOSS-for-Java.

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