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 | Анотація текстової нотатки |
Form | AcroForm контейнер поля, доступний через Document.Form() |
TextBoxField | Текстове поле форми (однорядкове/багаторядкове) |