Úvod

Tento průvodce ukazuje, jak číst a aktualizovat stav na úrovni dokumentu v Aspose.PDF FOSS pro C++ — části PDF, které popisují samotný dokument, nikoli to, co je vykresleno na jeho stránkách. Aspose.PDF FOSS pro C++ se soustředí na třídu Aspose::Pdf::Document, která načte existující PDF ze souborové cesty a zpřístupní jej jak pro úpravu obsahu, tak pro účetnictví na úrovni dokumentu. Účetnictví na úrovni dokumentu zahrnuje slovník /Info, XMP metadata stream, strom záložek (outline) zobrazený v navigačním panelu prohlížeče, pojmenované destinace používané interními odkazy, souborové přílohy vložené do PDF a vlastní sekvence číslování stránek, které může dokument definovat.

Tento příspěvek prochází rozhraní API pro každou z těchto oblastí: DocumentInfo pro klasické pole slovníku /Info (title, author, creator, subject, keywords), Metadata pro XMP metadata stream, Outlines a OutlineItemCollection pro strom záložek, NamedDestinationCollection pro pojmenované odkazy, EmbeddedFileCollection a FileSpecification pro přílohy a PageLabelCollection pro číslování stránek po rozsazích. Každá sekce spojuje příslušnou třídu s funkčním příkladem vytvořeným z načteného objektu Document.

Aspose.PDF FOSS pro C++ je vydáno pod licencí MIT a odkazuje pouze na standardní knihovnu C++, takže každá zde popsaná operace běží bez proprietárního PDF engine nebo externí závislosti. Knihovna se sestavuje jako statický cíl (aspose_pdf_foss) přidaný pomocí CMake.


Co je zahrnuto

Slovník /InfoDocumentInfo

Document.Info() vrací referenci typu DocumentInfo navázanou na slovník /Info PDF. Má typizované přístupy k standardním polím — Title(), Author(), Creator(), Subject(), Keywords(), Producer() a Trapped() — každé s odpovídajícím setterem, plus obecný pár Add(key, value) / Remove(key) pro vlastní klíče a IsPredefinedKey(key) pro kontrolu, zda je název klíče jedním ze standardních polí. Document.SetTitle() je zkratka, která zapíše název přímo do dokumentu.

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

Metadata XMP — Metadata

Mimo slovník /Info vrací Document.Metadata() objekt Metadata nad XMP proudem metadat dokumentu. Chová se jako asociativní kontejner položek: Add(key, value), Contains(key), ContainsKey(key), TryGetValue(key, value), Remove(key), Keys(), Values() a Count(). Vlastní jmenné prostory jsou registrovány pomocí RegisterNamespaceUri(prefix, namespaceUri) a vzájemně řešeny pomocí GetNamespaceUriByPrefix() a 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");
}

Záložky a osnovy

Document.Outlines() vrací OutlineCollection dokumentu — kořen stromu záložek zobrazeného v navigačním panelu prohlížeče. Kolekce podporuje Count(), Add(item), Clear(), Contains(item), Remove(item), Delete() a koncové přístupy First() / Last(), které vrací uzly OutlineItemCollection. Každý uzel OutlineItemCollection nese Title(), příznaky zobrazení Bold() / Italic(), stav rozbalení Open(), Destination() nebo Action(), a členy procházení Next(), Prev(), HasNext(), Level() a Parent() zpět k vlastní kolekci 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";
    }
}

Pojmenované destinace

Document.NamedDestinations() vrací NamedDestinationCollection, vyhledávací tabulku mapující názvy definované aplikací na cíle uvnitř dokumentu. Nové položky se registrují pomocí Add(name, appointment), kde appointment je implementace IAppointment — stejného rozhraní používaného cíli položek osnovy a akcemi odkazů. Existující položky se odstraňují pomocí Remove(name), počítají se pomocí Count() a enumerují pomocí 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";
    }
}

Vložené soubory a přílohy

Document.EmbeddedFiles() vrací EmbeddedFileCollection obsahující přílohy FileSpecification umístěné uvnitř PDF. Soubory se přidávají pomocí Add(file) nebo Add(key, file), vyhledávají se pomocí FindByName(name), odstraňují se pomocí Delete(name), DeleteByKey(key) nebo Delete(), a enumerují se pomocí Count() a Keys(). Každý FileSpecification uvádí své Name(), Description(), MIMEType() a AFRelationship() — klasifikaci vztahu 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";
    }
}

Číslování stránek

Document.PageLabels() vrací PageLabelCollection pro vlastní sekvence číslování stránek, které prohlížeč zobrazuje místo fyzických čísel stránek — například římské číslice pro předmluvu následované arabskými číslicemi pro hlavní část. GetLabel(pageIndex) získá PageLabel platný pro stránku; PageLabel nabízí StartingValue(), NumberingStyle() (hodnota Aspose::Pdf::NumberingStyle, např. NumeralsArabic nebo NumeralsRomanLowercase) a Prefix(). UpdateLabel(pageIndex, pageLabel) přiřadí štítek počínaje touto stránkou, RemoveLabel(pageIndex) jej odstraní a GetPages() vypíše všechny indexy stránek, které mají vlastní štítek.

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

Rychlý start

Přidejte knihovnu jako podadresář CMake a propojte ji s cílem aspose_pdf_foss:

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

Otevřete dokument, přečtěte a aktualizujte jeho metadata /Info a uložte výsledek:

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

Podporované formáty

FormátRozšířeníČístZapsat
BMP.bmp
JPEG.jpg
TIFF.tiff
Text.txt
SVG.svg

BMP, JPEG a TIFF jsou výstupy pro vykreslování stránek generované jejich odpovídajícími třídami zařízení a text je získáván pomocí TextAbsorber. SVG se importuje jako vektorový obsah přes načítací cestu SVG knihovny. Žádný z výše uvedených typů správy dokumentů není konvertorem formátů — pouze čtou a zapisují strukturu PDF.


Open Source a licencování

Aspose.PDF FOSS pro C++ je distribuován pod licencí MIT, s plným zdrojovým kódem dostupným na github.com/aspose-pdf-foss/Aspose.PDF-FOSS-for-Cpp. Licence povoluje komerční použití, úpravy a redistribuci bez samostatné dohody.


Začínáme

Související zdroje