Sådan opretter du præsentationer i C++
Aspose.Slides FOSS for C++ giver dig mulighed for at oprette PowerPoint-præsentationer udelukkende i C++ uden afhængighed af Microsoft Office. Denne vejledning viser, hvordan du opretter en ny præsentation, tilføjer slides og former, formaterer tekst og gemmer resultatet.
Trin-for-trin guide
Trin 1: Tilføj biblioteket til dit CMake-projekt
Brug CMake FetchContent til at integrere biblioteket direkte fra GitHub. C++20 eller nyere er påkrævet.
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)Ingen andre systempakker er påkrævet.
Trin 2: Inkluder de nødvendige header-filer
#include <Aspose/Slides/Foss/presentation.h>Alle typer findes i Aspose::Slides::Foss-navnerummet. For korthed bruger eksemplerne nedenfor et navnerumsalias:
namespace asf = Aspose::Slides::Foss;Trin 3: Opret en præsentation
Konstruer en Presentation på stakken. En ny præsentation starter med et tomt dias.
#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;
}Vigtigt: Brug stakallokering eller std::unique_ptr, så destruktøren frigiver interne ressourcer automatisk.
Trin 4: Få adgang til et dias
Den første slide er på indeks 0. En tom præsentation har præcis ét slide.
namespace asf = Aspose::Slides::Foss;
asf::Presentation prs;
auto& slide = prs.slides()[0]; // zero-based index
prs.save("output.pptx", asf::SaveFormat::PPTX);Trin 5: Tilføj en form
Brug slide.shapes().add_auto_shape() til at tilføje en AutoShape. Parametrene er (shape_type, x, y, width, height) alle i punkter (1 punkt = 1/72 tomme; standard slide er 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;
}Trin 6: Gem præsentationen
Kald prs.save(path, SaveFormat::PPTX), før Presentation går ud af scope. PPTX er det eneste understøttede outputformat.
prs.save("result.pptx", asf::SaveFormat::PPTX);Filen skrives atomisk; hvis der opstår en fejl før dette kald, oprettes der ingen outputfil.
Komplet fungerende eksempel
Følgende program opretter en præsentation med to dias med en titelform på det første dias og en tabel på det andet.
#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;
}Almindelige problemer og løsninger
Segfault eller double-free ved destruktion af Presentation
Du gemmer en reference eller pointer til et dias eller en form, efter at Presentation er blevet destrueret. Alle referencer, der returneres af slides(), shapes() osv., bliver ugyldige, når Presentation‑destruktøren kører. Hold Presentation i live i hele den periode, du bruger dens underobjekter.
SaveFormat::PPTX is not a function kompilationsfejl
SaveFormat::PPTX er en enum‑værdi, ikke en funktion. Brug den som prs.save("file.pptx", asf::SaveFormat::PPTX).
Linker-fejl: ubestemt reference til Aspose::Slides::Foss::Presentation
Sørg for, at din CMakeLists.txt linker mod biblioteket med target_link_libraries(my_app PRIVATE aspose_slides_foss).
Ofte stillede spørgsmål
Hvad er standardstørrelsen på sliden?
En ny Presentation() opretter dias i den standard 10 × 7,5 tommer (720 × 540 punkt) størrelse. Ændring af diasstørrelsen understøttes endnu ikke i denne udgave.
Kan jeg tilføje mere end ét slide?
Ja. Kald prs.slides().add_empty_slide(&prs.layout_slides()[0]) for at tilføje et tomt dias og få adgang til det via indeks:
prs.slides().add_empty_slide(&prs.layout_slides()[0]);
auto& slide2 = prs.slides()[1];Kan jeg åbne en eksisterende fil og tilføje slides?
Ja:
asf::Presentation prs("existing.pptx");
prs.slides().add_empty_slide(&prs.layout_slides()[0]);
prs.save("existing.pptx", asf::SaveFormat::PPTX);Hvilke formater kan jeg gemme til?
Kun SaveFormat::PPTX understøttes. Eksport til PDF, HTML, SVG eller billeder er ikke tilgængelig i denne udgave.