Inleiding

Deze gids laat zien hoe u de documentniveau-status leest en bijwerkt in Aspose.PDF FOSS voor C++ — de delen van een PDF die het document zelf beschrijven in plaats van wat er op de pagina’s wordt getekend. Aspose.PDF FOSS voor C++ richt zich op de Aspose::Pdf::Document-klasse, die een bestaande PDF laadt vanaf een bestandspad en deze beschikbaar maakt voor zowel inhoudsbewerking als documentniveau-administratie. Documentniveau-administratie omvat het /Info-woordenboek, de XMP-metadata-stroom, de bladwijzer- (outline)-boom die in het navigatiepaneel van een viewer wordt getoond, benoemde bestemmingen die door interne koppelingen worden gebruikt, bestandsbijlagen die in de PDF zijn ingebed, en de aangepaste paginanummeringsreeksen die een document kan definiëren.

Dit bericht loopt de API-laag voor elk van deze gebieden door: DocumentInfo voor de klassieke /Info-woordenboekvelden (title, author, creator, subject, keywords), Metadata voor de XMP-metadata-stroom, Outlines en OutlineItemCollection voor de bladwijzerboom, NamedDestinationCollection voor benoemde koppelingen, EmbeddedFileCollection en FileSpecification voor bijlagen, en PageLabelCollection voor paginanummering per bereik. Elke sectie koppelt de relevante klasse aan een werkend voorbeeld dat is opgebouwd uit een geladen Document-object.

Aspose.PDF FOSS voor C++ wordt uitgebracht onder de MIT-licentie en linkt alleen met de C++-standaardbibliotheek, zodat elke hier beschreven bewerking wordt uitgevoerd zonder een propriëtaire PDF-engine of externe afhankelijkheid. De bibliotheek wordt gebouwd als een statisch target (aspose_pdf_foss) toegevoegd via CMake.


Inhoud

Het /Info-woordenboek — DocumentInfo

Document.Info() retourneert een DocumentInfo-referentie die is gekoppeld aan het /Info-woordenboek van de PDF. Het biedt getypeerde accessors voor de standaardvelden — Title(), Author(), Creator(), Subject(), Keywords(), Producer() en Trapped() — elk met een bijbehorende setter, plus een generiek Add(key, value)/Remove(key)-paar voor aangepaste sleutels en IsPredefinedKey(key) om te controleren of een sleutelnaam een van de standaardvelden is. Document.SetTitle() is een snelkoppeling die de titel direct op het document schrijft.

#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

Naast het /Info-woordenboek retourneert Document.Metadata() een Metadata-object voor de XMP-metadata-stroom van het document. Het gedraagt zich als een associatieve container van items: Add(key, value), Contains(key), ContainsKey(key), TryGetValue(key, value), Remove(key), Keys(), Values() en Count(). Aangepaste naamruimtes worden geregistreerd met RegisterNamespaceUri(prefix, namespaceUri) en heen en weer opgezocht met GetNamespaceUriByPrefix() en 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");
}

Bladwijzers en outlines

Document.Outlines() retourneert de OutlineCollection van het document — de wortel van de bladwijzerboom die in het navigatiepaneel van een viewer wordt weergegeven. De collectie ondersteunt Count(), Add(item), Clear(), Contains(item), Remove(item), Delete() en de eindpunt-accessors First() / Last(), die OutlineItemCollection-knopen teruggeven. Elke OutlineItemCollection-knoop bevat een Title(), Bold() / Italic() weergave-vlaggen, een Open()-uitvouw-status, een Destination() of Action(), en traversalmembers Next(), Prev(), HasNext(), Level() en Parent() terug naar de eigenaar-Outlines-collectie.

#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";
    }
}

Naamgegeven bestemmingen

Document.NamedDestinations() retourneert een NamedDestinationCollection, een opzoektabel die door de applicatie gedefinieerde namen naar bestemmingen binnen het document afbeeldt. Nieuwe items worden geregistreerd met Add(name, appointment), waarbij appointment een implementatie van IAppointment is — dezelfde interface die wordt gebruikt voor outline-item-bestemmingen en link-acties. Bestaande items worden verwijderd met Remove(name), geteld met Count() en opgesomd met 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";
    }
}

Ingesloten bestanden en bijlagen

Document.EmbeddedFiles() retourneert een EmbeddedFileCollection van FileSpecification-bijlagen die in de PDF zijn ingebed. Bestanden worden toegevoegd met Add(file) of Add(key, file), opgezocht via FindByName(name), verwijderd met Delete(name), DeleteByKey(key) of Delete(), en opgesomd via Count() en Keys(). Elke FileSpecification geeft zijn Name(), Description(), MIMEType() en AFRelationship() weer — de PDF-“Associated File”-relatieclassificatie.

#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";
    }
}

Paginalabels

Document.PageLabels() retourneert een PageLabelCollection voor de aangepaste paginanummeringsreeksen die een viewer weergeeft in plaats van fysieke paginanummers — bijvoorbeeld Romeinse cijfers voor een voorwoord gevolgd door Arabische cijfers voor de hoofdtekst. GetLabel(pageIndex) haalt de van toepassing zijnde PageLabel voor een pagina op; PageLabel biedt StartingValue(), NumberingStyle() (een Aspose::Pdf::NumberingStyle-waarde zoals NumeralsArabic of NumeralsRomanLowercase) en Prefix(). UpdateLabel(pageIndex, pageLabel) kent een label toe dat begint bij die pagina, RemoveLabel(pageIndex) verwijdert er een, en GetPages() geeft alle paginavolgordenummers die een aangepast label dragen.

#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");
}

Snelstart

Voeg de bibliotheek toe als een CMake-subdirectory en link tegen de aspose_pdf_foss-target:

add_subdirectory(aspose.pdf-foss-for-cpp)
target_link_libraries(your_app PRIVATE aspose_pdf_foss)

Open een document, lees en werk de /Info-metadata bij, en sla het resultaat op:

#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;
}

Ondersteunde formaten

FormaatExtensieLezenSchrijven
BMP.bmp
JPEG.jpg
TIFF.tiff
Text.txt
SVG.svg

BMP, JPEG en TIFF zijn paginarenderingsuitvoeren die door hun respectieve apparaatklassen worden geproduceerd, en tekst wordt geëxtraheerd via TextAbsorber. SVG wordt geïmporteerd als vectorinhoud via het SVG-laadpad van de bibliotheek. Geen van de hierboven behandelde documentbeheer-types zijn formaatconverters — ze lezen en schrijven alleen PDF-structuur.


Open source & licensering

Aspose.PDF FOSS voor C++ wordt gedistribueerd onder de MIT-licentie, met de volledige broncode beschikbaar op github.com/aspose-pdf-foss/Aspose.PDF-FOSS-for-Cpp. De licentie staat commercieel gebruik, wijziging en herdistributie toe zonder een aparte overeenkomst.


Aan de slag

Gerelateerde bronnen