Ako vytvárať prezentácie v C++
Aspose.Slides FOSS pre C++ vám umožňuje vytvárať prezentácie PowerPoint úplne v C++ bez závislosti na Microsoft Office. Tento sprievodca ukazuje, ako vytvoriť novú prezentáciu, pridať snímky a tvary, formátovať text a uložiť výsledok.
Sprievodca krok za krokom
Krok 1: Pridajte knižnicu do svojho projektu CMake
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: Zahrnúť požadované hlavičky
#include <Aspose/Slides/Foss/presentation.h>Všetky typy sa nachádzajú v mennom priestore Aspose::Slides::Foss. Pre stručnosť používajú príklady nižšie alias menného priestoru:
namespace asf = Aspose::Slides::Foss;Krok 3: Vytvoriť 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 automaticky uvoľnil interné zdroje.
Krok 4: Prístup k snímke
Prvý snímok je na indexe 0. Prázdna prezentácia má presne jeden snímok.
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: Pridať 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 × 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žiť prezentáciu
Zavolajte prs.save(path, SaveFormat::PPTX) predtým, než Presentation vyjde z rozsahu. PPTX je jediný podporovaný výstupný formát.
prs.save("result.pptx", asf::SaveFormat::PPTX);Súbor je zapísaný atomicky; ak nastane chyba pred týmto volaním, nevytvorí sa výstupný súbor.
Kompletný funkčný príklad
Nasledujúci program vytvára dvoj-snímkovú prezentáciu s tvarom nadpisu na prvej snímke a tabuľkou na druhej.
#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 zničení Presentation
Ukladáte odkaz alebo ukazovateľ na snímku alebo tvar po tom, čo bol Presentation zničený. Všetky odkazy vrátené metódami slides(), shapes() atď. sú neplatné, keď sa spustí deštruktor Presentation. Udržujte Presentation nažive po celú dobu, kedy používate jeho podobjekty.
SaveFormat::PPTX is not a function chyba kompilátora
SaveFormat::PPTX je hodnota výčtu, 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 jeden snímok?
Áno. Zavolajte prs.slides().add_empty_slide(&prs.layout_slides()[0]) na pridanie prázdneho snímku a prístup k nemu 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 uložiť?
Iba SaveFormat::PPTX je podporovaný. Export do PDF, HTML, SVG alebo obrázkov nie je v tejto edícii k dispozícii.