Aspose.PDF FOSS for C++ Возможности

Aspose.PDF FOSS for C++ Возможности

Aspose.PDF FOSS для C++: возможности

Aspose.PDF FOSS for C++ — это библиотека C++20 для создания, открытия, изменения и сохранения PDF-документов. На этой странице рассматриваются основные области возможностей и классы, которые служат их точками входа. Каждая область подробно описана на отдельной странице руководства разработчика.


Управление документами

Aspose::Pdf::Document является корневым объектом для каждой операции. Он открывает существующий файл по пути, предоставляет коллекцию страниц через Pages() и сохраняет изменения с помощью Save(). Optimize() и OptimizeResources() уменьшают размер файла, удаляя неиспользуемые или дублированные ресурсы.

#include <aspose/pdf/document.hpp>

int main() {
    Aspose::Pdf::Document doc("input.pdf");

    auto& pages = doc.Pages();
    pages.Add();                 // append a blank page
    pages.Delete(1);             // remove the original first page

    doc.Optimize();
    doc.Save("output.pdf");
}

Извлечение текста

Aspose::Pdf::Text::TextAbsorber проходит по документу или отдельной странице и собирает простой текст, который можно получить с помощью Text() после вызова Visit(). TextFragmentAbsorber выполняет тот же обход, но возвращает отдельные объекты TextFragment через TextFragments(), предоставляя доступ к позиции каждого фрагмента и его текстовому состоянию.

#include <aspose/pdf/document.hpp>
#include <aspose/pdf/text_absorber.hpp>
#include <iostream>

int main() {
    Aspose::Pdf::Document doc("report.pdf");

    Aspose::Pdf::Text::TextAbsorber absorber;
    absorber.Visit(doc);

    std::cout << absorber.Text() << "\n";
}

Рендеринг в растровые изображения

Устройства рендеринга страниц преобразуют Page в растровое изображение. BmpDevice, PngDevice, JpegDevice и TiffDevice имеют одну и ту же подпись Process(page, output) и построены с помощью Resolution, который задает выходное DPI.

#include <aspose/pdf/document.hpp>
#include <aspose/pdf/bmp_device.hpp>
#include <aspose/pdf/resolution.hpp>
#include <fstream>

int main() {
    Aspose::Pdf::Document doc("report.pdf");

    Aspose::Pdf::Devices::BmpDevice device(Aspose::Pdf::Devices::Resolution(150));
    std::ofstream out("page1.bmp", std::ios::binary);
    device.Process(doc.Pages()[1], out);
}

Шифрование

Document::Encrypt() защищает документ пользовательским паролем (необходимым для его открытия) и паролем владельца (необходимым для изменения прав), используя алгоритм, выбранный из перечисления CryptoAlgorithm: RC4x40, RC4x128, AESx128 или AESx256. IsEncrypted() сообщает текущее состояние, а Decrypt() снимает защиту с уже открытого документа.

#include <aspose/pdf/document.hpp>

int main() {
    Aspose::Pdf::Document doc("input.pdf");

    doc.Encrypt("user-password", "owner-password",
                Aspose::Pdf::Permissions::PrintDocument,
                Aspose::Pdf::CryptoAlgorithm::AESx256);

    doc.Save("encrypted.pdf");
}

Аннотации

Аннотации прикрепляют видимые заметки, фигуры и разметку к странице. Каждый тип аннотации наследуется от Annotation и создаётся с целевым Page и размещением Rectangle, после чего добавляется на страницу через Annotations() (это AnnotationCollection).

#include <aspose/pdf/document.hpp>
#include <aspose/pdf/text_annotation.hpp>
#include <aspose/pdf/rectangle.hpp>

int main() {
    Aspose::Pdf::Document doc("input.pdf");
    auto page = doc.Pages()[1];

    Aspose::Pdf::Annotations::TextAnnotation note(
        page, Aspose::Pdf::Rectangle(50.0, 700.0, 250.0, 740.0, false));
    note.Contents("Reviewed and approved.");

    page.Annotations().Add(note);
    doc.Save("annotated.pdf");
}

Forms

Поля AcroForm управляются через Aspose::Pdf::Forms::Form, доступные через Document::Form(). Типы полей, такие как TextBoxField, создаются как аннотации — с Page и Rectangle — и регистрируются в Form::Add().

#include <aspose/pdf/document.hpp>
#include <aspose/pdf/text_box_field.hpp>
#include <aspose/pdf/rectangle.hpp>

