Com carregar presentacions en C++

Com carregar presentacions en C++

Aspose.Slides FOSS for C++ lets you open any .pptx fitxer, inspeccioneu el seu contingut i deseu-lo de nou a PPTX o extraieu-ne dades. Aquesta guia cobreix l’obertura d’un fitxer, la iteració de les diapositives, la lectura del text de les formes i el procés d’anar i tornar del desament.

Guia pas a pas

Pas 1: Compilar i enllaçar la biblioteca

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 .

Pas 2: Obre una presentació existent

Passeu la ruta del fitxer al Presentation constructor. El destructor s’encarrega de la neteja.

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

Les parts XML desconegudes del fitxer d’origen es conserven literalment: la biblioteca mai elimina contingut que encara no entén.


Pas 3: Inspecciona les diapositives

Itera sobre totes les diapositives i imprimeix el nombre de formes:

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

Pas 4: Llegeix el text de les formes

Itereu sobre les formes i llegiu el text de les formes que tenen un 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;
}

Pas 5: Llegeix les propietats del document

Accediu a les propietats principals del document des de 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;
}

Pas 6: Desament d’anar i tornar

Després d’inspeccionar o modificar la presentació, desa-la de nou a PPTX:

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

Desar a un camí diferent crea un fitxer nou. Desar al mateix camí sobrescriu l’original.


Problemes comuns i solucions

Fitxer no trobat o no es pot obrir

Comproveu que la ruta cap al .pptx fitxer és correcta respecte al directori de treball. Utilitzeu std::filesystem::path per a una construcció robusta de rutes:

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

Excepció: El format de fitxer no és compatible

La biblioteca admet .pptx (Office Open XML) només. Les antigues .ppt fitxers (PowerPoint binari 97-2003) no són compatibles.

Shape no té text_frame

Algunes formes (Connectors, PictureFrames, GroupShapes) no tenen un marc de text. Comproveu amb shape.has_text_frame() abans d’accedir al text.


Preguntes freqüents

La càrrega conserva tot el contingut original?

Sí. Les parts XML desconegudes es conserven literalment en el desament d’anada i tornada. La biblioteca només serialitza les parts del model del document que entén i transmet sense modificar cap XML que no reconeix.

Puc carregar un PPTX protegit per contrasenya?

Les presentacions protegides amb contrasenya (encriptades) no són compatibles en aquesta edició.

Puc extreure imatges incrustades?

Accediu a la col·lecció d’imatges: prs.images() retorna el ImageCollection. Cada imatge té un width(), height(), i binary_data() mètode per llegir les dades d’imatge en brut.

Es compatible la càrrega des d’un buffer en memòria?

Carregant des d’un std::vector<uint8_t> o std::istream no està exposat a l’API actual. Escriviu els bytes a un fitxer temporal primer, i després passeu el camí al Presentation constructor.


Vegeu també

 Català