Sådan indlæses præsentationer i C++

Sådan indlæses præsentationer i C++

Aspose.Slides FOSS for C++ lets you open any .pptx fil, inspicér dens indhold, og gem den enten tilbage som PPTX eller udtræk data fra den. Denne vejledning dækker åbning af en fil, iteration over slides, læsning af formtekst og round‑tripping af gemningen.

Trin-for-trin guide

Trin 1: Byg og link biblioteket

git clone https://github.com/aspose-slides-foss/Aspose.Slides-FOSS-for-Cpp.git
cd Aspose.Slides-FOSS-for-Cpp && mkdir build && cd build
cmake .. && cmake --build .

Trin 2: Åbn en eksisterende præsentation

Send filstien til Presentation konstruktøren. Destruktøren håndterer oprydning.

#include <Aspose/Slides/Foss/presentation.h>
#include <iostream>

int main() {
    namespace asf = Aspose::Slides::Foss;

    asf::Presentation prs("input.pptx");
    std::cout << "Slide count: " << prs.slides().size() << "\n";
    prs.save("output.pptx", asf::SaveFormat::PPTX);
    return 0;
}

Ukendte XML‑dele i kildefilen bevares ordret: biblioteket fjerner aldrig indhold, det endnu ikke forstår.


Trin 3: Inspicer slides

Iterer over alle slides og udskriv deres antal former:

#include <Aspose/Slides/Foss/presentation.h>
#include <iostream>

int main() {
    namespace asf = Aspose::Slides::Foss;

    asf::Presentation prs("deck.pptx");
    for (size_t i = 0; i < prs.slides().size(); ++i) {
        auto& slide = prs.slides()[i];
        std::cout << "Slide " << i << ": "
                  << slide.shapes().size() << " shapes\n";
    }
    return 0;
}

Trin 4: Læs formtekst

Iterer over former og læs tekst fra former, der har en TextFrame:

#include <Aspose/Slides/Foss/presentation.h>
#include <iostream>

int main() {
    namespace asf = Aspose::Slides::Foss;

    asf::Presentation prs("deck.pptx");
    for (size_t i = 0; i < prs.slides().size(); ++i) {
        auto& slide = prs.slides()[i];
        for (size_t j = 0; j < slide.shapes().size(); ++j) {
            auto& shape = slide.shapes()[j];
            if (shape.has_text_frame()) {
                auto text = shape.text_frame()->text();
                if (!text.empty()) {
                    std::cout << "  Shape text: " << text << "\n";
                }
            }
        }
    }
    return 0;
}

Trin 5: Læs dokumentegenskaber

Få adgang til kerne‑dokumentegenskaber fra prs.document_properties():

#include <Aspose/Slides/Foss/presentation.h>
#include <iostream>

int main() {
    namespace asf = Aspose::Slides::Foss;

    asf::Presentation prs("deck.pptx");
    auto& props = prs.document_properties();
    std::cout << "Title:   " << props.title() << "\n";
    std::cout << "Author:  " << props.author() << "\n";
    std::cout << "Subject: " << props.subject() << "\n";
    return 0;
}

Trin 6: Round‑Trip‑gemning

Efter at have inspiceret eller modificeret præsentationen, gem den tilbage til PPTX:

prs.save("output.pptx", asf::SaveFormat::PPTX);

Gemning til en anden sti opretter en ny fil. Gemning til den samme sti overskriver den oprindelige.


Almindelige problemer og løsninger

Fil ikke fundet eller kan ikke åbnes

Kontroller at stien til .pptx filen er korrekt i forhold til arbejdsmappen. Brug std::filesystem::path til robust sti‑konstruktion:

#include <filesystem>
auto path = std::filesystem::path(__FILE__).parent_path() / "assets" / "deck.pptx";
asf::Presentation prs(path.string());

Undtagelse: Filformat understøttes ikke

Biblioteket understøtter .pptx (Office Open XML) kun. Ældre .ppt (binære PowerPoint 97-2003) filer understøttes ikke.

Form har ingen text_frame

Nogle former (Connectors, PictureFrames, GroupShapes) har ingen tekstramme. Beskyt med shape.has_text_frame() før du får adgang til tekst.


Ofte stillede spørgsmål

Bevarer indlæsning alt det originale indhold?

Ja. Ukendte XML‑dele bevares ordret ved gemning i en runde‑tur. Biblioteket serialiserer kun de dele af dokumentmodellen, det forstår, og videresender al XML, det ikke genkender.

Kan jeg indlæse en adgangskodebeskyttet PPTX?

Adgangskodebeskyttede (krypterede) præsentationer understøttes ikke i denne udgave.

Kan jeg udtrække indlejrede billeder?

Få adgang til billedsamlingen: prs.images() returnerer ImageCollection. Hvert billede har en width(), height(), og binary_data() metode til at læse de rå billeddata.

Understøttes indlæsning fra en buffer i hukommelsen?

Indlæsning fra en std::vector<uint8_t> eller std::istream er ikke eksponeret i den aktuelle API. Skriv bytes til en midlertidig fil først, og send derefter stien til den Presentation konstruktør.


Se også

 Dansk