حفظ العروض التقديمية في PHP

نظرة عامة

Open Presentations in PHP تم وصفه كيف يتم استخدام فئة Presentation لفتح عرض تقديمي. تشرح هذه المقالة كيفية إنشاء العروض التقديمية وحفظها. فئة Presentation تحتوي على محتويات العرض التقديمي. سواء كنت تنشئ عرضًا تقديميًا من الصفر أو تعدل أحد العروض الموجودة، فستحتاج إلى حفظه عندما تنتهي. باستخدام Aspose.Slides لـ PHP، يمكنك الحفظ إلى ملف أو تيار. تشرح هذه المقالة الطرق المختلفة لحفظ عرض تقديمي.

حفظ العروض التقديمية إلى ملفات

احفظ عرضًا تقديميًا إلى ملف عن طريق استدعاء طريقة save الخاصة بفئة Presentation. مرر اسم الملف وتنسيق الحفظ إلى الطريقة. المثال التالي يوضح كيفية حفظ عرض تقديمي باستخدام Aspose.Slides.

// إنشاء كائن من فئة Presentation التي تمثل ملف عرض تقديمي.
$presentation = new Presentation();
try {
    // قم ببعض الأعمال هنا...

    // احفظ العرض التقديمي إلى ملف.
    $presentation->save("Output.pptx", SaveFormat::Pptx);
} finally {
    $presentation->dispose();
}

حفظ العروض التقديمية إلى تيارات

يمكنك حفظ عرض تقديمي إلى تيار بتمرير تيار إخراج إلى طريقة save في فئة Presentation. يمكن كتابة العرض التقديمي إلى أنواع متعددة من التيارات. في المثال أدناه، ننشئ عرضًا تقديميًا جديدًا ونحفظه إلى تيار ملف.

// إنشاء كائن من فئة Presentation التي تمثل ملف عرض تقديمي.
$presentation = new Presentation();
try {
    $fileStream = new Java("java.io.FileOutputStream", "Output.pptx");
    try {
        // احفظ العرض التقديمي إلى التيار.
        $presentation->save($fileStream, SaveFormat::Pptx);
    } finally {
        $fileStream->close();
    }
} finally {
    $presentation->dispose();
}

حفظ العروض التقديمية بنوع عرض محدد مسبقًا

يسمح لك Aspose.Slides بتعيين العرض الأولي الذي يستخدمه PowerPoint عند فتح العرض التقديمي الذي تم إنشاؤه عبر فئة ViewProperties. استخدم طريقة setLastView مع قيمة من تعداد ViewType.

$presentation = new Presentation();
try {
    $presentation->getViewProperties()->setLastView(ViewType::SlideMasterView);
    $presentation->save("SlideMasterView.pptx", SaveFormat::Pptx);
} finally {
    $presentation->dispose();
}

حفظ العروض التقديمية بتنسيق Strict Office Open XML

يسمح لك Aspose.Slides بحفظ عرض تقديمي بتنسيق Strict Office Open XML. استخدم فئة PptxOptions وحدد خاصية التوافق عند الحفظ. إذا قمت بتعيين Conformance.Iso29500_2008_Strict، سيتم حفظ ملف الإخراج بتنسيق Strict Office Open XML.

المثال أدناه ينشئ عرضًا تقديميًا ويحفظه بتنسيق Strict Office Open XML.

$options = new PptxOptions();
$options->setConformance(Conformance::Iso29500_2008_Strict);

// إنشاء كائن من فئة Presentation التي تمثل ملف عرض تقديمي.
$presentation = new Presentation();
try {
    // حفظ العرض التقديمي بتنسيق Strict Office Open XML.
    $presentation->save("StrictOfficeOpenXml.pptx", SaveFormat::Pptx, $options);
} finally {
    $presentation->dispose();
}

حفظ العروض التقديمية بتنسيق Office Open XML في وضع Zip64

ملف Office Open XML هو أرشيف ZIP يفرض حدودًا قدرها 4 GB (2^32 بايت) على الحجم غير المضغوط لأي ملف، وحجم أي ملف مضغوط، وإجمالي حجم الأرشيف، ويقيد الأرشيف بـ 65 535 (2^16‑1) ملفًا. تمتد تنسيقات ZIP64 لرفع هذه الحدود إلى 2^64.

تتيح طريقة PptxOptions.setZip64Mode لك اختيار متى تستخدم امتدادات تنسيق ZIP64 عند حفظ ملف Office Open XML.

يمكن استخدام هذه الطريقة مع الأوضاع التالية:

  • IfNecessary يستخدم امتدادات تنسيق ZIP64 فقط إذا تجاوز العرض التقديمي القيود المذكورة أعلاه. هذا هو الوضع الافتراضي.
  • Never لا يستخدم امتدادات تنسيق ZIP64 أبداً.
  • Always يستخدم امتدادات تنسيق ZIP64 دائماً.

الكود التالي يوضح كيفية حفظ عرض تقديمي كملف PPTX مع تمكين امتدادات تنسيق ZIP64:

$pptxOptions = new PptxOptions();
$pptxOptions->setZip64Mode(Zip64Mode::Always);

$presentation = new Presentation("Sample.pptx");
try {
    $presentation->save("OutputZip64.pptx", SaveFormat::Pptx, $pptxOptions);
} finally {
    $presentation->dispose();
}

حفظ العروض التقديمية بتنسيق Office Open XML مع مستويات الضغط

