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.