Introduction
Ce guide montre comment lire et mettre à jour l’état au niveau du document dans Aspose.PDF FOSS pour C++ — les parties d’un PDF qui décrivent le document lui-même plutôt que ce qui est dessiné sur ses pages. Aspose.PDF FOSS pour C++ se concentre sur la classe Aspose::Pdf::Document, qui charge un PDF existant depuis un chemin de fichier et le rend accessible à la fois pour l’édition de contenu et la comptabilité au niveau du document. La comptabilité au niveau du document couvre le dictionnaire /Info, le flux de métadonnées XMP, l’arbre de signets (contour) affiché dans le panneau de navigation d’un visualiseur, les destinations nommées utilisées par les liens internes, les pièces jointes de fichiers incorporées dans le PDF, et les séquences de numérotation de pages personnalisées qu’un document peut définir.
Cet article parcourt la surface API pour chacune de ces zones : DocumentInfo pour les champs classiques du dictionnaire /Info (title, author, creator, subject, keywords), Metadata pour le flux de métadonnées XMP, Outlines et OutlineItemCollection pour l’arborescence des signets, NamedDestinationCollection pour les liens nommés, EmbeddedFileCollection et FileSpecification pour les pièces jointes, et PageLabelCollection pour la numérotation des pages par plages. Chaque section associe la classe pertinente à un exemple fonctionnel construit à partir d’un objet Document chargé.
Aspose.PDF FOSS pour C++ est publié sous licence MIT et ne dépend que de la bibliothèque standard C++, de sorte que chaque opération décrite ici s’exécute sans moteur PDF propriétaire ni dépendance tierce. La bibliothèque se compile comme cible statique (aspose_pdf_foss) ajoutée via CMake.
Ce qui est inclus
Le dictionnaire /Info — DocumentInfo
Document.Info() renvoie une référence DocumentInfo liée au dictionnaire /Info du PDF. Elle possède des accesseurs typés pour les champs standards — Title(), Author(), Creator(), Subject(), Keywords(), Producer() et Trapped() — chacun avec un mutateur correspondant, ainsi qu’une paire générique Add(key, value) / Remove(key) pour les clés personnalisées et IsPredefinedKey(key) pour vérifier si un nom de clé fait partie des champs standards. Document.SetTitle() est un raccourci qui écrit le titre directement dans le document.
#include <aspose/pdf/document.hpp>
#include <aspose/pdf/document_info.hpp>
#include <iostream>
int main() {
Aspose::Pdf::Document doc("input.pdf");
auto& info = doc.Info();
std::cout << "Title: " << info.Title() << "\n";
std::cout << "Author: " << info.Author() << "\n";
info.Author("Demo author");
info.Creator("Aspose.PDF FOSS C++");
info.Add("Generated-By", "document-management sample");
doc.Save("output.pdf");
}
Métadonnées XMP — Metadata
Au-delà du dictionnaire /Info, Document.Metadata() renvoie un objet Metadata sur le flux de métadonnées XMP du document. Il se comporte comme un conteneur associatif d’entrées : Add(key, value), Contains(key), ContainsKey(key), TryGetValue(key, value), Remove(key), Keys(), Values() et Count(). Les espaces de noms personnalisés sont enregistrés avec RegisterNamespaceUri(prefix, namespaceUri) et résolus dans les deux sens avec GetNamespaceUriByPrefix() et GetPrefixByNamespaceUri().
#include <aspose/pdf/document.hpp>
#include <aspose/pdf/metadata.hpp>
#include <iostream>
int main() {
Aspose::Pdf::Document doc("input.pdf");
auto& metadata = doc.Metadata();
metadata.RegisterNamespaceUri("myapp", "http://example.com/myapp/1.0/");
metadata.Add("myapp:BatchId", "2026-07-run-42");
std::cout << "XMP entries: " << metadata.Count() << "\n";
doc.Save("output.pdf");
}
Signets et contours
Document.Outlines() renvoie la OutlineCollection du document — la racine de l’arborescence des signets affichée dans le panneau de navigation d’un visualiseur. La collection prend en charge Count(), Add(item), Clear(), Contains(item), Remove(item), Delete(), ainsi que les accesseurs de point d’extrémité First() / Last(), qui renvoient des nœuds OutlineItemCollection. Chaque nœud OutlineItemCollection possède un Title(), des indicateurs d’affichage Bold() / Italic(), un état d’expansion Open(), un Destination() ou Action(), et des membres de traversée Next(), Prev(), HasNext(), Level(), et Parent() renvoyant à la collection Outlines propriétaire.
#include <aspose/pdf/document.hpp>
#include <aspose/pdf/outlines.hpp>
#include <iostream>
int main() {
Aspose::Pdf::Document doc("input.pdf");
auto& outlines = doc.Outlines();
std::cout << "Top-level bookmarks: " << outlines.Count() << "\n";
if (outlines.Count() > 0) {
auto& first = outlines.First();
std::cout << "First bookmark: " << first.Title()
<< " (level " << first.Level() << ")\n";
}
}
Destinations nommées
Document.NamedDestinations() renvoie une NamedDestinationCollection, une table de correspondance associant des noms définis par l’application à des destinations à l’intérieur du document. Les nouvelles entrées sont enregistrées avec Add(name, appointment), où appointment est une implémentation de IAppointment — la même interface utilisée par les destinations d’éléments de plan et les actions de lien. Les entrées existantes sont supprimées avec Remove(name), comptées avec Count(), et énumérées avec Names().
#include <aspose/pdf/document.hpp>
#include <aspose/pdf/named_destination_collection.hpp>
#include <iostream>
int main() {
Aspose::Pdf::Document doc("input.pdf");
auto& destinations = doc.NamedDestinations();
std::cout << "Named destinations: " << destinations.Count() << "\n";
for (const auto& name : destinations.Names()) {
std::cout << " " << name << "\n";
}
}
Fichiers incorporés et pièces jointes
Document.EmbeddedFiles() renvoie une EmbeddedFileCollection d’attachements FileSpecification contenus dans le PDF. Les fichiers sont ajoutés avec Add(file) ou Add(key, file), recherchés via FindByName(name), supprimés avec Delete(name), DeleteByKey(key) ou Delete(), et énumérés à l’aide de Count() et Keys(). Chaque FileSpecification indique son Name(), Description(), MIMEType() et AFRelationship() — la classification de relation « Associated File » du PDF.
#include <aspose/pdf/document.hpp>
#include <aspose/pdf/file_specification.hpp>
#include <iostream>
int main() {
Aspose::Pdf::Document doc("input.pdf");
auto& files = doc.EmbeddedFiles();
std::cout << "Embedded files: " << files.Count() << "\n";
for (const auto& key : files.Keys()) {
auto spec = files.FindByName(key);
std::cout << " " << spec.Name() << " (" << spec.MIMEType() << ")\n";
}
}
Étiquettes de page
Document.PageLabels() renvoie une PageLabelCollection pour les séquences de numérotation de pages personnalisées qu’un visualiseur affiche à la place des numéros de pages physiques — par exemple, des chiffres romains pour une préface suivis de chiffres arabes pour le corps du texte. GetLabel(pageIndex) récupère le PageLabel en vigueur pour une page ; PageLabel expose StartingValue(), NumberingStyle() (une valeur Aspose::Pdf::NumberingStyle telle que NumeralsArabic ou NumeralsRomanLowercase), et Prefix(). UpdateLabel(pageIndex, pageLabel) assigne une étiquette à partir de cette page, RemoveLabel(pageIndex) en supprime une, et GetPages() liste chaque indice de page portant une étiquette personnalisée.
#include <aspose/pdf/document.hpp>
#include <aspose/pdf/page_label.hpp>
#include <aspose/pdf/page_label_collection.hpp>
#include <iostream>
int main() {
Aspose::Pdf::Document doc("input.pdf");
auto& labels = doc.PageLabels();
for (int pageIndex : labels.GetPages()) {
auto label = labels.GetLabel(pageIndex);
std::cout << "Page " << pageIndex << " prefix: " << label.Prefix()
<< ", starts at " << label.StartingValue() << "\n";
}
auto preface = labels.GetLabel(1);
preface.NumberingStyle(Aspose::Pdf::NumberingStyle::NumeralsRomanLowercase);
preface.StartingValue(1);
labels.UpdateLabel(1, preface);
doc.Save("output.pdf");
}
Démarrage rapide
Ajoutez la bibliothèque en tant que sous-répertoire CMake et liez-la à la cible aspose_pdf_foss :
add_subdirectory(aspose.pdf-foss-for-cpp)
target_link_libraries(your_app PRIVATE aspose_pdf_foss)
Ouvrez un document, lisez et mettez à jour ses métadonnées /Info, puis enregistrez le résultat :
#include <aspose/pdf/document.hpp>
#include <iostream>
int main() {
Aspose::Pdf::Document doc("input.pdf");
auto& info = doc.Info();
std::cout << "Title: " << info.Title() << "\n";
std::cout << "Author: " << info.Author() << "\n";
doc.SetTitle("Updated Report Title");
info.Author("Report Generator");
info.Add("Generated-By", "Aspose.PDF FOSS for C++");
doc.Save("output.pdf");
return 0;
}
Formats pris en charge
| Format | Extension | Lire | Écrire |
|---|---|---|---|
| BMP | .bmp | — | ✓ |
| JPEG | .jpg | — | ✓ |
| TIFF | .tiff | — | ✓ |
| Text | .txt | — | ✓ |
| SVG | .svg | ✓ | — |
BMP, JPEG et TIFF sont des sorties de rendu de page produites par leurs classes d’appareil respectives, et le texte est extrait via TextAbsorber. SVG est importé en tant que contenu vectoriel via le chemin de chargement SVG de la bibliothèque. Aucun des types de gestion de documents décrits ci-dessus n’est un convertisseur de format — ils ne lisent et n’écrivent que la structure PDF uniquement.
Open source & licences
Aspose.PDF FOSS pour C++ est distribué sous licence MIT, le code source complet étant disponible à github.com/aspose-pdf-foss/Aspose.PDF-FOSS-for-Cpp. La licence autorise l’utilisation commerciale, la modification et la redistribution sans accord séparé.