Comment charger des présentations en C++
Aspose.Slides FOSS for C++ vous permet d’ouvrir n’importe quel fichier .pptx, d’inspecter son contenu, et soit de le sauvegarder à nouveau au format PPTX, soit d’en extraire des données. Ce guide couvre l’ouverture d’un fichier, l’itération des diapositives, la lecture du texte des formes et le round‑tripping de la sauvegarde.
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 constructeur Presentation. 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érer sur toutes les diapositives et afficher 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 de la forme
Itérer sur les formes et lire 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éder 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 : Enregistrement 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);Enregistrement vers un chemin différent crée un nouveau fichier. Enregistrement 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 fichier .pptx 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 fichiers .ppt (PowerPoint binaire 97‑2003) hérités ne sont pas pris en charge.
La forme n’a pas de text_frame
Certaines formes (Connectors, PictureFrames, GroupShapes) n’ont pas de cadre de texte. Protégez-vous 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 telles quelles lors d’une sauvegarde en aller‑retour. La bibliothèque ne sérialise que les parties du modèle de document qu’elle comprend, et transmet telles quelles tout 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 (crypté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 une méthode width(), height() et binary_data() pour lire les données d’image brutes.
Le chargement à partir d’un tampon en mémoire est‑il pris en charge ?
Le chargement depuis un std::vector<uint8_t> ou un std::istream n’est pas exposé dans l’API actuelle. Écrivez les octets dans un fichier temporaire d’abord, puis transmettez le chemin au constructeur Presentation.