كيفية إضافة أشكال إلى 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 المستهدف على العرض.
هل يمكنني تغيير موضع الشكل بعد إضافته؟
نعم. كائن الشكل الذي تم إرجاعه بواسطة 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 غير مُنفذة في هذا الإصدار.