Hoe Presentaties te Maken in C++

Hoe Presentaties te Maken in C++

Aspose.Slides FOSS for C++ stelt je in staat om PowerPoint‑presentaties volledig in C++ te maken zonder afhankelijkheid van Microsoft Office. Deze gids laat zien hoe je een nieuwe presentatie maakt, dia’s en vormen toevoegt, tekst opmaakt en het resultaat opslaat.

Stapsgewijze handleiding

Stap 1: Voeg de bibliotheek toe aan uw CMake‑project

Gebruik CMake FetchContent om de bibliotheek rechtstreeks van GitHub te integreren. C++20 of hoger is vereist.

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)

Er zijn geen andere systeempakketten vereist.


Stap 2: Voeg de vereiste headers toe

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

Alle typen bevinden zich in de Aspose::Slides::Foss namespace. Voor de beknoptheid gebruiken de onderstaande voorbeelden een namespace‑alias:

namespace asf = Aspose::Slides::Foss;

Stap 3: Maak een presentatie

Construeer een Presentation op de stack. Een nieuwe presentatie begint met één lege dia.

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

Belangrijk: Gebruik stackallocatie of std::unique_ptr zodat de destructor interne resources automatisch vrijgeeft.


Stap 4: Toegang tot een dia

De eerste dia bevindt zich op index 0. Een lege presentatie heeft precies één dia.

namespace asf = Aspose::Slides::Foss;

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

Stap 5: Voeg een vorm toe

Gebruik slide.shapes().add_auto_shape() om een AutoShape toe te voegen. De parameters zijn (shape_type, x, y, width, height), allemaal in punten (1 punt = 1/72 inch; standaard dia is 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;
}

Stap 6: Presentatie opslaan

Roep prs.save(path, SaveFormat::PPTX) aan voordat de Presentation buiten het bereik valt. PPTX is het enige ondersteunde uitvoerformaat.

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

Het bestand wordt atomair geschreven; als er een fout optreedt vóór deze aanroep, wordt er geen uitvoerbestand aangemaakt.


Volledig Werkend Voorbeeld

Het volgende programma maakt een presentatie met twee dia’s, met een titelvorm op de eerste dia en een tabel op de tweede.

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

Veelvoorkomende problemen en oplossingen

Segfault of double-free bij Presentation vernietiging

U slaat een referentie of pointer naar een dia of vorm op nadat de Presentation is vernietigd. Alle referenties die worden geretourneerd door slides(), shapes(), enz. worden ongeldig wanneer de destructor van Presentation wordt uitgevoerd. Houd de Presentation gedurende de hele periode dat u zijn kindobjecten gebruikt in leven.

SaveFormat::PPTX is not a function compilerfout

SaveFormat::PPTX is een enum-waarde, geen functie. Gebruik het als prs.save("file.pptx", asf::SaveFormat::PPTX).

Linker-fout: ongedefinieerde verwijzing naar Aspose::Slides::Foss::Presentation

Zorg ervoor dat uw CMakeLists.txt linkt tegen de bibliotheek met target_link_libraries(my_app PRIVATE aspose_slides_foss).


Veelgestelde vragen

Wat is de standaarddiaformaat?

Een nieuwe Presentation() maakt dia’s aan in de standaardgrootte van 10 × 7.5 inch (720 × 540 punten). Het wijzigen van de dia‑grootte wordt in deze editie nog niet ondersteund.

Kan ik meer dan één dia toevoegen?

Ja. Roep prs.slides().add_empty_slide(&prs.layout_slides()[0]) aan om een lege dia toe te voegen en er via de index toegang toe te krijgen:

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

Kan ik een bestaand bestand openen en dia’s toevoegen?

Ja:

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

In welke formaten kan ik opslaan?

Alleen SaveFormat::PPTX wordt ondersteund. Exporteren naar PDF, HTML, SVG of afbeeldingen is niet beschikbaar in deze editie.


Zie ook

 Nederlands