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, анотацій та інтерактивних форм, а також класів фасаду вищого рівня, які обгортають загальні файлові операції.


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Текстове поле форми (однорядкове/багаторядкове)

Дивіться також

 Українська