كيفية إنشاء العروض التقديمية في C++
يتيح لك Aspose.Slides FOSS for C++ إنشاء عروض PowerPoint بالكامل باستخدام C++ دون الاعتماد على Microsoft Office. يوضح هذا الدليل كيفية إنشاء عرض تقديمي جديد، وإضافة الشرائح والأشكال، وتنسيق النص، وحفظ النتيجة.
دليل خطوة بخطوة
الخطوة 1: إضافة المكتبة إلى مشروع CMake الخاص بك
استخدم CMake FetchContent لدمج المكتبة مباشرةً من GitHub. يتطلب C++20 أو أحدث.
cmake_minimum_required(VERSION 3.20)
project(my_slides_app LANGUAGES CXX)
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
include(FetchContent)
FetchContent_Declare(
aspose_slides_foss
GIT_REPOSITORY https://github.com/aspose-slides-foss/Aspose.Slides-FOSS-for-Cpp.git
GIT_TAG main
)
FetchContent_MakeAvailable(aspose_slides_foss)
add_executable(my_app main.cpp)
target_link_libraries(my_app PRIVATE aspose_slides_foss)لا توجد حزم نظام أخرى مطلوبة.
الخطوة 2: تضمين الرؤوس المطلوبة
#include <Aspose/Slides/Foss/presentation.h>جميع الأنواع موجودة في مساحة الاسم Aspose::Slides::Foss. للتقليل، تستخدم الأمثلة أدناه اسمًا مستعارًا لمساحة الاسم.
namespace asf = Aspose::Slides::Foss;الخطوة 3: إنشاء عرض تقديمي
قم بإنشاء Presentation على المكدس. يبدأ عرض تقديمي جديد بشريحة فارغة واحدة.
#include <Aspose/Slides/Foss/presentation.h>
#include <iostream>
int main() {
namespace asf = Aspose::Slides::Foss;
asf::Presentation prs;
std::cout << "Slides in new presentation: " << prs.slides().size() << "\n";
prs.save("output.pptx", asf::SaveFormat::PPTX);
return 0;
}مهم: استخدم تخصيص المكدس أو std::unique_ptr بحيث يقوم المدمر بتحرير الموارد الداخلية تلقائيًا.
الخطوة 4: الوصول إلى شريحة
الشريحة الأولى في الفهرس 0. العرض التقديمي الفارغ يحتوي على شريحة واحدة بالضبط.
namespace asf = Aspose::Slides::Foss;
asf::Presentation prs;
auto& slide = prs.slides()[0]; // zero-based index
prs.save("output.pptx", asf::SaveFormat::PPTX);الخطوة 5: إضافة شكل
استخدم slide.shapes().add_auto_shape() لإضافة AutoShape. المعلمات هي (shape_type, x, y, width, height) جميعها بوحدات النقاط (نقطة واحدة = 1/72 بوصة؛ الشريحة القياسية هي 720 × 540 نقطة).
#include <Aspose/Slides/Foss/presentation.h>
int main() {
namespace asf = Aspose::Slides::Foss;
asf::Presentation prs;
auto& slide = prs.slides()[0];
// Rectangle at (50, 50) with 400 wide and 120 tall
auto& shape = slide.shapes().add_auto_shape(
asf::ShapeType::RECTANGLE, 50, 50, 400, 120);
// Set text on the shape's text frame
shape.text_frame()->set_text("Hello from Aspose.Slides FOSS!");
prs.save("with-shape.pptx", asf::SaveFormat::PPTX);
return 0;
}الخطوة 6: حفظ العرض التقديمي
استدعِ prs.save(path, SaveFormat::PPTX) قبل أن يخرج Presentation من النطاق. PPTX هو تنسيق الإخراج الوحيد المدعوم.
prs.save("result.pptx", asf::SaveFormat::PPTX);يتم كتابة الملف بشكل ذري؛ إذا حدث خطأ قبل هذه الدالة، لن يتم إنشاء ملف إخراج.
مثال عملي كامل
البرنامج التالي ينشئ عرض تقديمي من شريحتين مع شكل عنوان في الشريحة الأولى وجدول في الشريحة الثانية.
#include <Aspose/Slides/Foss/presentation.h>
#include <vector>
#include <string>
int main() {
namespace asf = Aspose::Slides::Foss;
asf::Presentation prs;
// --- Slide 1: title shape ---
auto& slide1 = prs.slides()[0];
auto& title = slide1.shapes().add_auto_shape(
asf::ShapeType::RECTANGLE, 40, 40, 640, 80);
title.text_frame()->set_text("Q1 Results: Executive Summary");
auto& fmt = title.text_frame()->paragraphs()[0].portions()[0].portion_format();
fmt.set_font_height(32);
fmt.set_font_bold(asf::NullableBool::TRUE);
fmt.fill_format().set_fill_type(asf::FillType::SOLID);
fmt.fill_format().solid_fill_color().set_color(
asf::Color::from_argb(255, 0, 70, 127));
// --- Slide 2: table ---
prs.slides().add_empty_slide(&prs.layout_slides()[0]);
auto& slide2 = prs.slides()[1];
std::vector<double> col_w = {200.0, 120.0, 120.0};
std::vector<double> row_h = {40.0, 40.0, 40.0};
auto& table = slide2.shapes().add_table(40, 40, col_w, row_h);
std::vector<std::string> headers = {"Region", "Revenue", "Growth"};
std::vector<std::vector<std::string>> data = {
{"North", "$1.2M", "+8%"},
{"South", "$0.9M", "+4%"},
};
for (size_t col = 0; col < headers.size(); ++col) {
table.rows()[0][col].text_frame()->set_text(headers[col]);
}
for (size_t r = 0; r < data.size(); ++r) {
for (size_t c = 0; c < data[r].size(); ++c) {
table.rows()[r + 1][c].text_frame()->set_text(data[r][c]);
}
}
prs.save("q1-results.pptx", asf::SaveFormat::PPTX);
return 0;
}المشكلات الشائعة والحلول
Segfault أو double-free عند تدمير Presentation
أنت تقوم بتخزين مرجع أو مؤشر إلى شريحة أو شكل بعد أن تم تدمير Presentation. جميع المراجع التي تُرجعها slides()، shapes()، إلخ تُصبح غير صالحة عندما يُنفّذ مُدمّر Presentation. حافظ على بقاء Presentation حياً طوال المدة التي تستخدم فيها كائناته الفرعية.
SaveFormat::PPTX is not a function خطأ في المترجم
SaveFormat::PPTX هو قيمة تعداد، وليس دالة. استخدمه كـ prs.save("file.pptx", asf::SaveFormat::PPTX).
خطأ الرابط: إشارة غير معرفة إلى Aspose::Slides::Foss::Presentation
تأكد من أن CMakeLists.txt يربط بالمكتبة باستخدام target_link_libraries(my_app PRIVATE aspose_slides_foss).
الأسئلة المتكررة
ما هو حجم الشريحة الافتراضي؟
ينشئ Presentation() جديد شرائح بالحجم القياسي 10 × 7.5 بوصة (720 × 540 نقطة). تغيير حجم الشريحة غير مدعوم بعد في هذا الإصدار.
هل يمكنني إضافة أكثر من شريحة واحدة؟
نعم. استدعِ prs.slides().add_empty_slide(&prs.layout_slides()[0]) لإضافة شريحة فارغة والوصول إليها عبر الفهرس:
prs.slides().add_empty_slide(&prs.layout_slides()[0]);
auto& slide2 = prs.slides()[1];هل يمكنني فتح ملف موجود وإضافة شرائح؟
نعم:
asf::Presentation prs("existing.pptx");
prs.slides().add_empty_slide(&prs.layout_slides()[0]);
prs.save("existing.pptx", asf::SaveFormat::PPTX);ما الصيغ التي يمكنني الحفظ إليها؟
يتم دعم SaveFormat::PPTX فقط. التصدير إلى PDF أو HTML أو SVG أو الصور غير متوفر في هذا الإصدار.