ASPOSE.SLIDES FOR C++ · NATIVE ON-PREMISES LIBRARY · NO MICROSOFT OFFICE REQUIRED

PowerPoint files, from C++.

Aspose.Slides for C++ creates, edits, converts and renders PowerPoint and OpenDocument presentations from native C++. It compiles and links straight into your own binary - no .NET runtime, no JVM, no bridge process, no Office install, no COM automation, no display server. Prebuilt libraries ship for Windows on MSVC 2017 or later, Linux on GCC 6.1 or Clang 3.9, and macOS on Xcode 13.4.

Download free trial Documentation Full API on trial · watermark on output
Install
Console
Install-Package Aspose.Slides.Cpp
32-bit
Install-Package Aspose.Slides.Cpp.x86
Header
DOM/Presentation.h
Other platforms, same object model
RUNS ON

Windows with Visual Studio 2017 or later. Linux with GCC 6.1 or Clang 3.9 on glibc 2.23 or later, which covers Ubuntu 16.04, CentOS 8, Fedora 24 and anything newer. macOS Monterey 12.1 or later with Xcode 13.4. CMake 3.18 or later anywhere outside Visual Studio. Prebuilt x86_64 binaries on all three platforms, arm64 as well on macOS, and a separate package for 32-bit Windows. No .NET runtime and no JVM anywhere in the chain. On a minimal Linux or macOS image install a common font package, or rendered text falls back to whatever happens to be present and the metrics shift.

Prefer not to host it yourself? The same work is available as a hosted REST API through Aspose.Slides Cloud.

  • 189 / 82

    Shape types and chart types, each a real object that PowerPoint still recognises and lets a person edit.

  • 13 -> 12

    Presentation formats read and written, including the pre-2007 binary .ppt container and OpenDocument .odp, plus 9 further export targets.

  • 1

    NuGet package for Visual Studio, headers and prebuilt libraries in the box. On Linux and macOS the same build ships as one archive you point CMake at.

  • 0

    Microsoft Office installs, .NET runtimes and JVMs needed. It is native code linked into your own process, so a small Linux container plus a font package is enough.

Five things people actually write

All examples on GitHub →

Each sample is the whole program, C++ as shipped. Pick the job on the left.

PPTX -> PDF / HTML / TIFF C++
#include <DOM/Presentation.h>
#include <Export/PdfOptions.h>
#include <Export/SaveFormat.h>
#include <system/smart_ptr.h>

using namespace Aspose::Slides;
using namespace Aspose::Slides::Export;
using namespace System;

int main()
{
    auto presentation = MakeObject<Presentation>(u"quarterly-review.pptx");

    // Straight to PDF on the defaults.
    presentation->Save(u"quarterly-review.pdf", SaveFormat::Pdf);

    // Or tune the render first.
    auto options = MakeObject<PdfOptions>();
    options->set_JpegQuality(90);
    options->set_SufficientResolution(300);
    presentation->Save(u"print-ready.pdf", SaveFormat::Pdf, options);

    // Same loaded object, other targets.
    presentation->Save(u"quarterly-review.html", SaveFormat::Html);
    presentation->Save(u"quarterly-review.tiff", SaveFormat::Tiff);

    presentation->Dispose();
    return 0;
}
One Save call per target. PdfOptions, HtmlOptions and TiffOptions control resolution, compression and PDF/A compliance when the defaults are not enough. Documentation →
PPTX -> PNG per slide C++
#include <DOM/ISlide.h>
#include <DOM/ISlideCollection.h>
#include <DOM/Presentation.h>
#include <IImage.h>
#include <ImageFormat.h>
#include <system/smart_ptr.h>
#include <system/string.h>

using namespace Aspose::Slides;
using namespace System;

