Cómo crear presentaciones en C++
Aspose.Slides FOSS for C++ le permite crear presentaciones de PowerPoint completamente en C++ sin depender de Microsoft Office. Esta guía muestra cómo crear una nueva presentación, agregar diapositivas y formas, dar formato al texto y guardar el resultado.
Guía paso a paso
Paso 1: Añadir la biblioteca a su proyecto CMake
Utilice CMake FetchContent para integrar la biblioteca directamente desde GitHub. Se requiere 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 se requieren otros paquetes del sistema.
Paso 2: Incluir los encabezados requeridos
#include <Aspose/Slides/Foss/presentation.h>Todos los tipos residen en el espacio de nombres Aspose::Slides::Foss. Para mayor brevedad, los ejemplos a continuación usan un alias de espacio de nombres:
namespace asf = Aspose::Slides::Foss;Paso 3: Crear una presentación
Construya un Presentation en la pila. Una nueva presentación comienza con una diapositiva en blanco.
#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;
}Importante: Utilice la asignación en pila o std::unique_ptr para que el destructor libere los recursos internos automáticamente.
Paso 4: Acceder a una diapositiva
La primera diapositiva está en el índice 0. Una presentación en blanco tiene exactamente 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);Paso 5: Añadir una forma
Use slide.shapes().add_auto_shape() para agregar una AutoShape. Los parámetros son (shape_type, x, y, width, height) todos en puntos (1 punto = 1/72 de pulgada; la diapositiva estándar es 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;
}Paso 6: Guardar la presentación
Llame prs.save(path, SaveFormat::PPTX) antes de que Presentation salga del alcance. PPTX es el único formato de salida compatible.
prs.save("result.pptx", asf::SaveFormat::PPTX);El archivo se escribe de forma atómica; si ocurre un error antes de esta llamada, no se crea ningún archivo de salida.
Ejemplo completo y funcional
El siguiente programa crea una presentación de dos diapositivas con una forma de título en la primera diapositiva y una tabla en la segunda.
#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;
}Problemas comunes y soluciones
Segfault o double-free en la destrucción de Presentation
Está almacenando una referencia o puntero a una diapositiva o forma después de que Presentation haya sido destruido. Todas las referencias devueltas por slides(), shapes(), etc. se invalidan cuando se ejecuta el destructor de Presentation. Mantenga Presentation activo durante todo el tiempo que utilice sus objetos secundarios.
SaveFormat::PPTX is not a function error del compilador
SaveFormat::PPTX es un valor de enumeración, no una función. Úselo como prs.save("file.pptx", asf::SaveFormat::PPTX).
Error de enlazador: referencia indefinida a Aspose::Slides::Foss::Presentation
Asegúrate de que tu CMakeLists.txt se enlace contra la biblioteca con target_link_libraries(my_app PRIVATE aspose_slides_foss).
Preguntas Frecuentes
¿Cuál es el tamaño de diapositiva predeterminado?
Un nuevo Presentation() crea diapositivas con el tamaño estándar de 10 × 7,5 pulgadas (720 × 540 puntos). Cambiar el tamaño de la diapositiva aún no es compatible en esta edición.
¿Puedo agregar más de una diapositiva?
Sí. Llame prs.slides().add_empty_slide(&prs.layout_slides()[0]) para añadir una diapositiva en blanco y acceder a ella por índice:
prs.slides().add_empty_slide(&prs.layout_slides()[0]);
auto& slide2 = prs.slides()[1];¿Puedo abrir un archivo existente y añadir diapositivas?
Sí:
asf::Presentation prs("existing.pptx");
prs.slides().add_empty_slide(&prs.layout_slides()[0]);
prs.save("existing.pptx", asf::SaveFormat::PPTX);¿Qué formatos puedo guardar?
Solo SaveFormat::PPTX es compatible. La exportación a PDF, HTML, SVG o imágenes no está disponible en esta edición.