Introduktion
Denna guide visar hur man läser och uppdaterar dokumentnivå-tillstånd i Aspose.PDF FOSS för C++ — de delar av en PDF som beskriver själva dokumentet snarare än vad som ritas på dess sidor. Aspose.PDF FOSS för C++ fokuserar på klassen Aspose::Pdf::Document, som läser in en befintlig PDF från en filsökväg och exponerar den för både innehållsredigering och dokumentnivå-bokföring. Dokumentnivå-bokföring omfattar /Info-ordlistan, XMP-metadata-strömmen, bokmärkes- (outline-)trädet som visas i en visnings navigationspanel, namngivna destinationer som används av interna länkar, filbilagor inbäddade i PDF-filen och de anpassade sidnumreringssekvenser som ett dokument kan definiera.
Detta inlägg går igenom API-ytan för var och en av dessa områden: DocumentInfo för de klassiska /Info-dictionary-fälten (title, author, creator, subject, keywords), Metadata för XMP-metadata-strömmen, Outlines och OutlineItemCollection för bokmärkesträdet, NamedDestinationCollection för namngivna länkar, EmbeddedFileCollection och FileSpecification för bilagor samt PageLabelCollection för sidnumrering per intervall. Varje avsnitt parar ihop den relevanta klassen med ett fungerande exempel byggt från ett inläst Document-objekt.
Aspose.PDF FOSS för C++ är släppt under MIT-licensen och länkas endast mot C++-standardbiblioteket, så varje operation som beskrivs här körs utan en proprietär PDF-motor eller tredjeparts-beroende. Biblioteket byggs som ett statiskt mål (aspose_pdf_foss) som läggs till via CMake.
Vad som ingår
Den /Info-ordlistan — DocumentInfo
Document.Info() returnerar en DocumentInfo-referens som är bunden till PDF-filens /Info-ordlista. Den har typade åtkomstmetoder för standardfälten — Title(), Author(), Creator(), Subject(), Keywords(), Producer() och Trapped() — var och en med motsvarande setter, samt ett generiskt Add(key, value)/Remove(key)-par för anpassade nycklar och IsPredefinedKey(key) för att kontrollera om ett nyckelnamn är ett av standardfälten. Document.SetTitle() är en genväg som skriver titeln direkt på dokumentet.
#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 — Metadata
Utöver /Info-ordlistan returnerar Document.Metadata() ett Metadata-objekt över dokumentets XMP-metadata-ström. Det beter sig som en associativ behållare av poster: Add(key, value), Contains(key), ContainsKey(key), TryGetValue(key, value), Remove(key), Keys(), Values() och Count(). Anpassade namnrymder registreras med RegisterNamespaceUri(prefix, namespaceUri) och löses upp fram och tillbaka med GetNamespaceUriByPrefix() och 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");
}
Bokmärken och konturer
Document.Outlines() returnerar dokumentets OutlineCollection — roten till bokmärkesträdet som visas i en visnings navigationspanel. Samlingen stöder Count(), Add(item), Clear(), Contains(item), Remove(item), Delete(), och endpoint-åtkomstfunktionerna First() / Last(), som returnerar OutlineItemCollection-noder. Varje OutlineItemCollection-nod bär ett Title(), Bold() / Italic()-display-flagga, ett Open()-expanderat tillstånd, ett Destination() eller Action(), och traverseringsmedlemmarna Next(), Prev(), HasNext(), Level() och Parent() tillbaka till den ägande Outlines-samlingen.
#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";
}
}
Namngivna destinationer
Document.NamedDestinations() returnerar en NamedDestinationCollection, en uppslagstabell som mappar applikationsdefinierade namn till destinationer i dokumentet. Nya poster registreras med Add(name, appointment), där appointment är en IAppointment-implementation — samma gränssnitt som används av outline-item-destinationer och länkhändelser. Befintliga poster tas bort med Remove(name), räknas med Count(), och enumereras med 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";
}
}
Inbäddade filer och bilagor
Document.EmbeddedFiles() returnerar en EmbeddedFileCollection av FileSpecification-bilagor som finns i PDF-filen. Filer läggs till med Add(file) eller Add(key, file), söks upp med FindByName(name), tas bort med Delete(name), DeleteByKey(key) eller Delete(), och enumereras via Count() och Keys(). Varje FileSpecification rapporterar sitt Name(), Description(), MIMEType() och AFRelationship() — PDF-“Associated File”-relationsklassificeringen.
#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";
}
}
Sidetiketter
Document.PageLabels() returnerar en PageLabelCollection för de anpassade sidnumreringssekvenser som en visare visar i stället för fysiska sidnummer — till exempel romerska siffror för en förord följt av arabiska siffror för huvuddelen. GetLabel(pageIndex) hämtar den PageLabel som gäller för en sida; PageLabel exponerar StartingValue(), NumberingStyle() (ett Aspose::Pdf::NumberingStyle-värde såsom NumeralsArabic eller NumeralsRomanLowercase), och Prefix(). UpdateLabel(pageIndex, pageLabel) tilldelar en etikett som börjar på den sidan, RemoveLabel(pageIndex) tar bort en, och GetPages() listar varje sidindex som har en anpassad etikett.
#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");
}
Snabbstart
Lägg till biblioteket som en CMake-undermapp och länka mot målet aspose_pdf_foss:
add_subdirectory(aspose.pdf-foss-for-cpp)
target_link_libraries(your_app PRIVATE aspose_pdf_foss)
Öppna ett dokument, läs och uppdatera dess /Info-metadata, och spara resultatet:
#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;
}
Stödda format
| Format | Filändelse | Läs | Skriv |
|---|---|---|---|
| BMP | .bmp | — | ✓ |
| JPEG | .jpg | — | ✓ |
| TIFF | .tiff | — | ✓ |
| Text | .txt | — | ✓ |
| SVG | .svg | ✓ | — |
BMP, JPEG och TIFF är sidrenderande utdata som produceras av deras respektive enhetsklasser, och text extraheras via TextAbsorber. SVG importeras som vektorinnehåll via bibliotekets SVG-laddningsväg. Ingen av de dokumenthanteringstyper som behandlats ovan är formatkonverterare — de läser och skriver endast PDF-strukturen.
Öppen källkod & licensiering
Aspose.PDF FOSS för C++ distribueras under MIT-licensen, med full källkod tillgänglig på github.com/aspose-pdf-foss/Aspose.PDF-FOSS-for-Cpp. Licensen tillåter kommersiell användning, modifiering och vidaredistribution utan ett separat avtal.