כיצד להוסיף צורות ל‑PowerPoint ב‑C++
Aspose.Slides FOSS for C++ תומך בהוספת AutoShapes, Tables, Connectors ו‑PictureFrames לשקופיות מצגת. כל סוגי הצורות מתווספים דרך האוסף slide.shapes().
מדריך שלב אחר שלב
שלב 1: בנייה וקישור הספרייה
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 .שלב 2: צור מצגת
השתמש בהקצאת מחסנית לניקוי RAII.
#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;
}שלב 3: הוסף AutoShape
slide.shapes().add_auto_shape(shape_type, x, y, width, height) ממקם צורה במיקום ובגודל הנתונים (הכול בנקודות). השתמש בקבועי ShapeType כדי לבחור את הצורה.
#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;
}שלב 4: הוסף טבלה
slide.shapes().add_table(x, y, col_widths, row_heights) יוצר טבלה במיקום המוגדר. רוחבי העמודות וגבהי השורות הם וקטורים של ערכי נקודות.
#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;
}שלב 5: הוסף מחבר
מחברים מקשרים בין שני צורות חזותית. צור את הצורות תחילה, ואז הוסף מחבר והגדר את נקודות החיבור ההתחלתיות והסופיות שלו.
#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;
}אינדקסי אתרי החיבור ממוספרים 0‑3 עבור מלבן: למעלה=0, שמאלה=1, למטה=2, ימינה=3.
שלב 6: הוסף מסגרת תמונה
הטמע תמונה והוסף אותה לשקף כ-PictureFrame. קרא תחילה את בתי הבייט של התמונה, הוסף אותם לאוסף התמונות של המצגת, ואז צור את המסגרת.
#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;
}בעיות נפוצות ותיקונים
הצורה מופיעה מחוץ לאזור השקופית הגלוי
המצגות הן 720 על 540 נקודות כברירת מחדל. ערכים של x או y מחוץ לגבולות אלה מציבים את הצורה מחוץ לשקף. שמור את x < 720 ו‑y < 540, והבטח את x + width <= 720 ו‑y + height <= 540.
add_auto_shape() מחזיר הפנייה לאובייקט שהושמד
אל תאחסן הפניות מעבר לתקופת החיים של Presentation. כל האובייקטים הצאצאים בבעלות Presentation ומבוטלים עם ההרס.
טקסט תא בטבלה ריק לאחר ההקצאה
השיטה הנכונה היא .text_frame()->set_text(). גישה לתאים כtable.rows()[row_index][col_index].text_frame()->set_text("value").
שאלות נפוצות
כמה צורות ניתן להוסיף לשקופית?
אין מגבלה שמוטלת על ידי הספרייה. המגבלות המעשיות תלויות בגודל הקובץ וביכולת הרינדור של מציג ה‑PPTX היעד שלך.
האם ניתן לשנות את מיקום הצורה לאחר שהוספתי אותה?
כן. האובייקט shape המוחזר על ידי add_auto_shape() כולל את השיטות set_x(), set_y(), set_width() ו‑set_height():
shape.set_x(100);
shape.set_y(200);
shape.set_width(400);
shape.set_height(80);האם ניתן להגדיר את צבע קו המתאר של הצורה (גבול)?
כן, דרך shape.line_format():
shape.line_format().fill_format().solid_fill_color().set_color(
asf::Color::from_argb(255, 200, 0, 0));האם גרפים נתמכים?
לא. תרשימים, SmartArt, ואובייקטי OLE אינם מיושמים בגרסה זו.