Wie man Präsentationen in C++ erstellt

Wie man Präsentationen in C++ erstellt

Aspose.Slides FOSS for C++ ermöglicht es Ihnen, PowerPoint‑Präsentationen vollständig in C++ zu erstellen, ohne dass eine Abhängigkeit von Microsoft Office besteht. Dieser Leitfaden zeigt, wie man eine neue Präsentation erstellt, Folien und Formen hinzufügt, Text formatiert und das Ergebnis speichert.

Schritt-für-Schritt-Anleitung

Schritt 1: Bibliothek zu Ihrem CMake‑Projekt hinzufügen

Verwenden Sie CMake FetchContent, um die Bibliothek direkt von GitHub zu integrieren. C++20 oder höher ist erforderlich.

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)

Keine weiteren Systempakete sind erforderlich.


Schritt 2: Erforderliche Header einbinden

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

Alle Typen befinden sich im Aspose::Slides::Foss‑Namespace. Der Übersicht halber verwenden die nachstehenden Beispiele einen Namespace‑Alias:

namespace asf = Aspose::Slides::Foss;

Schritt 3: Präsentation erstellen

Erstelle ein Presentation im Stack. Eine neue Präsentation beginnt mit einer leeren Folie.

#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;
}

Wichtig: Verwenden Sie die Stack-Allocation oder std::unique_ptr, damit der Destruktor interne Ressourcen automatisch freigibt.


Schritt 4: Zugriff auf eine Folie

Die erste Folie hat den Index 0. Eine leere Präsentation hat genau eine Folie.

namespace asf = Aspose::Slides::Foss;

asf::Presentation prs;
auto& slide = prs.slides()[0]; // zero-based index
prs.save("output.pptx", asf::SaveFormat::PPTX);

Schritt 5: Form hinzufügen

Verwenden Sie slide.shapes().add_auto_shape(), um eine AutoShape hinzuzufügen. Die Parameter sind (shape_type, x, y, width, height), alle in Punkten (1 Punkt = 1/72 Zoll; Standardfolie ist 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;
}

Schritt 6: Präsentation speichern

Rufen Sie prs.save(path, SaveFormat::PPTX) auf, bevor Presentation aus dem Gültigkeitsbereich geht. PPTX ist das einzige unterstützte Ausgabeformat.

prs.save("result.pptx", asf::SaveFormat::PPTX);

Die Datei wird atomar geschrieben; tritt ein Fehler vor diesem Aufruf auf, wird keine Ausgabedatei erstellt.


Vollständiges funktionierendes Beispiel

Das folgende Programm erstellt eine zweifolige Präsentation mit einer Titelform auf der ersten Folie und einer Tabelle auf der zweiten.

#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;
}

Häufige Probleme und Lösungen

Segfault oder Double-Free bei der Zerstörung von Presentation

Sie speichern eine Referenz oder einen Zeiger auf eine Folie oder Form, nachdem das Presentation zerstört wurde. Alle von slides(), shapes() usw. zurückgegebenen Referenzen werden ungültig, wenn der Destruktor von Presentation ausgeführt wird. Halten Sie das Presentation für die gesamte Dauer, in der Sie seine Kindobjekte verwenden, am Leben.

SaveFormat::PPTX is not a function Compiler-Fehler

SaveFormat::PPTX ist ein Enum‑Wert, keine Funktion. Verwenden Sie ihn als prs.save("file.pptx", asf::SaveFormat::PPTX).

Linker-Fehler: undefinierte Referenz auf Aspose::Slides::Foss::Presentation

Stellen Sie sicher, dass Ihr CMakeLists.txt gegen die Bibliothek mit target_link_libraries(my_app PRIVATE aspose_slides_foss) verlinkt.


Häufig gestellte Fragen

Wie lautet die Standardfoliengröße?

Ein neuer Presentation() erstellt Folien in der Standardgröße von 10 × 7,5 Zoll (720 × 540 Punkt). Das Ändern der Foliengröße wird in dieser Ausgabe noch nicht unterstützt.

Kann ich mehr als eine Folie hinzufügen?

Ja. Rufen Sie prs.slides().add_empty_slide(&prs.layout_slides()[0]) auf, um eine leere Folie anzufügen und über den Index darauf zuzugreifen:

prs.slides().add_empty_slide(&prs.layout_slides()[0]);
auto& slide2 = prs.slides()[1];

Kann ich eine bestehende Datei öffnen und Folien hinzufügen?

Ja:

asf::Presentation prs("existing.pptx");
prs.slides().add_empty_slide(&prs.layout_slides()[0]);
prs.save("existing.pptx", asf::SaveFormat::PPTX);

In welche Formate kann ich speichern?

Nur SaveFormat::PPTX wird unterstützt. Der Export in PDF, HTML, SVG oder Bilder ist in dieser Ausgabe nicht verfügbar.


Siehe auch

 Deutsch