Wie man in PowerPoint Formen hinzufügt

Wie man in PowerPoint Formen hinzufügt

Aspose.Slides FOSS for C++ supports adding AutoShapes, Tables, Connectors, and PictureFrames to presentation slides. All shape types are added through the slide.shapes() Sammlung.

Schritt für Schritte

Schritt 1: Erstellen und Verknüpfen der Bibliothek

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 .

Schritt 2: Erstellen Sie eine Präsentation

Verwenden Sie die Stack-Zuteilung für RAII-Reinigung.

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

Schritt 3: Ein AutoShape hinzufügen

slide.shapes().add_auto_shape(shape_type, x, y, width, height) Die Verwendung von “System” ist nicht unbedingt erforderlich. ShapeType Konstanten zur Auswahl der Form.

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

Schritt 4: Ein Tabelle hinzufügen

slide.shapes().add_table(x, y, col_widths, row_heights) Die Spaltenbreiten und Zeilenhöhen sind Vektoren von Punktwerten.

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

Schritt 5: Hinzufügen eines Anschlusses

Die Anschlüsse verbinden zwei Formen visuell. Erstellen Sie die Forme zuerst, fügen Sie dann einen Ansprechpartner hinzu und setzen Sie seine Start- und Endverbindungspunkte fest.

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

Die Verbindungsstandorte sind für ein Rechteck 0-3 nummeriert: oben = 0, links = 1, unten = 2, rechts = 3.


Schritt 6: Ein Bildrahmen hinzufügen

Einbinden eines Bildes und fügen Sie es als ein Slide hinzu. PictureFrame.Lesen Sie die Bildbyte zuerst, fügen sie in die Bilderkollektion der Präsentation hinzu und erstellen Sie dann den Rahmen.

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

Häufige Probleme und Lösungen

Form erscheint außerhalb des sichtbaren Schiebetreffs.

Die Bilder sind standardmäßig 720 x 540 Punkte. x oder y Über diese Grenzen hinaus, legen Sie die Form abseits der Folie. x < 720 und . y < 540, und gewährleisten, dass die x + width <= 720 und y + height <= 540.

add_auto_shape() gibt einen Verweis auf ein zerstörtes Objekt zurück

Verzeichnisse über die Lebensdauer der Presentation.Alle Kinderobjekte sind im Besitz der Presentation und auf Vernichtung ungültig.

Tabellenzellentext nach Zuweisung leer .

Die richtige Methode ist: .text_frame()->set_text().Zugangszellen als table.rows()[row_index][col_index].text_frame()->set_text("value").


Häufig gestellte Fragen

Wie viele Formen kann ich einer Folie hinzufügen?

Es gibt keine Bibliotheksgrenze. Praktische Grenzen hängen von der Dateigröße und den Rendering-Fähigkeiten des Ziel-PPTX Viewers ab.

Kann ich die Position einer Form ändern, nachdem ich sie hinzugefügt habe?

Ja, das von add_auto_shape() hat set_x(), set_y(), set_width(), und set_height() Methoden:

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

Kann ich die Farbe der Form umrissen?

Ja, über die shape.line_format():

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

Werden Diagramme unterstützt?

Chart, SmartArt und OLE-Objekte werden in dieser Ausgabe nicht implementiert.


Siehe auch:

 Deutsch