Як створювати презентації на 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.
Покроковий посібник
Крок 1: Додайте бібліотеку до вашого CMake‑проекту
Використовуйте CMake FetchContent, щоб інтегрувати бібліотеку безпосередньо з GitHub. Потрібен C++20 або новіший.
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)Інші системні пакети не потрібні.
Крок 2: Підключіть необхідні заголовки
#include <Aspose/Slides/Foss/presentation.h>Усі типи розташовані в Aspose::Slides::Foss просторі імен. Для стислості, наведені нижче приклади використовують псевдонім простору імен:
namespace asf = Aspose::Slides::Foss;Крок 3: Створіть презентацію
Створіть Presentation у стеку. Нова презентація починається з одного порожнього слайду.
#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;
}Важливо: Використовуйте розміщення в стеку або std::unique_ptr щоб деструктор автоматично звільняв внутрішні ресурси.
Крок 4: Доступ до слайду
Перший слайд має індекс 0. Порожня презентація містить саме один слайд.
namespace asf = Aspose::Slides::Foss;
asf::Presentation prs;
auto& slide = prs.slides()[0]; // zero-based index
prs.save("output.pptx", asf::SaveFormat::PPTX);Крок 5: Додайте форму
Використовуйте slide.shapes().add_auto_shape() додати AutoShape. Параметри такі (shape_type, x, y, width, height) всі у пунктах (1 пункт = 1/72 дюйма; стандартний слайд — 720 x 540 пунктів).
#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;
}Крок 6: Збережіть презентацію
Виклик prs.save(path, SaveFormat::PPTX) перед Presentation виходить за межі області видимості. PPTX — єдиний підтримуваний формат виводу.
prs.save("result.pptx", asf::SaveFormat::PPTX);Файл записується атомарно; якщо під час виклику виникне помилка, файл виводу не буде створено.
Повний робочий приклад
Наступна програма створює презентацію з двома слайдами: на першому слайді розташовано заголовок, а на другому — таблицю.
#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 або double‑free на Presentation знищення
Ви зберігаєте посилання або вказівник на slide або shape після the Presentation було знищено. Усі посилання, повернуті slides(), shapes(), тощо, стають недійсними, коли Presentation деструктор виконується. Тримайте Presentation живим протягом усього часу, поки ви використовуєте його дочірні об’єкти.
SaveFormat::PPTX is not a function помилка компілятора
SaveFormat::PPTX є значенням enum, а не функцією. Використовуйте його як prs.save("file.pptx", asf::SaveFormat::PPTX).
Помилка лінкера: невизначене посилання на Aspose::Slides::Foss::Presentation
Переконайтеся, що ваш CMakeLists.txt пов’язується з бібліотекою за допомогою target_link_libraries(my_app PRIVATE aspose_slides_foss).
Часті запитання
Який розмір слайду за замовчуванням?
Новий Presentation() створює слайди стандартного розміру 10 × 7,5 дюйма (720 × 540 пунктів). Зміна розміру слайдів ще не підтримується в цьому випуску.
Чи можу я додати більше одного слайду?
Так. Викличте prs.slides().add_empty_slide(&prs.layout_slides()[0]) додати порожній слайд і отримати доступ до нього за індексом:
prs.slides().add_empty_slide(&prs.layout_slides()[0]);
auto& slide2 = prs.slides()[1];Чи можу я відкрити існуючий файл і додати слайди?
Так:
asf::Presentation prs("existing.pptx");
prs.slides().add_empty_slide(&prs.layout_slides()[0]);
prs.save("existing.pptx", asf::SaveFormat::PPTX);У які формати я можу зберігати?
Лише SaveFormat::PPTX підтримується. Експорт у PDF, HTML, SVG або зображення недоступний у цьому випуску.