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

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

Aspose.Slides FOSS for C++ giver dig mulighed for at åbne enhver .pptx-fil, inspicere dens indhold og enten gemme den tilbage som PPTX eller udtrække data fra den. Denne vejledning dækker åbning af en fil, gennemløb af slides, læsning af formtekster 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

Pass filstien til Presentation-konstruktøren. Destruktoren 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, som det endnu ikke forstår.


Trin 3: Inspicér dias

Iterer over alle slides og udskriv deres formantal:

#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: Rundtur‑gem

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

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

Gemmer du til en anden sti, oprettes en ny fil. Gemmer du til den samme sti, overskrives den oprindelige.


Almindelige problemer og rettelser

Filen blev ikke fundet eller kan ikke åbnes

Kontroller, at stien til .pptx‑filen er korrekt i forhold til arbejdsbiblioteket. Brug std::filesystem::path til robust stiopbygning:

#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 kun .pptx (Office Open XML). Ældre .ppt (binære PowerPoint 97-2003) filer understøttes ikke.

Shape 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 teksten.


Ofte stillede spørgsmål

Bevarer indlæsning alt det oprindelige indhold?

Ja. Ukendte XML-dele bevares ordret ved round‑trip‑gemning. Biblioteket serialiserer kun de dele af dokumentmodellen, det forstår, og videresender enhver 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.

Er indlæsning fra en in-memory buffer understøttet?

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 Presentation‑konstruktøren.


Se også

 Dansk