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.