كيفية حفظ العروض التقديمية في C++

كيفية حفظ العروض التقديمية في C++

Aspose.Slides FOSS for C++ saves presentations exclusively to .pptx تنسيق باستخدام prs.save(path, SaveFormat::PPTX). هذا الدليل يغطي نمط الحفظ الصحيح، الحفظ إلى مسار مختلف، والأخطاء الشائعة المتعلقة بالحفظ.

دليل خطوة بخطوة

الخطوة 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: فتح أو إنشاء عرض تقديمي

استخدم تخصيص المكدس بحيث يقوم المُدمّر بالتنظيف تلقائيًا. استدعِ save() قبل أن يخرج الكائن من النطاق.

#include <Aspose/Slides/Foss/presentation.h>

int main() {
    namespace asf = Aspose::Slides::Foss;

    // Create new
    {
        asf::Presentation prs;
        prs.save("new.pptx", asf::SaveFormat::PPTX);
    }

    // Open existing
    {
        asf::Presentation prs("input.pptx");
        prs.save("output.pptx", asf::SaveFormat::PPTX);
    }

    return 0;
}

الخطوة 3: الحفظ بعد جميع التعديلات

ضع save() استدعاء بعد إكمال جميع التعديلات، ولكن قبل الـ Presentation يخرج من النطاق.

#include <Aspose/Slides/Foss/presentation.h>

int main() {
    namespace asf = Aspose::Slides::Foss;

    asf::Presentation prs;
    auto& slide = prs.slides()[0];
    auto& shape = slide.shapes().add_auto_shape(
        asf::ShapeType::RECTANGLE, 50, 50, 300, 100);
    shape.text_frame()->set_text("Hello, World!");
    prs.save("output.pptx", asf::SaveFormat::PPTX);
    return 0;
}

الخطوة 4: الحفظ إلى مسار مختلف

مرّر مسار إخراج مختلف لإنشاء ملف جديد دون تعديل الأصلي:

asf::Presentation prs("template.pptx");
// modify ...
prs.save("customized.pptx", asf::SaveFormat::PPTX);

الـ template.pptx الملف غير معدل؛; customized.pptx يتم إنشاؤه (أو استبداله إذا كان موجودًا بالفعل).


الخطوة 5: التحقق من الناتج

بعد الحفظ، تحقق من وجود الملف:

#include <filesystem>
#include <iostream>

auto output = std::filesystem::path("output.pptx");
std::cout << "Saved: " << std::filesystem::exists(output)
          << ", size: " << std::filesystem::file_size(output) << " bytes\n";

صيغة الحفظ المدعومة

تنسيققيمة Enumمدعوم
PPTX (Office Open XML)SaveFormat::PPTXنعم
PDFN/Aلا
HTMLN/Aلا
SVGN/Aلا
PNG / JPEGN/Aلا
ODP (OpenDocument)N/Aلا

يتم دعم PPTX فقط. محاولة الحفظ بأي صيغة أخرى ستؤدي إلى رمي استثناء.


المشكلات الشائعة والحلول

خطأ رفض الإذن عند الكتابة

الملف الناتج مفتوح في تطبيق آخر (مثلاً PowerPoint يفتح الملف). أغلق الملف في التطبيقات الأخرى قبل الحفظ.

تم إنشاء الملف لكنه يظهر فارغًا أو معطوبًا

تأكد prs.save() يتم استدعاؤه قبل الـ Presentation يتم تدمير الكائن. بعد التدمير، يتم تحرير الحالة الداخلية وستفشل الاستدعاءات اللاحقة أو تنتج مخرجات غير صالحة.

استثناء عند الحفظ

يحدث هذا عند محاولة حفظ بصيغة غير PPTX، أو عند استخدام ميزة غير مدعومة (مثل المخططات أو الرسوم المتحركة) أثناء الحفظ.


الأسئلة المتكررة

هل يمكنني الحفظ إلى نفس الملف الذي فتحته؟?

نعم. الحفظ إلى نفس المسار يستبدل الملف الأصلي:

asf::Presentation prs("deck.pptx");
// modify ...
prs.save("deck.pptx", asf::SaveFormat::PPTX); // overwrites original

هل يمكنني الحفظ إلى مخزن ذاكرة بدلاً من ملف؟?

الحفظ مباشرةً إلى std::vector<uint8_t> أو std::ostream غير مدعوم في واجهة برمجة التطبيقات الحالية. احفظ إلى ملف مؤقت واقرأ البايتات:

#include <filesystem>
#include <fstream>
#include <vector>

auto tmp = std::filesystem::temp_directory_path() / "temp.pptx";
prs.save(tmp.string(), asf::SaveFormat::PPTX);

std::ifstream in(tmp, std::ios::binary);
std::vector<uint8_t> bytes((std::istreambuf_iterator<char>(in)),
                            std::istreambuf_iterator<char>());
std::filesystem::remove(tmp);

هل يحافظ الحفظ على المحتوى الذي لم أعدله؟?

نعم. يتم الحفاظ على أجزاء XML غير المعروفة من الملف الأصلي كما هي. تقوم المكتبة بتسلسل فقط الأجزاء من نموذج المستند التي تفهمها، وتترك أي XML لا تتعرف عليه كما هو.


انظر أيضًا

 العربية