int main()
{
    auto presentation = MakeObject<Presentation>(u"quarterly-review.pptx");

    // Scale is relative to the slide's nominal size, so 2.0f doubles both axes.
    const float scale = 2.0f;

    for (int32_t i = 0; i < presentation->get_Slides()->get_Count(); i++)
    {
        auto image = presentation->get_Slide(i)->GetImage(scale, scale);
        image->Save(String::Format(u"slide_{0}.png", i + 1), ImageFormat::Png);
        image->Dispose();
    }

    presentation->Dispose();
    return 0;
}
GetImage takes a scale pair, an explicit Size, or rendering options that place speaker notes and comments inside the frame. Documentation →
values -> ChartData -> PPTX C++
#include <DOM/Chart/ChartType.h>
#include <DOM/Chart/IChartCategoryCollection.h>
#include <DOM/Chart/IChartData.h>
#include <DOM/Chart/IChartDataPointCollection.h>
#include <DOM/Chart/IChartDataWorkbook.h>
#include <DOM/Chart/IChartSeries.h>
#include <DOM/Chart/IChartSeriesCollection.h>
#include <DOM/IChart.h>
#include <DOM/IShapeCollection.h>
#include <DOM/ISlide.h>
#include <DOM/ISlideCollection.h>
#include <DOM/Presentation.h>
#include <Export/SaveFormat.h>
#include <system/object_ext.h>
#include <system/smart_ptr.h>
#include <system/string.h>
#include <vector>

using namespace Aspose::Slides;
using namespace Aspose::Slides::Charts;
using namespace Aspose::Slides::Export;
using namespace System;

int main()
{
    const std::vector<String> quarters = { u"Q1", u"Q2", u"Q3", u"Q4" };
    const std::vector<double> revenue  = { 12.4, 15.1, 13.8, 19.6 };

    auto presentation = MakeObject<Presentation>();
    auto slide = presentation->get_Slide(0);

    auto chart = slide->get_Shapes()->AddChart(
        ChartType::ClusteredColumn, 50.0f, 50.0f, 600.0f, 400.0f);

    auto data = chart->get_ChartData();
    auto book = data->get_ChartDataWorkbook();

    // Drop the placeholder data a new chart is seeded with.
    data->get_Series()->Clear();
    data->get_Categories()->Clear();

    const int32_t sheet = 0;

    for (int32_t row = 0; row < static_cast<int32_t>(quarters.size()); row++)
    {
        data->get_Categories()->Add(
            book->GetCell(sheet, row + 1, 0, ObjectExt::Box<String>(quarters[row])));
    }

    data->get_Series()->Add(
        book->GetCell(sheet, 0, 1, ObjectExt::Box<String>(u"Revenue")),
        chart->get_Type());

    auto series = data->get_Series()->idx_get(0);

    for (int32_t row = 0; row < static_cast<int32_t>(revenue.size()); row++)
    {
        series->get_DataPoints()->AddDataPointForBarSeries(
            book->GetCell(sheet, row + 1, 1, ObjectExt::Box<double>(revenue[row])));
    }

    presentation->Save(u"revenue.pptx", SaveFormat::Pptx);
    presentation->Dispose();
    return 0;
}
AddChart writes a genuine OOXML chart with its own cached workbook, so whoever opens the deck can click the chart and edit the numbers behind it. Documentation →
PPTX -> encrypted PPTX C++
#include <DOM/IProtectionManager.h>
#include <DOM/Presentation.h>
#include <Export/SaveFormat.h>
#include <system/smart_ptr.h>

using namespace Aspose::Slides;
using namespace Aspose::Slides::Export;
using namespace System;

int main()
{
    auto presentation = MakeObject<Presentation>(u"quarterly-review.pptx");
    auto protection = presentation->get_ProtectionManager();

    // Opens for anyone, but PowerPoint asks for this before it will save edits.
    protection->SetWriteProtection(u"edit-password");

    // Encrypts the file itself. Without this one, nothing opens it at all.
    protection->Encrypt(u"open-password");

    presentation->Save(u"quarterly-review-locked.pptx", SaveFormat::Pptx);
    presentation->Dispose();
    return 0;
}
Encrypt sets the password required to open the file. SetWriteProtection leaves it readable and only guards saving. RemoveEncryption and CheckWriteProtection undo and test the same state. Documentation →
PPTX + PPTX -> PPTX C++
#include <DOM/ISlide.h>
#include <DOM/ISlideCollection.h>
#include <DOM/Presentation.h>
#include <Export/SaveFormat.h>
#include <system/smart_ptr.h>

using namespace Aspose::Slides;
using namespace Aspose::Slides::Export;
using namespace System;

int main()
{
    auto destination = MakeObject<Presentation>(u"deck-a.pptx");
    auto source = MakeObject<Presentation>(u"deck-b.pptx");

    // Each clone arrives with its own layout and master intact.
    for (const auto& slide : source->get_Slides())
    {
        destination->get_Slides()->AddClone(slide);
    }

    destination->Save(u"merged.pptx", SaveFormat::Pptx);

    source->Dispose();
    destination->Dispose();
    return 0;
}
AddClone copies a slide with its layout and master. Two further overloads take a destination master or layout instead, when everything should land in one house style. Documentation →

