Com carregar presentacions en C++

Com carregar presentacions en C++

Aspose.Slides FOSS per a C++ us permet obrir qualsevol fitxer .pptx, inspeccionar-ne el contingut i, o bé, desar-lo de nou a PPTX o extreure’n 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 de desar i tornar a carregar.

Guia pas a pas

Pas 1: Compila i enllaça 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 constructor Presentation. 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 al fitxer font 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: Llegir el text de la forma

Itera sobre les formes i llegeix 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: Llegir les propietats del document

Accediu a les propietats bàsiques 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: Desar en viatge d’anada i tornada

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

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

Desar a una ruta diferent crea un fitxer nou. Desar a la mateixa ruta sobrescriu l’original.


Problemes comuns i solucions

Fitxer no trobat o no es pot obrir

Comproveu que el camí cap al fitxer .pptx sigui correcte respecte al directori de treball. Utilitzeu std::filesystem::path per a una construcció de camins robusta:

#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 només admet .pptx (Office Open XML). Els fitxers obsolets .ppt (PowerPoint binari 97-2003) no són compatibles.

Shape no té text_frame

Algunes formes (Connectors, PictureFrames, GroupShapes) no tenen un marc de text. Protegiu 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 de viatge d’anada i tornada. La biblioteca només serialitza les parts del model de document que entén i passa a través de qualsevol XML que no reconeix.

Puc carregar un PPTX protegit amb contrasenya?

Les presentacions protegides per 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 mètode width(), height() i binary_data() per llegir les dades d’imatge en brut.

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

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


Vegeu també

 Català