int main() {
    Aspose::Pdf::Document doc("input.pdf");
    auto page = doc.Pages()[1];

    Aspose::Pdf::Forms::TextBoxField field(
        page, Aspose::Pdf::Rectangle(100.0, 650.0, 300.0, 670.0, false));
    field.PartialName("customer_name");
    field.Value("Jane Doe");

    doc.Form().Add(field);
    doc.Save("form_filled.pdf");
}

Советы и лучшие практики

  • Откройте входные файлы по пути с помощью конструктора Document; вызовите Save() с явным путем вывода, а не перезаписывая источник, пока другие дескрипторы к нему могут оставаться открытыми.
  • Вызовите Optimize() перед Save(), когда документ был сильно отредактирован — это удаляет ресурсы, которые больше не используются ни одной страницей.
  • Создавайте растровые устройства (BmpDevice, PngDevice, JpegDevice, TiffDevice) один раз на разрешение и переиспользуйте их на разных страницах вместо создания устройства для каждой страницы.
  • Установите как пользовательский пароль, так и пароль владельца при вызове Encrypt() — пустой пользовательский пароль позволяет любому просмотрщику открыть файл, тогда как пароль владельца контролирует изменения прав.
  • Держите объекты аннотаций и полей (TextAnnotation, TextBoxField и аналогичные) живыми до тех пор, пока не вернётся Save(), поскольку документ хранит ссылки на содержание страницы, к которой они были добавлены.

Распространённые проблемы

ПроблемаПричинаИсправление
Save() создает файл с неизменённым содержимымИзменения были внесены в копию страницы или аннотации, а не в объект, полученный из doc.Pages()Изменяйте объект, возвращаемый напрямую Pages(), Annotations() или Form()
Отрисованное изображение пустое или белоеПередан неверный индекс страницы в Process()PageCollection нумеруется с 1 — страница 1 это doc.Pages()[1], а не [0]
Encrypt() создает файл, который всё равно открывается без пароляПароль пользователя оставлен пустымПередайте непустую строку в качестве аргумента userPassword
Извлечённый текст пуст для отсканированного PDFСтраница содержит только растровое изображение, а не текстовые операторыTextAbsorber читает текстовые операторы; страницы, содержащие только изображения, их не имеют для извлечения
Поле, добавленное с помощью Form::Add(), не отображается на страницеПоле Rectangle выходит за пределы MediaBox страницыУбедитесь, что координаты прямоугольника находятся в пределах границ Page::MediaBox()

FAQ

Зависит ли Aspose.PDF FOSS для C++ от какой-либо коммерческой PDF-библиотеки?

Нет. Это реализация с нуля на C++20 без зависимости от какого-либо коммерческого PDF-стека, выпущенная под лицензией MIT.

Могу ли я создать новый PDF с нуля вместо открытия существующего?

Да. Document имеет конструктор по умолчанию, который создаёт пустой документ; вызовите Pages().Add(), чтобы добавить страницы перед сохранением.

В какие растровые форматы я могу рендерить?

BmpDevice, PngDevice, JpegDevice и TiffDevice рендерят отдельные страницы в BMP, PNG, JPEG и TIFF соответственно.

Какие алгоритмы шифрования поддерживаются?

CryptoAlgorithm предлагает RC4x40, RC4x128, AESx128 и AESx256, передаваемые в Document::Encrypt().

Куда мне идти дальше?

Руководство разработчика включает отдельные страницы для управления документами и страницами, PDF-native графикой и фигурами, аннотациями и интерактивными формами, а также более высокоуровневыми facade-классами, которые оборачивают общие файловые операции.


API Reference Сводка

Класс/МетодОписание:
DocumentКорневой объект — открывать, создавать, сохранять и оптимизировать PDF
Document.Pages()Возвращает PageCollection документа
Document.Encrypt() / Decrypt()Защитить документ паролем или снять защиту с документа
Document.Form()Возвращает контейнер AcroForm документа
TextAbsorberИзвлекает неформатированный текст из документа или страницы
TextFragmentAbsorberИзвлекает позиционированные фрагменты текста
BmpDevice / PngDevice / JpegDevice / TiffDeviceОтрисовывает страницу в растровый формат изображения
ResolutionВывод DPI, передаваемый устройству рендеринга
CryptoAlgorithmВыбор алгоритма шифрования: RC4 или AES, 40–256 бит
PermissionsФлаги контроля доступа, передаваемые в Encrypt()
Annotation / AnnotationCollectionБазовый тип и контейнер для аннотаций страницы
TextAnnotationТекстовая аннотация заметки
FormAcroForm контейнер поля доступен через Document.Form()
TextBoxFieldТекстовое поле формы (однострочное/многострочное)

См. также:

 Русский