Slik laster du presentasjoner i C++

Slik laster du presentasjoner i C++

Aspose.Slides FOSS for C++ lar deg åpne enhver .pptx‑fil, inspisere innholdet, og enten lagre den tilbake til PPTX eller hente ut data fra den. Denne guiden dekker åpning av en fil, iterering av lysbilder, lesing av formtekst og rundtur av lagringen.

Steg-for-steg Guide

Trinn 1: Bygg og koble 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 .

Trinn 2: Åpne en eksisterende presentasjon

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

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

Ukjente XML-deler i kildefilen beholdes ordrett: biblioteket fjerner aldri innhold det ennå ikke forstår.


Steg 3: Inspiser lysbilder

Iterer over alle lysbilder og skriv ut antall 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;
}

Steg 4: Les formtekst

Iterer over former og les tekst fra former som 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;
}

Trinn 5: Les dokumentegenskaper

Få tilgang til kjerne-dokumentegenskaper 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;
}

Steg 6: Rundtur‑lagring

Etter å ha inspisert eller endret presentasjonen, lagre den tilbake til PPTX:

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

Lagring til en annen sti oppretter en ny fil. Lagring til samme sti overskriver den opprinnelige.


Vanlige problemer og løsninger

Filen ble ikke funnet eller kan ikke åpnes

Sjekk at banen til .pptx‑filen er korrekt i forhold til arbeidskatalogen. Bruk std::filesystem::path for robust baneoppbygging:

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

Unntak: Filformatet støttes ikke

Biblioteket støtter kun .pptx (Office Open XML). Legacy .ppt (binære PowerPoint 97‑2003)-filer støttes ikke.

Shape har ingen text_frame

Noen former (Connectors, PictureFrames, GroupShapes) har ikke en tekstramme. Beskytt med shape.has_text_frame() før du får tilgang til tekst.


Ofte stilte spørsmål

Bevarer lasting alt originalinnhold?

Ja. Ukjente XML-deler blir bevart ordrett ved rundturlagring. Biblioteket serialiserer kun delene av dokumentmodellen det forstår, og sender gjennom all XML den ikke gjenkjenner.

Kan jeg laste inn en passordbeskyttet PPTX?

Passordbeskyttede (krypterte) presentasjoner støttes ikke i denne utgaven.

Kan jeg hente ut innebygde bilder?

Få tilgang til bildesamlingen: prs.images() returnerer ImageCollection. Hvert bilde har en width(), height() og binary_data()-metode for å lese rå bildedata.

Støttes lasting fra en minnebuffer?

Innlasting fra en std::vector<uint8_t> eller std::istream er ikke tilgjengelig i den nåværende API‑en. Skriv byte‑ene til en midlertidig fil først, og send deretter banen til Presentation‑konstruktøren.


Se også

 Norsk