Kako kreirati prezentacije u C++
Aspose.Slides FOSS for C++ lets you create PowerPoint presentations entirely in C++ with no dependency on Microsoft Office. This guide shows how to create a new presentation, add slides and shapes, format text, and save the result.
Vodič korak po korak
Korak 1: Dodajte biblioteku u vaš CMake projekat
Koristite CMake FetchContent da integrišete biblioteku direktno sa GitHub-a. Potreban je C++20 ili noviji.
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)Nijedan drugi sistemski paket nije potreban.
Korak 2: Uključite potrebne zaglavlja
#include <Aspose/Slides/Foss/presentation.h>Svi tipovi se nalaze u Aspose::Slides::Foss namespace. Radi skraćenosti, primeri ispod koriste alias prostora imena:
namespace asf = Aspose::Slides::Foss;Korak 3: Kreirajte prezentaciju
Kreirajte Presentation na steku. Nova prezentacija počinje sa jednim praznim slajdom.
#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;
}Važno: Koristite alokaciju na steku ili std::unique_ptr tako da destruktor automatski oslobađa interne resurse.
Korak 4: Pristupite slajdu
Prvi slajd je na indeksu 0. Prazna prezentacija ima tačno jedan slajd.
namespace asf = Aspose::Slides::Foss;
asf::Presentation prs;
auto& slide = prs.slides()[0]; // zero-based index
prs.save("output.pptx", asf::SaveFormat::PPTX);Korak 5: Dodajte oblik
Koristite slide.shapes().add_auto_shape() da biste dodali AutoShape. Parametri su (shape_type, x, y, width, height) sve u tačkama (1 tačka = 1/72 inča; standardni slajd je 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;
}Korak 6: Sačuvajte prezentaciju
Pozovite prs.save(path, SaveFormat::PPTX) pre nego što Presentation izađe iz opsega. PPTX je jedini podržani izlazni format.
prs.save("result.pptx", asf::SaveFormat::PPTX);Datoteka se piše atomarno; ako dođe do greške pre ovog poziva, izlazna datoteka se ne kreira.
Kompletan radni primer
Sledeći program kreira prezentaciju sa dva slajda, sa naslovnim oblikom na prvom slajdu i tabelom na drugom.
#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;
}Uobičajeni problemi i rešenja
Segfault ili double‑free na Presentation uništavanju
Čuvate referencu ili pokazivač na slajd ili oblik nakon što je Presentation je uništen. Svi referenci koje vraća slides(), shapes(), itd. se poništavaju kada Presentation destruktor se izvrši. Zadržite Presentation aktivan tokom celog perioda dok koristite njegove podobjekte.
SaveFormat::PPTX is not a function greška kompajlera
SaveFormat::PPTX je vrednost enumeracije, a ne funkcija. Koristite ga kao prs.save("file.pptx", asf::SaveFormat::PPTX).
Greška linkera: nedefinisana referenca na Aspose::Slides::Foss::Presentation
Osigurajte da vaš CMakeLists.txt linkuje protiv biblioteke pomoću target_link_libraries(my_app PRIVATE aspose_slides_foss).
Često postavljana pitanja
Koja je podrazumevana veličina slajda?
Novi Presentation() kreira slajdove u standardnoj veličini od 10 x 7,5 inča (720 x 540 tačaka). Promena veličine slajda još nije podržana u ovom izdanju.
Mogu li da dodam više od jednog slajda?
Da. Pozovite prs.slides().add_empty_slide(&prs.layout_slides()[0]) da biste dodali prazan slajd i pristupili mu po indeksu:
prs.slides().add_empty_slide(&prs.layout_slides()[0]);
auto& slide2 = prs.slides()[1];Mogu li da otvorim postojeći fajl i dodam slajdove?
Da:
asf::Presentation prs("existing.pptx");
prs.slides().add_empty_slide(&prs.layout_slides()[0]);
prs.save("existing.pptx", asf::SaveFormat::PPTX);U koje formate mogu da sačuvam?
Samo SaveFormat::PPTX je podržano. Izvoz u PDF, HTML, SVG ili slike nije dostupan u ovom izdanju.