Aspose.PDF FOSS for C++ Funzionalità
Aspose.PDF FOSS for C++ Funzionalità
Aspose.PDF FOSS for C++ è una libreria C++20 per creare, aprire, modificare e salvare documenti PDF. Questa pagina esamina le principali aree di capacità e le classi che fungono da punti di ingresso. Ogni area è trattata in modo approfondito nella propria pagina della guida per sviluppatori.
Gestione dei Documenti
Aspose::Pdf::Document è l’oggetto radice per ogni operazione. Apre un file esistente da un percorso, espone la raccolta di pagine tramite Pages() e persiste le modifiche con Save(). Optimize() e OptimizeResources() riducono la dimensione del file rimuovendo risorse inutilizzate o duplicate.
#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");
}Estrazione del testo
Aspose::Pdf::Text::TextAbsorber attraversa un documento o una singola pagina e raccoglie il testo semplice, che viene recuperato con Text() dopo aver chiamato Visit(). TextFragmentAbsorber esegue lo stesso attraversamento ma restituisce oggetti TextFragment individuali tramite TextFragments(), fornendo l’accesso alla posizione di ciascun frammento e allo stato del testo.
#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";
}Rendering su Immagini Raster
I dispositivi di rendering delle pagine convertono un Page in un’immagine raster. BmpDevice, PngDevice, JpegDevice e TiffDevice condividono la stessa firma Process(page, output) e sono costruiti con un Resolution che imposta i DPI 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("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);
}Crittografia
Document::Encrypt() protegge un documento con una password utente (necessaria per aprirlo) e una password proprietario (necessaria per modificare i permessi), usando un algoritmo selezionato dall’enumerazione CryptoAlgorithm: RC4x40, RC4x128, AESx128 o AESx256. IsEncrypted() segnala lo stato attuale e Decrypt() rimuove la protezione da un documento già aperto.
#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
Le annotazioni allegano note visibili, forme e markup a una pagina. Ogni tipo di annotazione deriva da Annotation ed è costruito con il Page di destinazione e un Rectangle di posizionamento, quindi aggiunto alla pagina tramite Annotazioni() (un 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
I campi AcroForm sono gestiti tramite Aspose::Pdf::Forms::Form, accessibili via Document::Form(). I tipi di campo come TextBoxField sono costruiti come le annotazioni — con un Page e un Rectangle — e registrati con 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");
}Suggerimenti e buone pratiche
- Apri i file di input per percorso con il costruttore
Document; chiamaSave()con un percorso di output esplicito invece di sovrascrivere la sorgente mentre altri handle su di essa potrebbero essere ancora aperti. - Chiama
Optimize()prima diSave()quando un documento è stato pesantemente modificato — rimuove le risorse che non sono più referenziate da alcuna pagina. - Crea i dispositivi raster (
BmpDevice,PngDevice,JpegDevice,TiffDevice) una volta per risoluzione e riutilizzali tra le pagine invece di ricreare un dispositivo per ogni pagina. - Imposta sia una password utente che una password proprietario quando chiami
Encrypt()— una password utente vuota consente a qualsiasi visualizzatore di aprire il file, mentre la password proprietario controlla le modifiche dei permessi. - Mantieni gli oggetti di annotazione e campo (
TextAnnotation,TextBoxFielde simili) vivi fino a dopo il ritorno diSave(), poiché il documento conserva riferimenti al contenuto della pagina a cui sono stati aggiunti.
Problemi comuni
| Problema | Causa | Correzione |
|---|---|---|
Save() produce un file con contenuto invariato | Le modifiche sono state apportate a una copia della pagina o dell’annotazione anziché all’oggetto ottenuto da doc.Pages() | Modifica l’oggetto restituito direttamente da Pages(), Annotations() o Form() |
| L’immagine renderizzata è vuota o bianca | Indice di pagina errato passato a Process() | PageCollection è indicizzato a partire da 1 — la pagina 1 è doc.Pages()[1], non [0] |
Encrypt() produce un file che si apre comunque senza password | Password dell’utente lasciata vuota | Passa una stringa non vuota come argomento userPassword |
| Il testo estratto è vuoto per un PDF scansionato | La pagina contiene solo contenuto immagine raster, non operatori di testo | TextAbsorber legge gli operatori di testo; le pagine solo immagine non ne hanno nulla da estrarre |
Il campo aggiunto con Form::Add() non appare nella pagina | Il Rectangle del campo è al di fuori del MediaBox della pagina | Conferma che le coordinate del rettangolo siano entro i limiti di Page::MediaBox() |
FAQ
Il Aspose.PDF FOSS per C++ dipende da qualche libreria PDF commerciale?
No. È un’implementazione da zero in C++20 senza alcuna dipendenza da stack PDF commerciali, rilasciata sotto licenza MIT.
Posso creare un nuovo PDF da zero invece di aprirne uno esistente?
Sì. Document ha un costruttore predefinito che crea un documento vuoto; chiama Pages().Add() per aggiungere pagine prima di salvare.
In quali formati raster posso rendere?
BmpDevice, PngDevice, JpegDevice e TiffDevice rendono le singole pagine in BMP, PNG, JPEG e TIFF rispettivamente.
Quali algoritmi di crittografia sono supportati?
CryptoAlgorithm offre RC4x40, RC4x128, AESx128 e AESx256, passati a Document::Encrypt().
Dove devo andare dopo?
La guida per sviluppatori include pagine dedicate alla gestione di documenti e pagine, alla grafica e forme PDF-native, alle annotazioni e ai moduli interattivi, e alle classi facciata di livello superiore che avvolgono le operazioni comuni sui file.
API Reference Riepilogo
| Classe/Metodo | Descrizione |
|---|---|
Document | Oggetto radice — apri, crea, salva e ottimizza un PDF |
Document.Pages() | Restituisce il PageCollection del documento |
Document.Encrypt() / Decrypt() | Proteggi con password o rimuovi la protezione da un documento |
Document.Form() | Restituisce il contenitore AcroForm del documento |
TextAbsorber | Estrae testo semplice da un documento o da una pagina |
TextFragmentAbsorber | Estrae frammenti di testo posizionati |
BmpDevice / PngDevice / JpegDevice / TiffDevice | Convertire una pagina in un formato immagine raster |
Resolution | DPI di output passati a un dispositivo di rendering |
CryptoAlgorithm | Selezione dell’algoritmo di crittografia: RC4 o AES, 40–256 bit |
Permissions | Flag di controllo degli accessi passati a Encrypt() |
Annotation / AnnotationCollection | Tipo base e contenitore per le annotazioni della pagina |
TextAnnotation | Annotazione di nota testuale |
Form | contenitore di campo AcroForm raggiunto tramite Document.Form() |
TextBoxField | Campo modulo di testo a riga singola/multiriga |