What goes in, what comes out

Read in only

Other content read inplaced into a presentation rather than opened as one

  • HTML
  • PDF
  • raster image

Read onlyno writer in the API

  • PPT95

Aspose.Slides

12 formats read and written — presentation files, proven by writing each one and reading it back.

  • FODP
  • ODP
  • OTP
  • POT
  • POTM
  • POTX
  • PPS
  • PPSM
  • PPSX
  • PPT
  • PPTM
  • PPTX

Written out only

Written onlyexport targets, not presentation files

  • GIF
  • HTML
  • HTML5
  • MD
  • PDF
  • SWF
  • TIFF
  • XML
  • XPS

Slide imagesrendered from a slide

  • BMP
  • EMF
  • GIF
  • JPEG
  • PNG
  • SVG
  • TIFF
Read from the shipping package on 2026-08-21 by writing each file out and reading it back in.

Capabilities, one line each

The whole object model is exposed as C++ classes - slides, layouts and masters, shapes and groups, text down to the portion, tables, charts, SmartArt, animation timelines, comments and the renderer behind every export - with nothing held back on this runtime.

As of 2026-08-18. 49 presentation SDKs and services surveyed. Next re-test: November 2026.

File formats
  • Reads OOXML presentations
  • Writes .pptx
  • Reads legacy binary PowerPoint
  • Writes legacy binary .ppt
  • Reads OpenDocument presentations
  • Writes .odp
  • Exports to PDF
  • Imports PDF into a presentation
  • Exports slides to raster images
  • Exports to HTML
  • Extracts text / Markdown / JSON
Deployment
  • Runs entirely on the customer's own infrastructure
  • Offered as a hosted API the customer calls — through Aspose.Slides Cloud, a separate product
  • Runs without a Microsoft Office / LibreOffice installation
  • Works with no outbound network access
Document operations
  • Create from nothing
  • Open, modify, save back
  • Preserve untouched content
  • Merge or append presentations
  • Slide thumbnails
  • Create charts
Non-functional
  • Published performance numbers — one published capacity figure, no benchmark suite
  • Air-gapped install and licensing
API & language reach
  • .NET · Java / JVM · Python · C / C++
  • JavaScript / TypeScript / Node · PHP
  • Android, SharePoint and JasperReports integrations
  • Language-agnostic REST/HTTP API — through Aspose.Slides Cloud, a separate product
Ecosystem & support
  • Public API reference and guides
  • Runnable sample projects
  • Paid support and escalation

Runs where your code already runs

Where a build of this library is supported, and what each target is for.

  • Aspose.Slides for .NET

    One NuGet package for .NET Framework 4.x and .NET 6 or later, with no native prerequisite alongside it.

    WINDOWS · LINUX · MACOS

  • Aspose.Slides for Java

    A single JAR from Maven Central, published against a JDK classifier. Pure Java, nothing native to place.

    JVM 8+

  • Aspose.Slides for Python via .NET

    A wheel that carries the engine with it, so pip install is the whole setup.

    WINDOWS · LINUX · MACOS

  • Aspose.Slides for Node.js via Java

    An npm package driving the Java build across a bridge. A JDK 8 or later must be installed and JAVA_HOME set.

    NODE · JDK REQUIRED

  • Aspose.Slides for PHP via Java

    PHP scripts calling the Java build through the same bridge, so a JDK is a hard prerequisite here too.

    PHP · JDK REQUIRED

The same object model ships for .NET, Java, Python, Node.js, PHP and Android. Class names, enumerations and save-format constants carry across unchanged, so a routine written against this page reads almost line for line on the next runtime.All high-code APIs →

Start with the trial, license when you ship

The trial is the full API. It applies an evaluation watermark when a presentation is opened or saved and replaces extracted text with an evaluation notice, so you can test the formats you actually care about before you talk to anyone. A temporary licence lifts both for 30 days.

If you don't want a library

Aspose.Slides Cloud is a hosted REST API for loading, creating, editing and converting presentations.

In use

The product worked as advertised, the documentation was easy to follow, and the support forums were all the help we needed. The final solution that we deployed has exceeded our initial expectations by a great deal.

— BRUCE BRIEN · STRATASCOPE INC, USA

ASPOSE.SLIDES FOR C++ · PRODUCTS.ASPOSE.COMPRESENTATION AUTOMATION WITHOUT MICROSOFT OFFICE