Hoe vormen toevoegen aan PowerPoint in C++

Hoe vormen toevoegen aan PowerPoint in C++

Aspose.Slides FOSS for C++ ondersteunt het toevoegen van AutoShapes, Tables, Connectors en PictureFrames aan presentatieslides. Alle vormtypen worden toegevoegd via de slide.shapes()-collectie.

Stapsgewijze handleiding

Stap 1: Bouw en link de bibliotheek

git clone https://github.com/aspose-slides-foss/Aspose.Slides-FOSS-for-Cpp.git
cd Aspose.Slides-FOSS-for-Cpp && mkdir build && cd build
cmake .. && cmake --build .

Stap 2: Maak een presentatie

Gebruik stapelallocatie voor RAII‑opschoning.

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

int main() {
    namespace asf = Aspose::Slides::Foss;

    asf::Presentation prs;
    auto& slide = prs.slides()[0];
    // ... add shapes ...
    prs.save("output.pptx", asf::SaveFormat::PPTX);
    return 0;
}

Stap 3: Voeg een AutoShape toe

slide.shapes().add_auto_shape(shape_type, x, y, width, height) plaatst een vorm op de opgegeven positie en grootte (allemaal in punten). Gebruik ShapeType constanten om de vorm te selecteren.

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

int main() {
    namespace asf = Aspose::Slides::Foss;

    asf::Presentation prs;
    auto& slide = prs.slides()[0];

    // Rectangle
    auto& rect = slide.shapes().add_auto_shape(
        asf::ShapeType::RECTANGLE, 50, 50, 300, 100);
    rect.text_frame()->set_text("Rectangle shape");

    // Ellipse
    auto& ellipse = slide.shapes().add_auto_shape(
        asf::ShapeType::ELLIPSE, 400, 50, 200, 100);
    ellipse.text_frame()->set_text("Ellipse shape");

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

Stap 4: Voeg een tabel toe

slide.shapes().add_table(x, y, col_widths, row_heights) maakt een tabel op de opgegeven positie. Kolombreedtes en rijhoogtes zijn vectoren van puntwaarden.

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

int main() {
    namespace asf = Aspose::Slides::Foss;

    asf::Presentation prs;
    auto& slide = prs.slides()[0];

    std::vector<double> col_widths = {150.0, 150.0, 150.0};
    std::vector<double> row_heights = {40.0, 40.0, 40.0};
    auto& table = slide.shapes().add_table(50, 200, col_widths, row_heights);

    // Set header row text
    std::vector<std::string> headers = {"Product", "Units", "Revenue"};
    for (size_t col = 0; col < headers.size(); ++col) {
        table.rows()[0][col].text_frame()->set_text(headers[col]);
    }

    // Set data rows
    std::vector<std::vector<std::string>> rows = {
        {"Widget A", "120", "$2,400"},
        {"Widget B", "85",  "$1,700"},
    };
    for (size_t r = 0; r < rows.size(); ++r) {
        for (size_t c = 0; c < rows[r].size(); ++c) {
            table.rows()[r + 1][c].text_frame()->set_text(rows[r][c]);
        }
    }

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

Stap 5: Voeg een connector toe

Connectoren koppelen twee vormen visueel. Maak eerst de vormen, voeg vervolgens een connector toe en stel de start‑ en eindkoppelingspunten in.

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

int main() {
    namespace asf = Aspose::Slides::Foss;

    asf::Presentation prs;
    auto& slide = prs.slides()[0];

    auto& box1 = slide.shapes().add_auto_shape(
        asf::ShapeType::RECTANGLE, 50, 100, 150, 60);
    box1.text_frame()->set_text("Start");

    auto& box2 = slide.shapes().add_auto_shape(
        asf::ShapeType::RECTANGLE, 350, 100, 150, 60);
    box2.text_frame()->set_text("End");

    auto& conn = slide.shapes().add_connector(
        asf::ShapeType::BENT_CONNECTOR3, 0, 0, 10, 10);
    conn.set_start_shape_connected_to(&box1);
    conn.set_start_shape_connection_site_index(3); // right side of box1
    conn.set_end_shape_connected_to(&box2);
    conn.set_end_shape_connection_site_index(1);   // left side of box2

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

Connectieplaatsindices worden genummerd 0‑3 voor een rechthoek: top=0, left=1, bottom=2, right=3.


Stap 6: Voeg een fotolijst toe

Voeg een afbeelding in en voeg deze toe aan de dia als een PictureFrame. Lees eerst de afbeeldingsbytes, voeg ze toe aan de afbeeldingscollectie van de presentatie en maak vervolgens het frame.

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

int main() {
    namespace asf = Aspose::Slides::Foss;

    asf::Presentation prs;

    std::ifstream file("logo.png", std::ios::binary);
    std::vector<uint8_t> data((std::istreambuf_iterator<char>(file)),
                               std::istreambuf_iterator<char>());

    auto& image = prs.images().add_image(data);

    auto& slide = prs.slides()[0];
    slide.shapes().add_picture_frame(
        asf::ShapeType::RECTANGLE, // bounding shape type
        50, 50,                    // x, y in points
        200, 150,                  // width, height in points
        image);

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

Veelvoorkomende problemen en oplossingen

Vorm verschijnt buiten het zichtbare dia‑gebied

Dia’s zijn standaard 720 × 540 punten. Waarden van x of y buiten die grenzen plaatsen de vorm buiten de dia. Bewaar x < 720 en y < 540, en zorg ervoor dat x + width <= 720 en y + height <= 540.

add_auto_shape() retourneert een referentie naar een vernietigd object

Bewaar geen referenties buiten de levensduur van de Presentation. Alle kindobjecten behoren toe aan de Presentation en worden ongeldig bij vernietiging.

Tabelceltekst is leeg na toewijzing

De juiste methode is .text_frame()->set_text(). Toegang tot cellen als table.rows()[row_index][col_index].text_frame()->set_text("value").


Veelgestelde vragen

Hoeveel vormen kan ik aan een dia toevoegen?

Er is geen door de bibliotheek opgelegde limiet. Praktische limieten hangen af van de bestandsgrootte en de renderingscapaciteit van uw doel‑PPTX‑viewer.

Kan ik de positie van een vorm wijzigen nadat ik deze heb toegevoegd?

Ja. Het shape-object dat wordt geretourneerd door add_auto_shape() heeft set_x(), set_y(), set_width() en set_height() methoden:

shape.set_x(100);
shape.set_y(200);
shape.set_width(400);
shape.set_height(80);

Kan ik de vormcontour (rand)kleur instellen?

Ja, via shape.line_format():

shape.line_format().fill_format().solid_fill_color().set_color(
    asf::Color::from_argb(255, 200, 0, 0));

Zijn grafieken ondersteund?

Nee. Grafieken, SmartArt en OLE‑objecten zijn niet geïmplementeerd in deze editie.


Zie ook

 Nederlands