Come creare presentazioni in C++
Aspose.Slides FOSS per C++ ti consente di creare presentazioni PowerPoint interamente in C++ senza dipendere da Microsoft Office. Questa guida mostra come creare una nuova presentazione, aggiungere diapositive e forme, formattare il testo e salvare il risultato.
Guida passo-passo
Passo 1: Aggiungi la libreria al tuo progetto CMake
Usa CMake FetchContent per integrare la libreria direttamente da GitHub. È richiesto C++20 o versioni successive.
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)Non sono richiesti altri pacchetti di sistema.
Passo 2: Includi le intestazioni richieste
#include <Aspose/Slides/Foss/presentation.h>Tutti i tipi risiedono nello spazio dei nomi Aspose::Slides::Foss. Per brevità, gli esempi seguenti utilizzano un alias di spazio dei nomi:
namespace asf = Aspose::Slides::Foss;Passo 3: Crea una Presentazione
Costruisci un Presentation sullo stack. Una nuova presentazione inizia con una diapositiva vuota.
#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: Usa l’allocazione nello stack o std::unique_ptr in modo che il distruttore rilasci automaticamente le risorse interne.
Passo 4: Accedi a una diapositiva
La prima diapositiva è all’indice 0. Una presentazione vuota ha esattamente 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);Passo 5: Aggiungi una forma
Usa slide.shapes().add_auto_shape() per aggiungere un’AutoShape. I parametri sono (shape_type, x, y, width, height) tutti in punti (1 punto = 1/72 di pollice; la diapositiva standard è 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;
}Passo 6: Salva la presentazione
Chiama prs.save(path, SaveFormat::PPTX) prima che Presentation esca dal contesto. PPTX è l’unico formato di output supportato.
prs.save("result.pptx", asf::SaveFormat::PPTX);Il file viene scritto in modo atomico; se si verifica un errore prima di questa chiamata, non viene creato alcun file di output.
Esempio completo funzionante
Il programma seguente crea una presentazione di due diapositive con una forma titolo nella prima diapositiva e una tabella nella seconda.
#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;
}Problemi comuni e soluzioni
Segfault o double-free alla distruzione di Presentation
Stai memorizzando un riferimento o un puntatore a una diapositiva o a una forma dopo che Presentation è stato distrutto. Tutti i riferimenti restituiti da slides(), shapes(), ecc. vengono invalidati quando il distruttore di Presentation viene eseguito. Mantieni Presentation attivo per l’intera durata in cui utilizzi i suoi oggetti figlio.
SaveFormat::PPTX is not a function errore del compilatore
SaveFormat::PPTX è un valore enum, non una funzione. Usalo come prs.save("file.pptx", asf::SaveFormat::PPTX).
Errore del linker: riferimento indefinito a Aspose::Slides::Foss::Presentation
Assicurati che il tuo CMakeLists.txt si colleghi alla libreria con target_link_libraries(my_app PRIVATE aspose_slides_foss).
Domande Frequenti
Qual è la dimensione predefinita della diapositiva?
Un nuovo Presentation() crea diapositive nella dimensione standard di 10 × 7,5 pollici (720 × 540 punti). La modifica della dimensione della diapositiva non è ancora supportata in questa edizione.
Posso aggiungere più di una diapositiva?
Sì. Chiama prs.slides().add_empty_slide(&prs.layout_slides()[0]) per aggiungere una diapositiva vuota e accedervi per indice:
prs.slides().add_empty_slide(&prs.layout_slides()[0]);
auto& slide2 = prs.slides()[1];Posso aprire un file esistente e aggiungere diapositive?
Sì:
asf::Presentation prs("existing.pptx");
prs.slides().add_empty_slide(&prs.layout_slides()[0]);
prs.save("existing.pptx", asf::SaveFormat::PPTX);In quali formati posso salvare?
Solo SaveFormat::PPTX è supportato. L’esportazione in PDF, HTML, SVG o immagini non è disponibile in questa edizione.