Hvordan laste inn presentasjoner i C++

Hvordan laste inn presentasjoner i C++

Aspose.Slides FOSS for C++ lets you open any .pptx fil, inspiser innholdet, og enten lagre den tilbake til PPTX eller hente data fra den. Denne guiden dekker åpning av en fil, iterering av lysbilder, lesing av formtekst, og rundtur av lagringen.

Steg-for-steg guide

Steg 1: Bygg og lenk 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 .

Steg 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 for hvert:

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

Steg 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

Fil 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 .pptx (Office Open XML) kun. 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 innlasting alt det opprinnelige innholdet?

Ja. Ukjente XML-deler bevares ordrett ved lagring på rundtur. Biblioteket serialiserer kun de delene av dokumentmodellen det forstår, og sender gjennom all XML det 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 buffer i minnet?

Laster fra en std::vector<uint8_t> eller std::istream er ikke eksponert 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