Kuinka lisätä muotoja PowerPointiin C++:lla
Aspose.Slides FOSS for C++ tukee AutoShapes, Tables, Connectors ja PictureFrames -objektien lisäämistä esitysdioihin. Kaikki muoto-tyypit lisätään slide.shapes()-kokoelman kautta.
Vaiheittainen opas
Vaihe 1: Rakenna ja linkitä kirjasto
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 .Vaihe 2: Luo esitys
Käytä pinomallista allokointia RAII-puhdistukseen.
#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;
}Vaihe 3: Lisää AutoShape
slide.shapes().add_auto_shape(shape_type, x, y, width, height) sijoittaa muodon annettuun sijaintiin ja kokoon (kaikki pisteinä). Käytä ShapeType vakioita muodon valitsemiseen.
#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;
}Vaihe 4: Lisää taulukko
slide.shapes().add_table(x, y, col_widths, row_heights) luo taulukon määritetyssä sijainnissa. Sarakeleveydet ja rivikorkeudet ovat pistearvojen vektoreita.
#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;
}Vaihe 5: Lisää liitin
Liittimet yhdistävät kaksi muotoa visuaalisesti. Luo muodot ensin, sitten lisää liitin ja aseta sen aloitus‑ ja lopetuspisteet.
#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;
}Yhteyspisteiden indeksit on numeroitu 0‑3 suorakulmiolle: ylä=0, vasen=1, ala=2, oikea=3.
Vaihe 6: Lisää kuvan kehys
Upota kuva ja lisää se diaan PictureFrame-kuvana. Lue kuvan tavut ensin, lisää ne esityksen kuvakokoelmaan ja luo sitten kehys.
#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;
}Yleisiä ongelmia ja korjauksia
Muoto näkyy näkyvän dian alueen ulkopuolella
Diat ovat oletuksena 720 × 540 pistettä. x‑ tai y‑arvot, jotka ylittävät nämä rajat, asettavat muodon dian ulkopuolelle. Säilytä x < 720 ja y < 540, ja varmista x + width <= 720 ja y + height <= 540.
add_auto_shape() palauttaa viitteen tuhottuun objektiin
Älä tallenna viitteitä Presentation-objektin elinkaaren jälkeen. Kaikki lapsiobjektit omistaa Presentation ja ne mitätöidään tuhoutumisen yhteydessä.
Taulukon solun teksti on tyhjä määrittämisen jälkeen
Oikea menetelmä on .text_frame()->set_text(). Soluihin pääsee table.rows()[row_index][col_index].text_frame()->set_text("value").
Usein kysytyt kysymykset
Kuinka monta muotoa voin lisätä diaan?
Kirjaston asettamaa rajoitusta ei ole. Käytännön rajoitukset riippuvat tiedoston koosta ja kohde‑PPTX‑katselimen renderöintikyvystä.
Voinko muuttaa muodon sijaintia sen lisäämisen jälkeen?
Kyllä. add_auto_shape()‑funktion palauttavalla shape‑objektilla on set_x(), set_y(), set_width() ja set_height()‑menetelmät:
shape.set_x(100);
shape.set_y(200);
shape.set_width(400);
shape.set_height(80);Voinko asettaa muodon ääriviivan (reunan) värin?
Kyllä, via shape.line_format():
shape.line_format().fill_format().solid_fill_color().set_color(
asf::Color::from_argb(255, 200, 0, 0));Tukeeko kaavioita?
Ei. Kaaviot, SmartArt ja OLE-objektit eivät ole toteutettu tässä versiossa.