كيفية إضافة أشكال إلى PowerPoint في C++

كيفية إضافة أشكال إلى PowerPoint في C++

Aspose.Slides FOSS for C++ supports adding AutoShapes, Tables, Connectors, and PictureFrames to presentation slides. All shape types are added through the 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 .

الخطوة الثانية: إعداد عرض

استخدم تخصيص الستار لتنظيف 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;
}

الخطوة الخامسة: إضافة جهاز اتصال

يربط الاتصالات شكلين بصريًا.إنشاء الأشكال أولاً، ثم إضافة اتصال وتعيين نقاط البداية والنهاية للاتصال.

#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::Drawing::Color::from_argb(255, 200, 0, 0));

هل يتم دعم الرسوم البيانية؟?

لا يتم تنفيذ الرسوم البيانية، SmartArt، و OLE الكائنات في هذا الإصدار.


انظر أيضا

 العربية