Kako kreirati prezentacije u C++
Aspose.Slides FOSS za C++ omogućava kreiranje PowerPoint prezentacija u potpunosti u C++ bez zavisnosti od Microsoft Office-a. Ovaj vodič pokazuje kako napraviti novu prezentaciju, dodati slajdove i oblike, formatirati tekst i sačuvati rezultat.
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)Nisu potrebni drugi sistemski paketi.
Korak 2: Uključite potrebne zaglavlja
#include <Aspose/Slides/Foss/presentation.h>Svi tipovi se nalaze u Aspose::Slides::Foss prostoru imena. Radi sažetosti, primeri ispod koriste alias prostora imena:
namespace asf = Aspose::Slides::Foss;Korak 3: Kreirajte prezentaciju
Konstruišite Presentation na steku. Nova prezentacija počinje 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 kako bi destruktor automatski oslobodio interne resurse.
Korak 4: Pristup 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 dodate AutoShape. Parametri su (shape_type, x, y, width, height), svi 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 zapisuje atomarno; ako dođe do greške pre ovog poziva, izlazna datoteka se ne kreira.
Potpuni radni primer
Sledeći program kreira prezentaciju od 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;
}Уобичајени проблеми и исправке
Segfault ili double-free pri uništavanju Presentation
Čuvate referencu ili pokazivač na slajd ili oblik nakon što je Presentation uništen. Sve reference koje vraća slides(), shapes(), itd. postaju nevažeće kada se izvrši destruktor Presentation. Držite Presentation živim tokom celog perioda dok koristite njegove objekte‑dete.
SaveFormat::PPTX is not a function greška kompajlera
SaveFormat::PPTX je vrednost enumeracije, a ne funkcija. Koristite je kao prs.save("file.pptx", asf::SaveFormat::PPTX).
Linker greška: nedefinisana referenca na Aspose::Slides::Foss::Presentation
Osigurajte da vaš CMakeLists.txt poveže na biblioteku uz 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 × 7,5 inča (720 × 540 tačaka). Promena veličine slajda još nije podržana u ovom izdanju.
Mogu li dodati više od jednog slajda?
Да. Позовите prs.slides().add_empty_slide(&prs.layout_slides()[0]) да додате празан слајд и приступите му по индексу:
prs.slides().add_empty_slide(&prs.layout_slides()[0]);
auto& slide2 = prs.slides()[1];Mogu li otvoriti postojeći fajl i dodati slajdove?
Da:
asf::Presentation prs("existing.pptx");
prs.slides().add_empty_slide(&prs.layout_slides()[0]);
prs.save("existing.pptx", asf::SaveFormat::PPTX);Koje formate mogu da sačuvam?
Podržan je samo SaveFormat::PPTX. Izvoz u PDF, HTML, SVG ili slike nije dostupan u ovom izdanju.