كيفية إضافة أشكال إلى PowerPoint باستخدام C++

كيفية إضافة أشكال إلى 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 غير مُنفذة في هذا الإصدار.


انظر أيضًا

 العربية