1. Продукты
  2.   Aspose.PDF
  3.   Aspose.PDF FOSS for C++

Aspose.PDF FOSS для C++

Открытая C++ библиотека для создания, редактирования, рендеринга и защиты PDF-документов без runtime-зависимостей.

Aspose.PDF FOSS — открытая библиотека PDF на C++

Aspose.PDF FOSS for C++ — это открытая, современная библиотека C++20 для работы с PDF-документами: открытие и сохранение PDF, извлечение текста, растрирование страниц в графические форматы и создание документов с нуля (текст, изображения, таблицы, векторная графика, аннотации, поля AcroForm и закладки). Библиотека связывается только со стандартной библиотекой C++: каждый примитив, включая кодеки TIFF, JPEG и PNG и растрировщик страниц, реализован с нуля без зависимости от какого-либо коммерческого PDF-стека.

Ядро API построено вокруг класса Document и его коллекции Pages(). Текст извлекается с помощью Aspose::Pdf::Text::TextAbsorber, страницы рендерятся в растровые изображения через классы-устройства, такие как PngDevice, JpegDevice, BmpDevice и TiffDevice, а документы можно защищать с помощью Document.Encrypt() используя алгоритмы RC4-40, RC4-128, AES-128 или AES-256, выбранные через перечисление CryptoAlgorithm. Интерактивные поля формы управляются классом Form, а аннотации — текстовые заметки, выделения, фигуры и штампы — добавляются и изменяются через иерархию классов Annotation.

Aspose.PDF FOSS for C++ выпускается под лицензией MIT без каких-либо плат за выполнение или ограничения использования. Он собирается как статическая библиотека через CMake — добавьте его как подкаталог вашего проекта или установите отдельно — и требует компилятора C++20 без дополнительных runtime-зависимостей. Для корпоративных функций и поддержки см. Aspose.PDF for C++ — Enterprise Product.

Загрузка документа и управление страницами

  • Открывать существующие PDF-файлы и сохранять изменения с Document
  • Получать доступ к страницам и перебирать их через Document.Pages() (PageCollection)
  • Добавлять, вставлять и удалять страницы с помощью PageCollection.Add()/Insert()/Delete()
  • Читать и задавать метаданные документа через DocumentInfo (Document.Info())
  • Оптимизировать размер документа с Document.Optimize()/OptimizeResources()

Типичные сценарии использования

  • Создавать конвейеры генерации PDF для отчетов и счетов
  • Объединять, разделять и реорганизовывать существующие PDF-документы
  • Программно просматривать и обновлять метаданные документов
  • Уменьшать размер PDF-файлов перед архивированием или распространением

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

  • Извлечь обычный текст из всего документа с помощью Aspose::Pdf::Text::TextAbsorber
  • Посетить отдельную страницу или весь документ через TextAbsorber.Visit()
  • Получить извлечённый текст через TextAbsorber.Text()
  • Найти отдельные фрагменты текста с помощью TextFragmentAbsorber.TextFragments()

Типичные сценарии использования

  • Индексировать содержимое PDF для поиска
  • Извлекать данные из счетов-фактур и структурированных документов
  • Создавать конвейеры text-mining или content-analysis
  • Проверять содержимое документов в автоматизированных наборах тестов

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

  • Отрисовывайте страницы в PNG с помощью PngDevice
  • Отрисовывайте страницы в JPEG, BMP или TIFF с помощью JpegDevice, BmpDevice, TiffDevice
  • Управляйте разрешением вывода с помощью класса Resolution
  • Обрабатывайте отдельную страницу через {Device}.Process()

Типичные сценарии использования

  • Создавайте миниатюры страниц для просмотрщика документов
  • Создавайте растровый вывод, готовый к печати, из векторных PDF
  • Создавайте сервисы преобразования PDF в изображение
  • Создавайте базовые линии визуальной регрессии для сгенерированных PDF

Шифрование и безопасность

  • Шифровать документы с помощью Document.Encrypt() с использованием пользовательского и владельческого пароля
  • Выбрать RC4-40, RC4-128, AES-128 или AES-256 через перечисление CryptoAlgorithm
  • Управлять предоставленными разрешениями с помощью типа Permissions
  • Расшифровывать документы, защищённые паролем, с помощью Document.Decrypt()

