Wie man Formen zu PowerPoint in C++ hinzufügt
Aspose.Slides FOSS for C++ unterstützt das Hinzufügen von AutoShapes, Tables, Connectors und PictureFrames zu Präsentationsfolien. Alle Shape‑Typen werden über die slide.shapes()‑Sammlung hinzugefügt.
Schritt-für-Schritt-Anleitung
Schritt 1: Bibliothek erstellen und verlinken
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: Präsentation erstellen
Verwenden Sie die Stapelzuweisung für RAII‑Aufräumungen.
#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: AutoShape hinzufügen
slide.shapes().add_auto_shape(shape_type, x, y, width, height) platziert eine Form an der angegebenen Position und Größe (alle in Punkten). Verwenden Sie ShapeType Konstanten, um die Form auszuwählen.
#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: Tabelle hinzufügen
slide.shapes().add_table(x, y, col_widths, row_heights) erstellt eine Tabelle an der angegebenen Position. 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: Connector hinzufügen
Verbinder verknüpfen zwei Formen visuell. Erstellen Sie zuerst die Formen, fügen Sie dann einen Verbinder hinzu und setzen Sie dessen Start‑ und Endanschlusspunkte.
#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;
}Verbindungsstellen-Indizes werden für ein Rechteck von 0‑3 nummeriert: oben=0, links=1, unten=2, rechts=3.
Schritt 6: Bildrahmen hinzufügen
Betten Sie ein Bild ein und fügen Sie es der Folie als PictureFrame hinzu. Lesen Sie zuerst die Bildbytes, fügen Sie sie der Bildsammlung 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 Folienbereichs
Folien haben standardmäßig 720 × 540 Punkte. Werte von x oder y, die diese Grenzen überschreiten, platzieren die Form außerhalb der Folie. Behalte x < 720 und y < 540 bei und stelle sicher, dass x + width <= 720 und y + height <= 540.
add_auto_shape() gibt eine Referenz auf ein zerstörtes Objekt zurück
Speichern Sie keine Referenzen über die Lebensdauer des Presentation hinaus. Alle Kindobjekte gehören dem Presentation und werden bei der Zerstörung ungültig.
Tabellenzellen-Text ist nach Zuweisung leer
Die korrekte Methode ist .text_frame()->set_text(). Greifen Sie auf Zellen zu mit table.rows()[row_index][col_index].text_frame()->set_text("value").
Häufig gestellte Fragen
Wie viele Formen kann ich zu einer Folie hinzufügen?
Es gibt keine von der Bibliothek auferlegte Grenze. Praktische Grenzen hängen von der Dateigröße und der Rendering‑Fähigkeit Ihres Ziel‑PPTX‑Viewers ab.
Kann ich die Position einer Form ändern, nachdem ich sie hinzugefügt habe?
Ja. Das Shape‑Objekt, das von add_auto_shape() zurückgegeben wird, hat die Methoden set_x(), set_y(), set_width() und set_height():
shape.set_x(100);
shape.set_y(200);
shape.set_width(400);
shape.set_height(80);Kann ich die Farbe der Formkontur (Rand) festlegen?
Ja, über shape.line_format():
shape.line_format().fill_format().solid_fill_color().set_color(
asf::Color::from_argb(255, 200, 0, 0));Werden Diagramme unterstützt?
Nein. Diagramme, SmartArt und OLE-Objekte sind in dieser Ausgabe nicht implementiert.