Introduzione
Aspose.PDF FOSS per C++ è una nuova libreria open-source per lavorare con documenti PDF dal codice C++20. È rilasciata sotto licenza MIT e non ha dipendenze a runtime oltre alla libreria standard C++ — gli encoder BMP, JPEG e TIFF, il rasterizzatore di pagine e il parser PDF sono implementati internamente, quindi non vi è alcun collegamento a un motore PDF commerciale, a un codec immagine esterno o a una libreria di crittografia di terze parti.
La libreria è organizzata attorno alla classe Aspose::Pdf::Document, che carica un PDF da un percorso file e ne espone il contenuto tramite Document.Pages(), una PageCollection di singoli oggetti Page. Da lì, il API copre l’estrazione del testo, la rasterizzazione delle pagine, la crittografia dei documenti, le annotazioni e i campi AcroForm — le operazioni necessarie per leggere, ispezionare e modificare file PDF esistenti, o creare nuovi da zero.
Questa versione è destinata agli sviluppatori che necessitano di elaborazione PDF all’interno di un codebase C++ senza aggiungere una licenza commerciale o una catena di dipendenze di terze parti: pipeline di documenti, servizi di estrazione dei contenuti, strumenti di conversione PDF‑a‑immagine e applicazioni che devono cifrare o leggere i dati dei moduli come parte di un build più ampio.
Cosa è incluso
Caricamento del documento e accesso alle pagine
Aprire un PDF esistente è una singola chiamata al costruttore. Document analizza il file e ne espone le pagine tramite Pages(), che restituisce una PageCollection con supporto all’indicizzazione a partire da 1, Count(), e Add()/Insert()/Delete() per riorganizzare l’ordine delle pagine.
#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";
}
Estrazione del testo
Aspose::Pdf::Text::TextAbsorber attraversa un Document o una singola Page e raccoglie il contenuto testuale trovato. Chiama Visit() con un documento o una pagina, quindi leggi il risultato con Text(). HasErrors() segnala se l’absorber ha incontrato contenuti che non ha potuto elaborare.
#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";
}
}
Rendering di immagini raster
Le pagine vengono renderizzate in BMP, JPEG o TIFF tramite le classi BmpDevice, JpegDevice e TiffDevice. Ogni dispositivo è costruito con una Resolution ed espone un metodo Process(page, output) che scrive l’immagine renderizzata in uno stream di output.
#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);
}
Crittografia
Document.Encrypt() protegge un documento con una password utente, una password proprietario, un valore di permesso e una selezione di CryptoAlgorithm. L’enumerazione comprende RC4-40 (RC4x40), RC4-128 (RC4x128), AES-128 (AESx128) e AES-256 (AESx256). Document.Decrypt() inverte l’operazione, e IsEncrypted() indica se un documento è attualmente criptato.
#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");
}
Annotazioni
Ogni Page espone una AnnotationCollection tramite Annotations(). Una TextAnnotation viene costruita rispetto al documento proprietario, posizionata con un Rectangle e aggiunta alla collezione della pagina con 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");
}
Campi AcroForm
Document.Form() restituisce il Form del documento, che espone i campi esistenti tramite Fields() come un std::vector<Field*>. Ogni Field riporta il proprio nome e valore corrente tramite PartialName() e Value(), e Form.Flatten() incorpora l’aspetto di ogni campo nel contenuto della pagina, rimuovendo l’interattività.
#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");
}
Avvio Rapido
Aggiungi la libreria come sottodirectory CMake e collega contro il target aspose_pdf_foss:
add_subdirectory(aspose.pdf-foss-for-cpp)
target_link_libraries(your_app PRIVATE aspose_pdf_foss)
Apri un documento, stampa il conteggio delle pagine, estrai il testo e renderizza la prima pagina in un file 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);
}
Formati Supportati
| Formato | Estensione | Leggi | Scrivi |
|---|---|---|---|
| BMP | .bmp | — | ✓ |
| JPEG | .jpg | — | ✓ |
| TIFF | .tiff | — | ✓ |
| Text | .txt | — | ✓ |
| SVG | .svg | ✓ | — |
BMP, JPEG e TIFF sono output di rendering di pagina prodotti dalle rispettive classi dispositivo. Il testo è estratto da un PDF tramite TextAbsorber. SVG è importato come contenuto vettoriale tramite il percorso di caricamento SVG della libreria.
Open Source e Licenza
Aspose.PDF FOSS per C++ è distribuito sotto licenza MIT, con il codice sorgente completo disponibile su github.com/aspose-pdf-foss/Aspose.PDF-FOSS-for-Cpp. La licenza consente l’uso commerciale, la modifica e la ridistribuzione senza un accordo separato.