Типичные сценарии использования

  • Защитить конфиденциальные PDF-отчёты перед распространением
  • Применить ограничения печати/копирования/редактирования к общим документам
  • Добавить парольную защиту к сгенерированным счетам-фактурам и выпискам
  • Пакетно шифровать документы в рамках конвейера обработки документов

Аннотации и интерактивные формы

  • Добавлять, изменять и уплощать аннотации через Annotation и AnnotationCollection
  • Управлять полями AcroForm через класс Form
  • Добавлять и удалять поля с помощью Form.Add()/Form.Delete()
  • Преобразовывать интерактивные формы в статический контент с помощью Form.Flatten()

Типичные сценарии использования

  • Добавлять комментарии рецензирования и выделения в общие PDF-файлы
  • Создавать заполняемые PDF-формы для сбора данных
  • Преобразовывать отправленные формы в плоский вид перед архивированием
  • Программно предварительно заполнять и блокировать поля формы

Откройте PDF, извлеките текст и отобразите страницу

Добавьте библиотеку как подкаталог CMake, затем откройте документ, посчитайте количество страниц, извлеките текст с помощью TextAbsorber и отрендерите страницу 1 в PNG с разрешением 150 DPI.

add_subdirectory(aspose.pdf-foss-for-cpp)
target_link_libraries(your_app PRIVATE aspose_pdf_foss)
#include <aspose/pdf/document.hpp>
#include <aspose/pdf/page_collection.hpp>
#include <aspose/pdf/text_absorber.hpp>
#include <aspose/pdf/png_device.hpp>
#include <aspose/pdf/resolution.hpp>
#include <fstream>
#include <iostream>

int main() {
    Aspose::Pdf::Document doc("input.pdf");
    std::cout << "Pages: " << doc.Pages().Count() << "\n";

    Aspose::Pdf::Text::TextAbsorber absorber;
    absorber.Visit(doc);
    std::cout << absorber.Text() << "\n";

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

Зашифровать документ с AES-256

Откройте документ и защитите его паролем пользователя и паролем владельца, используя шифрование AES-256.

#include <aspose/pdf/document.hpp>
int main() {
    Aspose::Pdf::Document doc("input.pdf");
    doc.Encrypt("user-password", "owner-password",
                Aspose::Pdf::Permissions(),
                Aspose::Pdf::CryptoAlgorithm::AESx256);
    doc.Save("encrypted.pdf");
}

Чтение и обновление метаданных документа

Прочитайте существующие записи /Info и обновите заголовок документа через DocumentInfo.

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

int main() {
    Aspose::Pdf::Document doc("input.pdf");
    auto& info = doc.Info();
    std::cout << "Title: " << info.Title() << "\n";
    std::cout << "Author: " << info.Author() << "\n";

    doc.SetTitle("Updated Report Title");
    doc.Save("output.pdf");
}

Часто задаваемые вопросы

Какая модель лицензирования для Aspose.PDF FOSS for C++?

Это лицензировано по MIT и бесплатно для использования в коммерческих и некоммерческих продуктах, без ключа активации или ограничений вызовов API.

Какие версии компилятора и CMake требуются?

Компилятор C++20 (clang 16+, gcc 13+ или MSVC 2022 17.5+) и CMake 3.22 или новее. Python 3 требуется только во время сборки.

Есть ли у библиотеки какие-либо зависимости во время выполнения?

Нет. Он связывается только со стандартной библиотекой C++ — во время выполнения не требуется зависимостей от сторонних PDF, изображений или сжатия.

Какие форматы он может читать и экспортировать?

Он читает и сохраняет оригинальные PDF-документы, а также экспортирует отрисованные страницы в Bmp, Jpeg и Tiff, плюс обычный текст. Содержимое SVG можно импортировать.

Как зашифровать PDF-документ?

Вызовите Document.Encrypt() с паролем пользователя, паролем владельца и CryptoAlgorithm (RC4x40, RC4x128, AESx128 или AESx256).

Есть ли известные ограничения в текущем релизе?

Да — несколько вспомогательных функций проверки типа XmpValue (IsDateTime, IsField и аналогичных) являются заглушками, которые всегда возвращают false; используйте IsString/IsInteger/IsDouble/IsArray вместо этого.

  

Ресурсы поддержки и обучения

 Русский