1. 产品
  2.   Aspose.Slides
  3.   Aspose.Slides FOSS for C++

Aspose.Slides FOSS(适用于 C++)

使用 C++ 创建、读取和编辑 PowerPoint 演示文稿 — 免费且开源,无需依赖 Office。

用于 PowerPoint 演示文稿的开源 C++ 库

Aspose.Slides FOSS for C++ 是一个基于 MIT 许可证的库,用于处理 PowerPoint .pptx 文件。通过 CMake FetchContent 集成它,即可立即开始创建、读取和编辑演示文稿,无需安装 Microsoft Office 或任何专有运行时。

该库提供围绕 PresentationSlideShapeCollectionTextFrameParagraphPortion 构建的 Presentation API,这是 PowerPoint 本身使用的概念模型。添加和删除幻灯片,插入 AutoShape、表格和连接线,在字符级别对文本进行加粗、斜体、字号和颜色等格式设置,应用纯色或渐变填充,并添加视觉效果(阴影、发光、模糊、反射)。

RAII 语义确保可靠的资源清理:Presentation 析构函数会自动释放所有内部状态。加载期间遇到的未知 XML 部分在保存时会原样保留,因此往返处理永远不会破坏库尚未理解的内容。

该库要求使用符合 C++20 标准的编译器。

Presentation and Slide API

  • Create and open PPTX: Create new presentations or open existing .pptx files via Presentation() or Presentation(path).
  • Add and remove slides: Programmatically manage the SlideCollection with add_empty_slide(), remove(), and remove_at().
  • AutoShapes: Insert rectangles, ellipses, lines, and other ShapeType geometries via add_auto_shape().
  • Tables and Connectors: Add structured table shapes and connector lines between shapes via add_connector().
  • Speaker notes: Read and write per-slide speaker notes through NotesSlideManager.
  • Threaded comments: Access comment threads by iterating pres.comment_authors() and their associated comments.

Where Aspose.Slides FOSS Can Be Used

  • Report generation: Build branded slide decks from data sources without Office.
  • Template automation: Fill PPTX templates with dynamic content in CI/CD pipelines.
  • Content migration: Read existing presentations and restructure or re-style slides.
  • Embedded systems: Process PPTX files in performance-critical or resource-constrained environments.
  • Batch processing: Apply uniform formatting changes across large slide deck libraries.

Text Formatting and Visual Effects

  • Character-level formatting: Apply bold, italic, font size, and color to individual Portion objects via PortionFormat.
  • Solid and gradient fills: Set shape fill to a solid color or multi-stop linear gradient using FillFormat and FillType.
  • Shadow and glow effects: Apply outer shadow, glow, blur, and reflection to any shape via EffectFormat.
  • Paragraph alignment: Set left, center, right, or justify alignment per paragraph using ParagraphFormat and set_alignment().
  • Round-trip safe: Unknown XML parts are preserved verbatim on re-save.

Developer Experience

Aspose.Slides FOSS integrates via CMake FetchContent, so no manual download or system-wide installation is needed. The library builds from source alongside your project.

The API mirrors PowerPoint’s own object model (Presentation, Slide, ShapeCollection, TextFrame, Paragraph, Portion), so anyone familiar with the PowerPoint object model can use the library immediately. It is MIT-licensed, open-source on GitHub, and requires a C++20-compliant compiler.

Create a Presentation and Add a Shape

RAII ensures the Presentation destructor releases all resources automatically when the object goes out of scope. add_auto_shape() takes a ShapeType enum, then x/y position and width/height in points — the shape’s text_frame provides access to set text content.

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)
#include <Aspose/Slides/Foss/auto_shape.h>
#include <Aspose/Slides/Foss/export/save_format.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>

int main() {
    Aspose::Slides::Foss::Presentation prs;
    auto& slide = prs.slides()[0];

    // Add a rectangle AutoShape
    auto& shape = slide.shapes().add_auto_shape(
        Aspose::Slides::Foss::ShapeType::RECTANGLE,
        50, 50, 400, 150
    );
    shape.text_frame()->set_text("Hello, Aspose.Slides!");

    prs.save("output.pptx", Aspose::Slides::Foss::SaveFormat::PPTX);
    return 0;
}

Format Text and Apply a Fill Effect

Text formatting works at the Portion level — the smallest unit of a run of characters. Open the saved file, navigate to the first portion of the first paragraph, and set font properties directly. Shape fill is independent: set the fill type to solid and assign a color.

#include <Aspose/Slides/Foss/presentation.h>

namespace asf = Aspose::Slides::Foss;

int main() {
    asf::Presentation prs("output.pptx");
    auto& shape = prs.slides()[0].shapes()[0];
    auto& portion = shape.text_frame()
        ->paragraphs()[0].portions()[0];

    // Bold, 18pt text
    portion.portion_format().set_font_bold(asf::NullableBool::TRUE);
    portion.portion_format().set_font_height(18);

    // Solid background fill on the shape
    shape.fill_format().set_fill_type(asf::FillType::SOLID);

    prs.save("formatted.pptx", asf::SaveFormat::PPTX);
    return 0;
}

常见问题

What is Aspose.Slides FOSS for C++?

It is a free, MIT-licensed C++ library for creating, reading, and editing PowerPoint .pptx presentations without requiring Microsoft Office.

Which file formats are supported?

PPTX is the supported read/write format. Export to PDF, HTML, SVG, or images is not available in this edition.

Does it require Microsoft Office or PowerPoint?

No. Aspose.Slides FOSS is a standalone C++ library with no dependency on Microsoft Office, COM automation, or any proprietary runtime.

How do I install it?

Use CMake FetchContent to integrate the library directly from GitHub. The library requires a C++20-compliant compiler.

Can I apply visual effects like shadow and glow?

Yes. The library supports outer shadow, glow, blur, and reflection effects on any shape object via the EffectFormat API.

Does the library use RAII for resource management?

Yes. The Presentation destructor releases all internal state automatically, so no explicit cleanup is needed.

Will round-tripping a PPTX destroy unknown content?

No. Unknown XML parts encountered during load are preserved verbatim on save, so content the library does not yet understand is never lost.

Where can I find the source code?

The library is MIT-licensed and hosted on GitHub. Bug reports and pull requests are welcome.

  

支持和学习资源

 中文