Jak vytvořit prezentace v C++
Aspose.Slides FOSS for C++ vám umožňuje vytvářet prezentace PowerPoint kompletně v C++ bez závislosti na Microsoft Office. Tento průvodce ukazuje, jak vytvořit novou prezentaci, přidat snímky a tvary, formátovat text a uložit výsledek.
Průvodce krok za krokem
Krok 1: Přidejte knihovnu do svého projektu CMake
Použijte CMake FetchContent k integraci knihovny přímo z GitHubu. Je vyžadováno C++20 nebo novější.
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)Nejsou vyžadovány žádné další systémové balíčky.
Krok 2: Zahrňte požadované hlavičky
#include <Aspose/Slides/Foss/presentation.h>Všechny typy jsou umístěny v jmenném prostoru Aspose::Slides::Foss. Pro stručnost níže uvedené příklady používají alias jmenného prostoru:
namespace asf = Aspose::Slides::Foss;Krok 3: Vytvořit prezentaci
Vytvořte Presentation na zásobníku. Nová prezentace začíná jedním prázdným snímkem.
#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žijte alokaci na zásobníku nebo std::unique_ptr, aby destruktor automaticky uvolnil interní zdroje.
Krok 4: Přístup k snímku
První snímek má index 0. Prázdná prezentace má přesně jeden snímek.
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: Přidat tvar
Použijte slide.shapes().add_auto_shape() k přidání AutoShape. Parametry jsou (shape_type, x, y, width, height) všechny v bodech (1 bod = 1/72 palce; standardní snímek 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žit prezentaci
Zavolejte prs.save(path, SaveFormat::PPTX) před tím, než Presentation opustí rozsah. PPTX je jediný podporovaný výstupní formát.
prs.save("result.pptx", asf::SaveFormat::PPTX);Soubor je zapisován atomicky; pokud dojde k chybě před tímto voláním, nevytvoří se žádný výstupní soubor.
Kompletní funkční příklad
Následující program vytvoří prezentaci se dvěma snímky, na prvním snímku s tvarem nadpisu a na druhém se tabulkou.
#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;
}Běžné problémy a opravy
Segfault nebo double-free při zničení Presentation
Ukládáte odkaz nebo ukazatel na snímek nebo tvar poté, co byl Presentation zničen. Všechny odkazy vrácené slides(), shapes() atd. jsou neplatné, když se spustí destruktor Presentation. Udržujte Presentation naživu po celou dobu, kdy používáte jeho podřízené objekty.
SaveFormat::PPTX is not a function chyba kompilátoru
SaveFormat::PPTX je hodnota výčtu, nikoli funkce. Použijte ji jako prs.save("file.pptx", asf::SaveFormat::PPTX).
Chyba linkeru: nedefinovaná reference na Aspose::Slides::Foss::Presentation
Zajistěte, aby vaše CMakeLists.txt odkazovala na knihovnu s target_link_libraries(my_app PRIVATE aspose_slides_foss).
Často kladené otázky
Jaká je výchozí velikost snímku?
Nový Presentation() vytváří snímky ve standardní velikosti 10 × 7,5 palce (720 × 540 bodů). Změna velikosti snímku zatím není v této edici podporována.
Mohu přidat více než jeden snímek?
Ano. Zavolejte prs.slides().add_empty_slide(&prs.layout_slides()[0]) pro přidání prázdného snímku a přístup k němu podle indexu:
prs.slides().add_empty_slide(&prs.layout_slides()[0]);
auto& slide2 = prs.slides()[1];Mohu otevřít existující soubor a přidat snímky?
Ano:
asf::Presentation prs("existing.pptx");
prs.slides().add_empty_slide(&prs.layout_slides()[0]);
prs.save("existing.pptx", asf::SaveFormat::PPTX);Do jakých formátů mohu uložit?
Pouze SaveFormat::PPTX je podporováno. Export do PDF, HTML, SVG nebo obrázků není v této edici k dispozici.