Introducere
Aspose.PDF FOSS pentru C++ este o bibliotecă nouă open-source pentru lucrul cu documente PDF din cod C++20. Este lansată sub licența MIT și nu are nicio dependență la runtime în afara bibliotecii standard C++ — codificatoarele BMP, JPEG și TIFF, rasterizatorul de pagini și parserul PDF sunt implementate intern, așa că nu există niciun link către un motor PDF comercial, un codec de imagine extern sau o bibliotecă de criptografie terță.
Bibliotecă este organizată în jurul clasei Aspose::Pdf::Document, care încarcă un PDF dintr-o cale de fișier și expune conținutul său prin Document.Pages(), o PageCollection de obiecte Page individuale. De acolo, API acoperă extragerea de text, rasterizarea paginilor, criptarea documentului, adnotările și câmpurile AcroForm — operațiile necesare pentru a citi, inspecta și modifica fișiere PDF existente sau pentru a crea altele noi de la zero.
Această versiune este destinată dezvoltatorilor care au nevoie de procesare PDF în interiorul unei baze de cod C++ fără a adăuga o licență comercială sau un lanț de dependențe terțe: conducte de documente, servicii de extragere a conținutului, instrumente de conversie PDF‑în‑imagine și aplicații care trebuie să cripteze sau să citească din nou datele de formular ca parte a unei construcții mai mari.
Ce este inclus
Încărcarea documentului și accesul la pagini
Deschiderea unui PDF existent se realizează printr-un singur apel al constructorului. Document analizează fișierul și expune paginile prin Pages(), care returnează o PageCollection ce suportă indexare începând de la 1, Count(), și Add()/Insert()/Delete() pentru restructurarea ordinii paginilor.
#include <aspose/pdf/document.hpp>
#include <iostream>
int main() {
Aspose::Pdf::Document doc("input.pdf");
std::cout << "Page count: " << doc.Pages().Count() << "\n";
auto page = doc.Pages()[1];
std::cout << "First page number: " << page.Number() << "\n";
}
Extracție de text
Aspose::Pdf::Text::TextAbsorber parcurge un Document sau o singură Page și colectează conținutul textului pe care îl găsește. Apelați Visit() cu un document sau o pagină, apoi citiți rezultatul cu Text(). HasErrors() raportează dacă absorberul a întâlnit conținut pe care nu a putut să îl proceseze.
#include <aspose/pdf/document.hpp>
#include <aspose/pdf/text_absorber.hpp>
#include <iostream>
int main() {
Aspose::Pdf::Document doc("input.pdf");
Aspose::Pdf::Text::TextAbsorber absorber;
absorber.Visit(doc);
std::cout << absorber.Text() << "\n";
if (absorber.HasErrors()) {
std::cerr << "Some content could not be extracted\n";
}
}
Redare în imagini raster
Paginile sunt randate în BMP, JPEG sau TIFF prin clasele BmpDevice, JpegDevice și TiffDevice. Fiecare dispozitiv este construit cu un Resolution și expune o metodă Process(page, output) care scrie imaginea randată într-un flux de ieșire.
#include <aspose/pdf/document.hpp>
#include <aspose/pdf/bmp_device.hpp>
#include <aspose/pdf/resolution.hpp>
#include <fstream>
int main() {
Aspose::Pdf::Document doc("input.pdf");
Aspose::Pdf::Devices::BmpDevice bmp(Aspose::Pdf::Devices::Resolution(150));
std::ofstream out("page1.bmp", std::ios::binary);
bmp.Process(doc.Pages()[1], out);
}
Criptare
Document.Encrypt() protejează un document cu o parolă de utilizator, o parolă de proprietar, o valoare de permisiune și o selecție CryptoAlgorithm. Enumerația acoperă RC4-40 (RC4x40), RC4-128 (RC4x128), AES-128 (AESx128) și AES-256 (AESx256). Document.Decrypt() inversează operația, iar IsEncrypted() raportează dacă un document este în prezent criptat.
#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");
}
Adnotări
Fiecare Page expune o AnnotationCollection prin Annotations(). O TextAnnotation este construită în raport cu documentul deținator, poziționată cu un Rectangle și adăugată la colecția paginii cu Add().
#include <aspose/pdf/document.hpp>
#include <aspose/pdf/annotations/text_annotation.hpp>
#include <aspose/pdf/rectangle.hpp>
int main() {
Aspose::Pdf::Document doc("input.pdf");
Aspose::Pdf::Annotations::TextAnnotation note(doc);
note.Rect(Aspose::Pdf::Rectangle(100.0, 700.0, 200.0, 720.0, false));
note.Contents("Reviewed - see section 2");
doc.Pages()[1].Annotations().Add(note);
doc.Save("annotated.pdf");
}
Câmpuri AcroForm
Document.Form() returnează Form-ul documentului, care expune câmpurile existente prin Fields() ca un std::vector<Field*>. Fiecare Field raportează numele și valoarea curentă prin PartialName() și Value(), iar Form.Flatten() încorporează aspectul fiecărui câmp în conținutul paginii, eliminând interactivitatea.
#include <aspose/pdf/document.hpp>
#include <iostream>
int main() {
Aspose::Pdf::Document doc("form.pdf");
auto& form = doc.Form();
std::cout << "Field count: " << form.Count() << "\n";
for (auto* field : form.Fields()) {
std::cout << field->PartialName() << " = " << field->Value() << "\n";
}
form.Flatten();
doc.Save("flattened.pdf");
}
Pornire rapidă
Adăugați biblioteca ca subdirector CMake și linkați împotriva țintei aspose_pdf_foss:
add_subdirectory(aspose.pdf-foss-for-cpp)
target_link_libraries(your_app PRIVATE aspose_pdf_foss)
Deschideți un document, afișați numărul de pagini, extrageți textul și redați prima pagină într-un fișier BMP:
#include <aspose/pdf/document.hpp>
#include <aspose/pdf/text_absorber.hpp>
#include <aspose/pdf/bmp_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::BmpDevice bmp(Aspose::Pdf::Devices::Resolution(150));
std::ofstream out("page1.bmp", std::ios::binary);
bmp.Process(doc.Pages()[1], out);
}
Formate suportate
| Format | Extensie | Citește | Scrie |
|---|---|---|---|
| BMP | .bmp | — | ✓ |
| JPEG | .jpg | — | ✓ |
| TIFF | .tiff | — | ✓ |
| Text | .txt | — | ✓ |
| SVG | .svg | ✓ | — |
BMP, JPEG și TIFF sunt ieșiri de randare a paginii produse de clasele lor de dispozitiv respective. Textul este extras dintr-un PDF prin TextAbsorber. SVG este importat ca conținut vectorial prin calea de încărcare SVG a bibliotecii.
Open Source & Licențiere
Aspose.PDF FOSS pentru C++ este distribuit sub licența MIT, cu sursa completă disponibilă la github.com/aspose-pdf-foss/Aspose.PDF-FOSS-for-Cpp. Licența permite utilizarea comercială, modificarea și redistribuirea fără un acord separat.