Comment créer des présentations en C++
Aspose.Slides FOSS for C++ vous permet de créer des présentations PowerPoint entièrement en C++ sans dépendance à Microsoft Office. Ce guide montre comment créer une nouvelle présentation, ajouter des diapositives et des formes, mettre en forme le texte et enregistrer le résultat.
Guide étape par étape
Étape 1 : Ajouter la bibliothèque à votre projet CMake
Utilisez CMake FetchContent pour intégrer la bibliothèque directement depuis GitHub. C++20 ou une version ultérieure est requis.
cmake_minimum_required(VERSION 3.20)
project(my_slides_app LANGUAGES CXX)
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
include(FetchContent)
FetchContent_Declare(
aspose_slides_foss
GIT_REPOSITORY https://github.com/aspose-slides-foss/Aspose.Slides-FOSS-for-Cpp.git
GIT_TAG main
)
FetchContent_MakeAvailable(aspose_slides_foss)
add_executable(my_app main.cpp)
target_link_libraries(my_app PRIVATE aspose_slides_foss)Aucun autre paquet système n’est requis.
Étape 2 : Inclure les en-têtes requis
#include <Aspose/Slides/Foss/presentation.h>Tous les types résident dans l’espace de noms Aspose::Slides::Foss. Par souci de concision, les exemples ci‑dessous utilisent un alias d’espace de noms :
namespace asf = Aspose::Slides::Foss;Étape 3 : Créer une présentation
Construisez un Presentation sur la pile. Une nouvelle présentation commence avec une diapositive vierge.
#include <Aspose/Slides/Foss/presentation.h>
#include <iostream>
int main() {
namespace asf = Aspose::Slides::Foss;
asf::Presentation prs;
std::cout << "Slides in new presentation: " << prs.slides().size() << "\n";
prs.save("output.pptx", asf::SaveFormat::PPTX);
return 0;
}Important : Utilisez l’allocation sur la pile ou std::unique_ptr afin que le destructeur libère automatiquement les ressources internes.
Étape 4 : Accéder à une diapositive
La première diapositive se trouve à l’index 0. Une présentation vierge contient exactement une diapositive.
namespace asf = Aspose::Slides::Foss;
asf::Presentation prs;
auto& slide = prs.slides()[0]; // zero-based index
prs.save("output.pptx", asf::SaveFormat::PPTX);Étape 5 : Ajouter une forme
Utilisez slide.shapes().add_auto_shape() pour ajouter une AutoShape. Les paramètres sont (shape_type, x, y, width, height) tous en points (1 point = 1/72 pouce ; la diapositive standard mesure 720 x 540 pt).
#include <Aspose/Slides/Foss/presentation.h>
int main() {
namespace asf = Aspose::Slides::Foss;
asf::Presentation prs;
auto& slide = prs.slides()[0];
// Rectangle at (50, 50) with 400 wide and 120 tall
auto& shape = slide.shapes().add_auto_shape(
asf::ShapeType::RECTANGLE, 50, 50, 400, 120);
// Set text on the shape's text frame
shape.text_frame()->set_text("Hello from Aspose.Slides FOSS!");
prs.save("with-shape.pptx", asf::SaveFormat::PPTX);
return 0;
}Étape 6 : Enregistrer la présentation
Appelez prs.save(path, SaveFormat::PPTX) avant que Presentation ne sorte de la portée. PPTX est le seul format de sortie pris en charge.
prs.save("result.pptx", asf::SaveFormat::PPTX);Le fichier est écrit de manière atomique ; si une erreur survient avant cet appel, aucun fichier de sortie n’est créé.
Exemple complet fonctionnel
Le programme suivant crée une présentation de deux diapositives avec une forme de titre sur la première diapositive et un tableau sur la deuxième.
#include <Aspose/Slides/Foss/presentation.h>
#include <vector>
#include <string>
int main() {
namespace asf = Aspose::Slides::Foss;
asf::Presentation prs;
// --- Slide 1: title shape ---
auto& slide1 = prs.slides()[0];
auto& title = slide1.shapes().add_auto_shape(
asf::ShapeType::RECTANGLE, 40, 40, 640, 80);
title.text_frame()->set_text("Q1 Results: Executive Summary");
auto& fmt = title.text_frame()->paragraphs()[0].portions()[0].portion_format();
fmt.set_font_height(32);
fmt.set_font_bold(asf::NullableBool::TRUE);
fmt.fill_format().set_fill_type(asf::FillType::SOLID);
fmt.fill_format().solid_fill_color().set_color(
asf::Color::from_argb(255, 0, 70, 127));
// --- Slide 2: table ---
prs.slides().add_empty_slide(&prs.layout_slides()[0]);
auto& slide2 = prs.slides()[1];
std::vector<double> col_w = {200.0, 120.0, 120.0};
std::vector<double> row_h = {40.0, 40.0, 40.0};
auto& table = slide2.shapes().add_table(40, 40, col_w, row_h);
std::vector<std::string> headers = {"Region", "Revenue", "Growth"};
std::vector<std::vector<std::string>> data = {
{"North", "$1.2M", "+8%"},
{"South", "$0.9M", "+4%"},
};
for (size_t col = 0; col < headers.size(); ++col) {
table.rows()[0][col].text_frame()->set_text(headers[col]);
}
for (size_t r = 0; r < data.size(); ++r) {
for (size_t c = 0; c < data[r].size(); ++c) {
table.rows()[r + 1][c].text_frame()->set_text(data[r][c]);
}
}
prs.save("q1-results.pptx", asf::SaveFormat::PPTX);
return 0;
}Problèmes courants et solutions
Segfault ou double libération lors de la destruction de Presentation
Vous stockez une référence ou un pointeur vers une diapositive ou une forme après que le Presentation a été détruit. Toutes les références renvoyées par slides(), shapes(), etc. sont invalidées lorsque le destructeur du Presentation s’exécute. Gardez le Presentation vivant pendant toute la durée d’utilisation de ses objets enfants.
SaveFormat::PPTX is not a function erreur de compilation
SaveFormat::PPTX est une valeur d’énumération, pas une fonction. Utilisez‑la comme prs.save("file.pptx", asf::SaveFormat::PPTX).
Erreur de l’éditeur de liens : référence indéfinie à Aspose::Slides::Foss::Presentation
Assurez-vous que votre CMakeLists.txt se lie contre la bibliothèque avec target_link_libraries(my_app PRIVATE aspose_slides_foss).
Foire aux questions
Quelle est la taille de diapositive par défaut ?
Un nouveau Presentation() crée des diapositives au format standard de 10 × 7,5 pouces (720 × 540 points). La modification de la taille des diapositives n’est pas encore prise en charge dans cette édition.
Puis-je ajouter plus d’une diapositive ?
Oui. Appelez prs.slides().add_empty_slide(&prs.layout_slides()[0]) pour ajouter une diapositive vierge et y accéder par indice :
prs.slides().add_empty_slide(&prs.layout_slides()[0]);
auto& slide2 = prs.slides()[1];Puis-je ouvrir un fichier existant et ajouter des diapositives ?
Oui:
asf::Presentation prs("existing.pptx");
prs.slides().add_empty_slide(&prs.layout_slides()[0]);
prs.save("existing.pptx", asf::SaveFormat::PPTX);Quels formats puis-je enregistrer ?
Seul SaveFormat::PPTX est pris en charge. L’exportation vers PDF, HTML, SVG ou images n’est pas disponible dans cette édition.