How to Get Started with Aspose.Slides FOSS for C++
aspose_slides_foss for C++ is a free, MIT-licensed library for creating and editing
PowerPoint .pptx files — no Microsoft Office required, built with CMake.
Step-by-Step Guide
Step 1: Add the Library via CMake
Add aspose_slides_foss to your CMakeLists.txt (C++20 compiler required):
cmake_minimum_required(VERSION 3.20)
project(MyProject)
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)Step 2: Include Required Headers
Include the headers for the classes you need:
#include <Aspose/Slides/Foss/presentation.h>
#include <Aspose/Slides/Foss/auto_shape.h>
#include <Aspose/Slides/Foss/shape_type.h>
#include <Aspose/Slides/Foss/text_frame.h>
#include <Aspose/Slides/Foss/export/save_format.h>Step 3: Create a Presentation
Construct a Presentation to start with one blank slide, then save it:
#include <Aspose/Slides/Foss/presentation.h>
#include <Aspose/Slides/Foss/export/save_format.h>
using namespace Aspose::Slides::Foss;
int main() {
Presentation prs;
prs.save("new_presentation.pptx", SaveFormat::PPTX);
return 0;
}Step 4: Add a Shape with Text
Use slide.shapes().add_auto_shape() to insert a rectangle, then call text_frame()->set_text()
to add text content:
#include <Aspose/Slides/Foss/auto_shape.h>
#include <Aspose/Slides/Foss/presentation.h>
#include <Aspose/Slides/Foss/shape_collection.h>
#include <Aspose/Slides/Foss/shape_type.h>
#include <Aspose/Slides/Foss/slide.h>
#include <Aspose/Slides/Foss/slide_collection.h>
#include <Aspose/Slides/Foss/text_frame.h>
#include <Aspose/Slides/Foss/export/save_format.h>
using namespace Aspose::Slides::Foss;
int main() {
Presentation prs;
auto& slide = prs.slides()[0];
auto& shape = slide.shapes().add_auto_shape(
ShapeType::RECTANGLE, 50, 50, 400, 150
);
shape.text_frame()->set_text("Hello from Aspose.Slides FOSS!");
prs.save("with_shape.pptx", SaveFormat::PPTX);
return 0;
}Step 5: Apply a Fill and Save
Set a solid fill color on the shape before saving:
#include <Aspose/Slides/Foss/auto_shape.h>
#include <Aspose/Slides/Foss/fill_format.h>
#include <Aspose/Slides/Foss/fill_type.h>
#include <Aspose/Slides/Foss/presentation.h>
#include <Aspose/Slides/Foss/shape_type.h>
#include <Aspose/Slides/Foss/export/save_format.h>
using namespace Aspose::Slides::Foss;
int main() {
Presentation prs;
auto& shape = prs.slides()[0].shapes().add_auto_shape(
ShapeType::RECTANGLE, 100, 100, 400, 200
);
shape.fill_format().set_fill_type(FillType::SOLID);
shape.fill_format().solid_fill_color().set_color(0xFF, 0x46, 0x82, 0xB4);
shape.text_frame()->set_text("Styled shape");
prs.save("styled.pptx", SaveFormat::PPTX);
return 0;
}Common Issues and Fixes
Linker errors with undefined references
Ensure target_link_libraries(your_target PRIVATE aspose_slides_foss) is in your
CMakeLists.txt and that the library was fetched successfully via FetchContent.
Header file not found
Include the full path starting with <Aspose/Slides/Foss/...>. Run cmake --build
from the build directory, not from the source directory.
UnsupportedOperationException equivalent for unsupported features
Some features (charts, animations, PDF export) are not supported. Check the project
documentation for the current list of limitations.
Crash when accessing slides by index
The default Presentation always creates one slide at index 0. If you loaded an empty
file or removed all slides, prs.slides()[0] will be out of range.
Frequently Asked Questions
Does aspose_slides_foss require Microsoft Office?
No. The library creates and reads .pptx files natively in C++ with no dependency
on Microsoft Office, COM automation, or Windows APIs.
Which compilers and C++ standards are supported?
The library requires C++20 or later. It is tested with GCC 11+, Clang 13+, and MSVC 2022.
Is the library free for commercial use?
Yes. It is released under the MIT License. You may use, modify, and redistribute it for any purpose, including commercial applications.
Can I load an existing PPTX file?
Yes. Pass the file path to the Presentation constructor:
Presentation prs("existing.pptx");
prs.save("copy.pptx", SaveFormat::PPTX);How do I add multiple slides?
Use prs.slides().add_empty_slide(layout) after obtaining a layout from
prs.masters()[0].layout_slides()[0].