Com crear presentacions en C++
Aspose.Slides FOSS per a C++ us permet crear presentacions PowerPoint completament en C++ sense cap dependència de Microsoft Office. Aquesta guia mostra com crear una nova presentació, afegir diapositives i formes, formatar text i desar el resultat.
Guia pas a pas
Pas 1: Afegeix la biblioteca al teu projecte CMake
Utilitzeu CMake FetchContent per integrar la biblioteca directament des de GitHub. Es requereix C++20 o posterior.
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)No es requereixen altres paquets del sistema.
Pas 2: Inclou les capçaleres necessàries
#include <Aspose/Slides/Foss/presentation.h>Tots els tipus es troben a l’espai de noms Aspose::Slides::Foss. Per abreviatura, els exemples següents utilitzen un àlies d’espai de noms:
namespace asf = Aspose::Slides::Foss;Pas 3: Crea una presentació
Construeix un Presentation a la pila. Una nova presentació comença amb una diapositiva en blanc.
#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: Utilitzeu l’assignació a la pila o std::unique_ptr perquè el destructor alliberi automàticament els recursos interns.
Pas 4: Accedir a una diapositiva
La primera diapositiva està a l’índex 0. Una presentació en blanc té exactament una diapositiva.
namespace asf = Aspose::Slides::Foss;
asf::Presentation prs;
auto& slide = prs.slides()[0]; // zero-based index
prs.save("output.pptx", asf::SaveFormat::PPTX);Pas 5: Afegeix una forma
Utilitzeu slide.shapes().add_auto_shape() per afegir una AutoShape. Els paràmetres són (shape_type, x, y, width, height) tots en punts (1 punt = 1/72 polzada; la diapositiva estàndard és de 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;
}Pas 6: Desa la presentació
Crida prs.save(path, SaveFormat::PPTX) abans que Presentation surti del seu abast. PPTX és l’únic format de sortida compatible.
prs.save("result.pptx", asf::SaveFormat::PPTX);El fitxer s’escriu de manera atòmica; si es produeix un error abans d’aquesta crida, no es crea cap fitxer de sortida.
Exemple complet i funcional
El programa següent crea una presentació de dues diapositives amb una forma de títol a la primera diapositiva i una taula a la segona.
#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;
}Problemes comuns i solucions
Error de segmentació o doble alliberament en la destrucció de Presentation
Esteu emmagatzemant una referència o punter a una diapositiva o forma després que s’hagi destruït el Presentation. Totes les referències retornades per slides(), shapes(), etc. es invaliden quan s’executa el destructor del Presentation. Mantingueu el Presentation viu durant tot el temps que utilitzeu els seus objectes fill.
SaveFormat::PPTX is not a function error del compilador
SaveFormat::PPTX és un valor d’enumeració, no una funció. Utilitzeu-lo com prs.save("file.pptx", asf::SaveFormat::PPTX).
Error del linker: referència indefinida a Aspose::Slides::Foss::Presentation
Assegureu que el vostre CMakeLists.txt enllaça contra la biblioteca amb target_link_libraries(my_app PRIVATE aspose_slides_foss).
Preguntes freqüents
Quina és la mida per defecte de la diapositiva?
Un nou Presentation() crea diapositives a la mida estàndard de 10 x 7,5 polzades (720 x 540 punts). Canviar la mida de la diapositiva encara no està suportat en aquesta edició.
Puc afegir més d’una diapositiva?
Sí. Crida prs.slides().add_empty_slide(&prs.layout_slides()[0]) per afegir una diapositiva en blanc i accedir-hi per índex:
prs.slides().add_empty_slide(&prs.layout_slides()[0]);
auto& slide2 = prs.slides()[1];Puc obrir un fitxer existent i afegir diapositives?
Sí:
asf::Presentation prs("existing.pptx");
prs.slides().add_empty_slide(&prs.layout_slides()[0]);
prs.save("existing.pptx", asf::SaveFormat::PPTX);Quins formats puc desar a?
Només SaveFormat::PPTX és compatible. L’exportació a PDF, HTML, SVG o imatges no està disponible en aquesta edició.