Comment charger des présentations en C++

Comment charger des présentations en C++

Aspose.Slides FOSS for C++ lets you open any .pptx fichier, inspectez son contenu, et soit le réenregistrez au format PPTX, soit extrayez les données. Ce guide couvre l’ouverture d’un fichier, l’itération des diapositives, la lecture du texte des formes et la sauvegarde en aller‑retour.

Guide étape par étape

Étape 1 : Compiler et lier la bibliothèque

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 .

Étape 2 : Ouvrir une présentation existante

Passez le chemin du fichier au Presentation constructeur. Le destructeur gère le nettoyage.

#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 parties XML inconnues dans le fichier source sont conservées mot pour mot : la bibliothèque ne supprime jamais le contenu qu’elle ne comprend pas encore.


Étape 3 : Inspecter les diapositives

Itérez sur toutes les diapositives et affichez le 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;
}

Étape 4 : Lire le texte des formes

Itérez sur les formes et lisez le texte des formes qui possèdent 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;
}

Étape 5 : Lire les propriétés du document

Accédez aux propriétés principales du document depuis 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;
}

Étape 6 : Sauvegarde en aller-retour

Après avoir inspecté ou modifié la présentation, enregistrez-la à nouveau au format PPTX :

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

Enregistrer vers un chemin différent crée un nouveau fichier. Enregistrer vers le même chemin écrase l’original.


Problèmes courants et solutions

Fichier introuvable ou impossible à ouvrir

Vérifiez que le chemin vers le .pptx fichier est correct par rapport au répertoire de travail. Utilisez std::filesystem::path pour une construction de chemin robuste :

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

Exception : le format de fichier n’est pas pris en charge

La bibliothèque prend en charge .pptx (Office Open XML) uniquement. Les anciens .ppt (binary PowerPoint 97-2003) files are not supported.

La forme n’a pas de text_frame

Certaines formes (Connectors, PictureFrames, GroupShapes) n’ont pas de cadre de texte. Protégez avec shape.has_text_frame() avant d’accéder au texte.


Foire aux questions

Le chargement préserve-t-il tout le contenu original ?

Oui. Les parties XML inconnues sont conservées mot pour mot lors de l’enregistrement en aller-retour. La bibliothèque ne sérialise que les parties du modèle de document qu’elle comprend, et transmet telles quelles les XML qu’elle ne reconnaît pas.

Puis-je charger un PPTX protégé par mot de passe ?

Les présentations protégées par mot de passe (chiffrées) ne sont pas prises en charge dans cette édition.

Puis-je extraire les images intégrées ?

Accédez à la collection d’images : prs.images() renvoie le ImageCollection. Chaque image possède un width(), height(), et binary_data() méthode pour lire les données d’image brutes.

Le chargement depuis un tampon en mémoire est-il pris en charge ?

Chargement depuis un std::vector<uint8_t> ou std::istream n’est pas exposé dans l’API actuelle. Écrivez d’abord les octets dans un fichier temporaire, puis transmettez le chemin au Presentation constructeur.


Voir aussi

 Français