Ako vytvoriť prezentácie v 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.
Postupný návod
Krok 1: Pridajte knižnicu do vášho CMake projektu
Použite CMake FetchContent na integráciu knižnice priamo z GitHubu. Vyžaduje sa C++20 alebo novší.
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)Nie sú potrebné žiadne ďalšie systémové balíky.
Krok 2: Zahrňte požadované hlavičkové súbory
#include <Aspose/Slides/Foss/presentation.h>Všetky typy sa nachádzajú v Aspose::Slides::Foss namespace. Pre stručnosť používajú príklady nižšie alias priestoru mien:
namespace asf = Aspose::Slides::Foss;Krok 3: Vytvorte prezentáciu
Vytvorte Presentation na zásobníku. Nová prezentácia začína jedným prázdnym snímkom.
#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;
}Dôležité: Použite alokáciu na zásobníku alebo std::unique_ptr aby deštruktor uvoľnil interné zdroje automaticky.
Krok 4: Prístup k snímke
Prvá snímka je na indexe 0. Prázdna prezentácia má presne jednu snímku.
namespace asf = Aspose::Slides::Foss;
asf::Presentation prs;
auto& slide = prs.slides()[0]; // zero-based index
prs.save("output.pptx", asf::SaveFormat::PPTX);Krok 5: Pridajte tvar
Použite slide.shapes().add_auto_shape() na pridanie AutoShape. Parametre sú (shape_type, x, y, width, height) všetky v bodoch (1 bod = 1/72 palca; štandardný snímok 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;
}Krok 6: Uložte prezentáciu
Zavolajte prs.save(path, SaveFormat::PPTX) predtým, ako Presentation vyjde z rozsahu. PPTX je jediný podporovaný výstupný formát.
prs.save("result.pptx", asf::SaveFormat::PPTX);Súbor sa zapisuje atomicky; ak dôjde k chybe pred týmto volaním, nevytvorí sa žiadny výstupný súbor.
Kompletný funkčný príklad
Nasledujúci program vytvorí prezentáciu s dvoma snímkami, pričom na prvej snímke je tvar s titulkom a na druhej tabuľka.
#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;
}Bežné problémy a riešenia
Segfault alebo double‑free pri Presentation zničení
Ukladáte referenciu alebo ukazovateľ na snímok alebo tvar po the Presentation bol zničený. Všetky referencie vrátené slides(), shapes(), atď. sú neplatné, keď sa Presentation deštruktor spustí. Udržujte Presentation živý po celú dobu, kým používate jeho podobjekty.
SaveFormat::PPTX is not a function chyba kompilátora
SaveFormat::PPTX je hodnota enum, nie funkcia. Použite ju ako prs.save("file.pptx", asf::SaveFormat::PPTX).
chyba linkeru: nedefinovaná referencia na Aspose::Slides::Foss::Presentation
Uistite sa, že váš CMakeLists.txt odkazuje na knižnicu s target_link_libraries(my_app PRIVATE aspose_slides_foss).
Často kladené otázky
Aká je predvolená veľkosť snímky?
Nový Presentation() vytvára snímky v štandardnej veľkosti 10 x 7,5 palca (720 x 540 bodov). Zmena veľkosti snímky zatiaľ nie je podporovaná v tejto edícii.
Môžem pridať viac ako jednu snímku?
Áno. Zavolajte prs.slides().add_empty_slide(&prs.layout_slides()[0]) na pridanie prázdnej snímky a prístup k nej podľa indexu:
prs.slides().add_empty_slide(&prs.layout_slides()[0]);
auto& slide2 = prs.slides()[1];Môžem otvoriť existujúci súbor a pridať snímky?
Áno:
asf::Presentation prs("existing.pptx");
prs.slides().add_empty_slide(&prs.layout_slides()[0]);
prs.save("existing.pptx", asf::SaveFormat::PPTX);Do akých formátov môžem ukladať?
Iba SaveFormat::PPTX je podporované. Export do PDF, HTML, SVG alebo obrázkov nie je v tejto edícii k dispozícii.