Sådan tilføjer du former til PowerPoint i C++
Aspose.Slides FOSS for C++ understøtter at tilføje AutoShapes, Tables, Connectors og PictureFrames til præsentationsslides. Alle formtyper tilføjes gennem slide.shapes()-samlingen.
Trin-for-trin guide
Trin 1: Byg og link biblioteket
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 .Trin 2: Opret en præsentation
Brug stakallokering til RAII‑oprydning.
#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;
}Trin 3: Tilføj en AutoShape
slide.shapes().add_auto_shape(shape_type, x, y, width, height) placerer en form på den angivne position og størrelse (alle i point). Brug ShapeType konstanter til at vælge formen.
#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;
}Trin 4: Tilføj en tabel
slide.shapes().add_table(x, y, col_widths, row_heights) opretter en tabel på den angivne position. Kolonnebredder og rækkehøjder er vektorer af punktværdier.
#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;
}Trin 5: Tilføj en connector
Forbindelser forbinder to former visuelt. Opret først formerne, tilføj derefter en forbindelse og indstil dens start- og slutforbindelsespunkter.
#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;
}Forbindelsesstedindekser er nummereret 0‑3 for en rektangel: top=0, venstre=1, bund=2, højre=3.
Trin 6: Tilføj en billedramme
Indlejr et billede og tilføj det til sliden som en PictureFrame. Læs billedbytes først, tilføj dem til præsentationens billedsamling, og opret derefter rammen.
#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;
}Almindelige problemer og løsninger
Formen vises uden for det synlige slide-området
Dias er som standard 720 × 540 points. Værdier af x eller y uden for disse grænser placerer formen uden for diaset. Behold x < 720 og y < 540, og sørg for x + width <= 720 og y + height <= 540.
add_auto_shape() returnerer en reference til et destrueret objekt
Gem ikke referencer ud over levetiden for Presentation. Alle underordnede objekter ejes af Presentation og ugyldiggøres ved destruktion.
Tabelcelletekst er tom efter tildeling
Den korrekte metode er .text_frame()->set_text(). Få adgang til celler som table.rows()[row_index][col_index].text_frame()->set_text("value").
Ofte stillede spørgsmål
Hvor mange former kan jeg tilføje til et dias?
Der er ingen bibliotekspålagt grænse. Praktiske grænser afhænger af filstørrelsen og gengivelseskapaciteten i din mål‑PPTX‑fremviser.
Kan jeg ændre en formes position efter at have tilføjet den?
Ja. Shape‑objektet, der returneres af add_auto_shape(), har set_x(), set_y(), set_width() og set_height() metoder:
shape.set_x(100);
shape.set_y(200);
shape.set_width(400);
shape.set_height(80);Kan jeg indstille farven på formens omrids (kant)?
Ja, via shape.line_format():
shape.line_format().fill_format().solid_fill_color().set_color(
asf::Color::from_argb(255, 200, 0, 0));Er diagrammer understøttet?
Nej. Diagrammer, SmartArt og OLE‑objekter er ikke implementeret i denne udgave.