Εισαγωγή
Αυτός ο οδηγός δείχνει πώς να διαβάζετε και να ενημερώνετε την κατάσταση επιπέδου εγγράφου στο Aspose.PDF FOSS για C++ — τα τμήματα ενός PDF που περιγράφουν το ίδιο το έγγραφο αντί για ό,τι σχεδιάζεται στις σελίδες του. Το Aspose.PDF FOSS για C++ επικεντρώνεται στην κλάση Aspose::Pdf::Document, η οποία φορτώνει ένα υπάρχον PDF από διαδρομή αρχείου και το εκθέτει τόσο για επεξεργασία περιεχομένου όσο και για λογιστική επιπέδου εγγράφου. Η λογιστική επιπέδου εγγράφου καλύπτει το λεξικό /Info, τη ροή μεταδεδομένων XMP, το δέντρο σελιδοδεικτών (outline) που εμφανίζεται στον πίνακα πλοήγησης ενός προβολέα, τις ονομαστικές προορισμούς που χρησιμοποιούνται από εσωτερικούς συνδέσμους, τα ενσωματωμένα συνημμένα αρχεία στο PDF και τις προσαρμοσμένες ακολουθίες αρίθμησης σελίδων που μπορεί να ορίσει ένα έγγραφο.
Αυτή η ανάρτηση περιηγείται στην επιφάνεια API για καθένα από αυτά τα πεδία: DocumentInfo για τα κλασικά πεδία λεξικού /Info (title, author, creator, subject, keywords), Metadata για τη ροή μεταδεδομένων XMP, Outlines και OutlineItemCollection για το δέντρο σελιδοδεικτών, NamedDestinationCollection για ονομαστικούς συνδέσμους, EmbeddedFileCollection και FileSpecification για συνημμένα, και PageLabelCollection για αρίθμηση σελίδων ανά εύρος. Κάθε ενότητα συνδυάζει την αντίστοιχη κλάση με ένα λειτουργικό παράδειγμα που δημιουργείται από ένα φορτωμένο αντικείμενο Document.
Aspose.PDF FOSS για C++ κυκλοφορεί υπό την άδεια MIT και συνδέεται μόνο με τη βιβλιοθήκη πρότυπου C++, έτσι κάθε λειτουργία που περιγράφεται εδώ εκτελείται χωρίς ιδιόκτητη μηχανή PDF ή εξωτερική εξάρτηση. Η βιβλιοθήκη κατασκευάζεται ως στατικός στόχος (aspose_pdf_foss) που προστίθεται μέσω CMake.
Τι Συμπεριλαμβάνεται
Το λεξικό /Info — DocumentInfo
Document.Info() επιστρέφει μια αναφορά DocumentInfo δεσμευμένη στο λεξικό /Info του PDF. Διαθέτει τυποποιημένους πρόσβαση για τα τυπικά πεδία — Title(), Author(), Creator(), Subject(), Keywords(), Producer(), και Trapped() — το καθένα με αντίστοιχο setter, καθώς και ένα γενικό ζεύγος Add(key, value) / Remove(key) για προσαρμοσμένα κλειδιά και IsPredefinedKey(key) για να ελέγξει αν ένα όνομα κλειδιού είναι ένα από τα τυπικά πεδία. Το Document.SetTitle() είναι μια συντόμευση που γράφει τον τίτλο απευθείας στο έγγραφο.
#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");
}
Μεταδεδομένα XMP — Metadata
Πέρα από το λεξικό /Info, το Document.Metadata() επιστρέφει ένα αντικείμενο Metadata πάνω στη ροή μεταδεδομένων XMP του εγγράφου. Συμπεριφέρεται ως ένα συσχετιστικό δοχείο καταχωρίσεων: Add(key, value), Contains(key), ContainsKey(key), TryGetValue(key, value), Remove(key), Keys(), Values(), και Count(). Προσαρμοσμένοι χώροι ονομάτων καταχωρούνται με RegisterNamespaceUri(prefix, namespaceUri) και επιλύονται αμφίπλευρα με GetNamespaceUriByPrefix() και 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");
}
Σελιδοδείκτες και Περιγράμματα
Document.Outlines() επιστρέφει την OutlineCollection του εγγράφου — τη ρίζα του δέντρου σελιδοδεικτών που εμφανίζεται στον πίνακα πλοήγησης ενός προβολέα. Η συλλογή υποστηρίζει Count(), Add(item), Clear(), Contains(item), Remove(item), Delete(), και τους προσβάτες τέλους First() / Last(), οι οποίοι επιστρέφουν κόμβους OutlineItemCollection. Κάθε κόμβος OutlineItemCollection μεταφέρει μια Title(), σημαίες εμφάνισης Bold() / Italic(), κατάσταση επέκτασης Open(), ένα Destination() ή Action(), και μέλη περιήγησης Next(), Prev(), HasNext(), Level(), και Parent() πίσω στη συλλογή Outlines που το κατέχει.
#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";
}
}
Ονομαστικοί Προορισμοί
Document.NamedDestinations() επιστρέφει μια NamedDestinationCollection, έναν πίνακα αναζήτησης που αντιστοιχίζει ονόματα που ορίζονται από την εφαρμογή σε προορισμούς εντός του εγγράφου. Νέα στοιχεία καταχωρούνται με Add(name, appointment), όπου το appointment είναι μια υλοποίηση του IAppointment — η ίδια διεπαφή που χρησιμοποιείται από προορισμούς στοιχείων περιγράμματος και ενέργειες συνδέσμου. Τα υπάρχοντα στοιχεία αφαιρούνται με Remove(name), μετρώνται με Count(), και απαριθμούνται με 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";
}
}
Ενσωματωμένα Αρχεία και Συνημμένα
Document.EmbeddedFiles() επιστρέφει μια EmbeddedFileCollection από συνημμένα FileSpecification που μεταφέρονται μέσα στο PDF. Τα αρχεία προστίθενται με Add(file) ή Add(key, file), αναζητούνται με FindByName(name), αφαιρούνται με Delete(name), DeleteByKey(key), ή Delete(), και απαριθμούνται μέσω Count() και Keys(). Κάθε FileSpecification αναφέρει το Name(), Description(), MIMEType(), και AFRelationship() — την ταξινόμηση σχέσης PDF «Associated File».
#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";
}
}
Ετικέτες Σελίδων
Document.PageLabels() επιστρέφει μια PageLabelCollection για τις προσαρμοσμένες ακολουθίες αρίθμησης σελίδων που ένας προβολέας εμφανίζει αντί για τους φυσικούς αριθμούς σελίδων — π.χ., ρωμαϊκούς αριθμούς για ένα πρόπρεμπο και αραβικούς αριθμούς για το κυρίως κείμενο. GetLabel(pageIndex) ανακτά το PageLabel που ισχύει για μια σελίδα· το PageLabel εκθέτει StartingValue(), NumberingStyle() (μια τιμή Aspose::Pdf::NumberingStyle όπως NumeralsArabic ή NumeralsRomanLowercase), και Prefix(). UpdateLabel(pageIndex, pageLabel) ορίζει μια ετικέτα που ξεκινά σε αυτή τη σελίδα, RemoveLabel(pageIndex) τη διαγράφει, και GetPages() απαριθμεί κάθε δείκτη σελίδας που φέρει προσαρμοσμένη ετικέτα.
#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");
}
Γρήγορη Εκκίνηση
Προσθέστε τη βιβλιοθήκη ως υποκατάλογο CMake και συνδέστε την με τον προορισμό aspose_pdf_foss:
add_subdirectory(aspose.pdf-foss-for-cpp)
target_link_libraries(your_app PRIVATE aspose_pdf_foss)
Ανοίξτε ένα έγγραφο, διαβάστε και ενημερώστε τα μεταδεδομένα /Info του, και αποθηκεύστε το αποτέλεσμα:
#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;
}
Υποστηριζόμενες Μορφές
| Μορφή | Επέκταση | Ανάγνωση | Εγγραφή |
|---|---|---|---|
| BMP | .bmp | — | ✓ |
| JPEG | .jpg | — | ✓ |
| TIFF | .tiff | — | ✓ |
| Text | .txt | — | ✓ |
| SVG | .svg | ✓ | — |
BMP, JPEG και TIFF είναι έξοδοι απόδοσης σελίδας που παράγονται από τις αντίστοιχες κλάσεις συσκευών, και το κείμενο εξάγεται μέσω του TextAbsorber. SVG εισάγεται ως διανυσματικό περιεχόμενο μέσω της διαδρομής φόρτωσης SVG της βιβλιοθήκης. Καμία από τους τύπους διαχείρισης εγγράφων που καλύπτονται παραπάνω δεν είναι μετατροπείς μορφής — διαβάζουν και γράφουν μόνο τη δομή του PDF.
Ανοιχτός Κώδικας & Άδειες
Aspose.PDF FOSS για C++ διανέμεται υπό την άδεια MIT, με τον πλήρη κώδικα διαθέσιμο στο github.com/aspose-pdf-foss/Aspose.PDF-FOSS-for-Cpp. Η άδεια επιτρέπει εμπορική χρήση, τροποποίηση και αναδιανομή χωρίς ξεχωριστή συμφωνία.