Hur man lägger till former i PowerPoint i C++
Aspose.Slides FOSS för C++ stöder att lägga till AutoShapes, Tables, Connectors och PictureFrames till presentationsbilder. Alla formtyper läggs till via slide.shapes()-samlingen.
Steg-för-steg-guide
Steg 1: Bygg och länka 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 .Steg 2: Skapa en presentation
Använd stackallokering för RAII‑rengöring.
#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;
}Steg 3: Lägg till en AutoShape
slide.shapes().add_auto_shape(shape_type, x, y, width, height) placerar en form på den angivna positionen och storleken (alla i punkter). Använd ShapeType‑konstanter för att välja 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;
}Steg 4: Lägg till en tabell
slide.shapes().add_table(x, y, col_widths, row_heights) skapar en tabell på den angivna positionen. Kolumnbredder och radhöjder är vektorer av punktvärden.
#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;
}Steg 5: Lägg till en anslutning
Kopplingar länkar två former visuellt. Skapa formerna först, lägg sedan till en koppling och ange dess start- och slutanslutningspunkter.
#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;
}Anslutningsplatsindex är numrerade 0‑3 för en rektangel: top=0, left=1, bottom=2, right=3.
Steg 6: Lägg till en bildram
Bädda in en bild och lägg till den på bilden som en PictureFrame. Läs först bildens byte, lägg till dem i presentationens bildsamling och skapa sedan ramen.
#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;
}Vanliga problem och lösningar
Formen visas utanför det synliga bildområdet
Bilder är som standard 720 × 540 punkter. Värden för x eller y utanför dessa gränser placerar formen utanför bilden. Behåll x < 720 och y < 540, och säkerställ x + width <= 720 och y + height <= 540.
add_auto_shape() returnerar en referens till ett förstört objekt
Lagra inte referenser längre än livslängden för Presentation. Alla underobjekt ägs av Presentation och ogiltigförklaras vid destruktion.
Tabellcellens text är tom efter tilldelning
Den korrekta metoden är .text_frame()->set_text(). Åtkomst till celler som table.rows()[row_index][col_index].text_frame()->set_text("value").
Vanliga frågor
Hur många former kan jag lägga till på en bild?
Det finns ingen begränsning som påläggs av biblioteket. Praktiska begränsningar beror på filstorlek och renderingskapaciteten hos din mål‑PPTX‑visare.
Kan jag ändra en formens position efter att ha lagt till den?
Ja. Shape‑objektet som returneras av add_auto_shape() har set_x(), set_y(), set_width() och set_height() metoder:
shape.set_x(100);
shape.set_y(200);
shape.set_width(400);
shape.set_height(80);Kan jag ange färgen på formens kontur (ram)?
Ja, via shape.line_format():
shape.line_format().fill_format().solid_fill_color().set_color(
asf::Color::from_argb(255, 200, 0, 0));Är diagram stödda?
Nej. Diagram, SmartArt och OLE‑objekt är inte implementerade i den här utgåvan.