عند التعامل مع عروض تقديمية كبيرة، يمكنك ضبط مستوى الضغط لتحقيق التوازن بين حجم الملف ووقت المعالجة. حسب متطلباتك، قد تفضّل معالجة أسرع أو ملفات أصغر.

توفر Aspose.Slides طريقة PptxOptions.setCompressionLevel التي تسمح لك بتحديد مستوى الضغط المستخدم عند حفظ عرض تقديمي بتنسيق Office Open XML.

المستويات المتاحة للضغط هي:

  • None: لا يتم تطبيق أي ضغط. تُحفظ الملفات كما هي.
  • Level1: أسرع ضغط بأقل نسبة ضغط.
  • Level2: ضغط أسرع مع نسبة ضغط أفضل قليلاً من Level1.
  • Level3: يوفر ضغطًا أفضل من Level2 مع تأثير متوسط على وقت المعالجة.
  • Level4: يوفر ضغطًا أفضل من Level3.
  • Level5: يحسن الضغط مقارنةً بـ Level4 مع وقت معالجة إضافي.
  • Level6: ضغط قياسي يوفّر توازنًا جيدًا بين سرعة المعالجة وحجم الملف. هذا هو مستوى الضغط الافتراضي.
  • Level7: يوفر ضغطًا أفضل من Level6 مع معالجة أبطأ.
  • Level8: يوفر ضغطًا أفضل من Level7.
  • Level9: أقصى ضغط. ينتج أصغر حجم ملف على حساب أطول وقت معالجة.

المثال التالي يوضح كيفية حفظ عرض تقديمي كملف PPTX بدون ضغط:

$pptxOptions = new PptxOptions();
$pptxOptions->setCompressionLevel(CompressionLevel::None);

$presentation = new Presentation("Sample.pptx");
try {
    $presentation->save("Sample-out.pptx", SaveFormat::Pptx, $pptxOptions);
} finally {
    $presentation->dispose();
}

هذا المثال يوضح كيفية حفظ عرض تقديمي كملف PPTX مع أقصى ضغط:

$pptxOptions = new PptxOptions();
$pptxOptions->setCompressionLevel(CompressionLevel::Level9);

$presentation = new Presentation("Sample.pptx");
try {
    $presentation->save("Sample-level9.pptx", SaveFormat::Pptx, $pptxOptions);
} finally {
    $presentation->dispose();
}

حفظ العروض التقديمية دون تحديث الصورة المصغرة

تتحكم طريقة PptxOptions.setRefreshThumbnail في توليد الصورة المصغرة عند حفظ العرض التقديمي إلى PPTX:

  • إذا تم ضبطه على true، يتم تحديث الصورة المصغرة أثناء الحفظ. هذا هو الإعداد الافتراضي.
  • إذا تم ضبطه على false، تُحافظ على الصورة المصغرة الحالية. إذا لم يكن للعرض التقديمي صورة مصغرة، لن يتم إنشاء واحدة.

في الكود أدناه، يتم حفظ العرض التقديمي إلى PPTX دون تحديث صورته المصغرة.

$pptxOptions = new PptxOptions();
$pptxOptions->setRefreshThumbnail(false);

$presentation = new Presentation("Sample.pptx");
try {
    $presentation->save("Output.pptx", SaveFormat::Pptx, $pptxOptions);
}
finally {
    $presentation->dispose();
}

حفظ تحديثات التقدم كنسبة مئوية

يتم تكوين تقارير حفظ التقدم عبر طريقة setProgressCallback في فئة SaveOptions وفئاتها الفرعية. قدّم وكيل Java يُطبق واجهة IProgressCallback؛ أثناء التصدير، يتلقى الوكيل تحديثات دورية بالنسب المئوية.

المقاطع البرمجية التالية توضح كيفية استخدام IProgressCallback.

class ExportProgressHandler {
    function reporting($progressValue) {
        // استخدم قيمة النسبة المئوية للتقدم هنا.
        $progress = java("java.lang.Double")->valueOf($progressValue)->intValue();
        echo($progress . "% of the file has been converted.");
    }
}

$progressHandler = java_closure(new ExportProgressHandler(), null, java("com.aspose.slides.IProgressCallback"));

$saveOptions = new PdfOptions();
$saveOptions->setProgressCallback($progressHandler);

$presentation = new Presentation("Sample.pptx");
try {
    $presentation->save("Output.pdf", SaveFormat::Pdf, $saveOptions);
} finally {
    $presentation->dispose();
}

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

هل يدعم “الحفظ السريع” (الحفظ التزايدي) بحيث تُكتب التغييرات فقط؟

لا. كل عملية حفظ تُنشئ الملف الهدف بالكامل؛ لا يُدعم الحفظ التزايدي “السريع”.

هل يمكن حفظ نفس كائن Presentation من عدة خيوط بصورة آمنة؟

لا. كائن Presentation ليس آمنًا للقراءة المتعددة؛ احفظه من خيط واحد فقط.

ماذا يحدث للروابط التشعبية والملفات المرتبطة خارجيًا عند الحفظ؟

الروابط التشعبية تُحافظ عليها. الملفات المرتبطة خارجيًا (مثل الفيديوهات عبر مسارات نسبية) لا تُنسخ تلقائيًا – تأكد من أن المسارات المرجعية لا تزال قابلة للوصول.

هل يمكن تعيين/حفظ بيانات تعريف المستند (المؤلف، العنوان، الشركة، التاريخ)؟

نعم. يتم دعم خصائص المستند القياسية document properties وستُكتب إلى الملف عند الحفظ.