Aspose.PDF FOSS for C++ Fonctionnalités
Aspose.PDF FOSS pour C++ Fonctionnalités
Aspose.PDF FOSS pour C++ est une bibliothèque C++20 pour créer, ouvrir, modifier et enregistrer des documents PDF. Cette page passe en revue les principaux domaines de capacités et les classes qui servent de points d’entrée. Chaque domaine est traité en profondeur sur sa propre page du guide du développeur.
Gestion de documents
Aspose::Pdf::Document est l’objet racine pour chaque opération. Il ouvre un fichier existant depuis un chemin, expose la collection de pages via Pages(), et persiste les modifications avec Save(). Optimize() et OptimizeResources() réduisent la taille du fichier en supprimant les ressources inutilisées ou dupliquées.
#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");
}Extraction de texte
Aspose::Pdf::Text::TextAbsorber parcourt un document ou une seule page et collecte le texte brut, qui est récupéré avec Text() après avoir appelé Visit(). TextFragmentAbsorber effectue le même parcours mais renvoie des objets TextFragment individuels via TextFragments(), offrant l’accès à la position et à l’état du texte de chaque fragment.
#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";
}Rendu en images raster
Les dispositifs de rendu de pages convertissent un Page en image raster. BmpDevice, PngDevice, JpegDevice et TiffDevice partagent la même signature Process(page, output) et sont construits avec un Resolution qui définit le DPI de sortie.
#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);
}Chiffrement
Document::Encrypt() protège un document avec un mot de passe utilisateur (nécessaire pour l’ouvrir) et un mot de passe propriétaire (nécessaire pour modifier les autorisations), en utilisant un algorithme sélectionné parmi l’énumération CryptoAlgorithm : RC4x40, RC4x128, AESx128 ou AESx256. IsEncrypted() indique l’état actuel et Decrypt() supprime la protection d’un document déjà ouvert.
#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");
}Annotations
Les annotations attachent des notes visibles, des formes et des balisages à une page. Chaque type d’annotation dérive de Annotation et est construit avec la cible Page et un placement Rectangle, puis ajouté à la page via Annotations() (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
Les champs AcroForm sont gérés via Aspose::Pdf::Forms::Form, accessibles via Document::Form(). Les types de champ tels que TextBoxField sont construits comme des annotations — avec un Page et un Rectangle — et enregistrés auprès de 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");
}Conseils et meilleures pratiques
- Ouvrez les fichiers d’entrée par chemin avec le constructeur
Document; appelezSave()avec un chemin de sortie explicite plutôt que d’écraser la source tant que d’autres handles y sont encore ouverts. - Appelez
Optimize()avantSave()lorsqu’un document a été fortement modifié — il supprime les ressources qui ne sont plus référencées par aucune page. - Construisez les périphériques raster (
BmpDevice,PngDevice,JpegDevice,TiffDevice) une fois par résolution et réutilisez-les sur plusieurs pages au lieu de recréer un périphérique par page. - Définissez à la fois un mot de passe utilisateur et un mot de passe propriétaire lors de l’appel de
Encrypt()— un mot de passe utilisateur vide permet à n’importe quel visualiseur d’ouvrir le fichier, tandis que le mot de passe propriétaire contrôle les changements de permissions. - Conservez les objets d’annotation et de champ (
TextAnnotation,TextBoxField, et similaires) en vie jusqu’après le retour deSave(), car le document conserve des références au contenu de la page auquel ils ont été ajoutés.
Problèmes courants
| Problème | Cause | Correction |
|---|---|---|
Save() produit un fichier avec un contenu inchangé | Des modifications ont été apportées à une copie de page ou d’annotation plutôt qu’à l’objet obtenu à partir de doc.Pages() | Modifiez directement l’objet renvoyé par Pages(), Annotations() ou Form() |
| L’image rendue est vide ou blanche | Indice de page incorrect passé à Process() | PageCollection utilise un index à partir de 1 — la page 1 est doc.Pages()[1], pas [0] |
Encrypt() produit un fichier qui s’ouvre encore sans mot de passe | Le mot de passe de l’utilisateur est vide | Fournissez une chaîne non vide comme argument userPassword |
| Le texte extrait est vide pour un PDF numérisé | La page ne contient que du contenu d’image raster, pas d’opérateurs de texte | TextAbsorber lit les opérateurs de texte ; les pages uniquement composées d’images n’en ont aucun à extraire |
Le champ ajouté avec Form::Add() n’apparaît pas sur la page | Le Rectangle du champ se trouve en dehors du MediaBox de la page | Confirmez que les coordonnées du rectangle sont à l’intérieur des limites de Page::MediaBox() |
FAQ
Le Aspose.PDF FOSS pour C++ dépend-il d’une bibliothèque PDF commerciale?
Non. Il s’agit d’une implémentation C++20 écrite de zéro, sans dépendance à aucune pile PDF commerciale, publiée sous la MIT license.
Puis-je créer un nouveau PDF à partir de zéro au lieu d’ouvrir un PDF existant?
Oui. Document possède un constructeur par défaut qui crée un document vide; appelez Pages().Add() pour ajouter des pages avant d’enregistrer.
Vers quels formats raster puis-je rendre?
BmpDevice, PngDevice, JpegDevice et TiffDevice rendent les pages individuelles en BMP, PNG, JPEG et TIFF respectivement.
Quels algorithmes de chiffrement sont pris en charge?
CryptoAlgorithm propose RC4x40, RC4x128, AESx128 et AESx256, transmis à Document::Encrypt().
Où dois-je aller ensuite?
Le guide du développeur comprend des pages dédiées à la gestion des documents et des pages, aux graphiques et formes PDF-native, aux annotations et aux formulaires interactifs, ainsi qu’aux classes de façade de haut niveau qui encapsulent les opérations courantes sur les fichiers.
API Reference Résumé
| Classe/Méthode | Description |
|---|---|
Document | Objet racine — ouvrir, créer, enregistrer et optimiser un PDF |
Document.Pages() | Retourne le PageCollection du document |
Document.Encrypt() / Decrypt() | Protéger par mot de passe ou supprimer la protection d’un document |
Document.Form() | Renvoie le conteneur AcroForm du document |
TextAbsorber | Extrait le texte brut d’un document ou d’une page |
TextFragmentAbsorber | Extrait les fragments de texte positionnés |
BmpDevice / PngDevice / JpegDevice / TiffDevice | Rendre une page au format d’image raster |
Resolution | DPI de sortie transmis à un dispositif de rendu |
CryptoAlgorithm | Sélection de l’algorithme de chiffrement : RC4 ou AES, 40–256 bits |
Permissions | Drapeaux de contrôle d’accès transmis à Encrypt() |
Annotation / AnnotationCollection | Type de base et conteneur pour les annotations de page |
TextAnnotation | Annotation de note texte |
Form | conteneur de champ AcroForm atteint via Document.Form() |
TextBoxField | Champ de formulaire texte à ligne unique/multi-ligne |