ذخیره ارائه‌ها در PHP

مروری کلی

Open Presentations in PHP نحوه استفاده از کلاس Presentation برای باز کردن یک ارائه را توصیف کرد. این مقاله توضیح می‌دهد چگونه ارائه‌ها را ایجاد و ذخیره کنید. کلاس Presentation شامل محتوای یک ارائه است. چه از ابتدا یک ارائه ایجاد کنید و چه یک ارائه موجود را ویرایش کنید، در پایان می‌خواهید آن را ذخیره کنید. با Aspose.Slides برای PHP می‌توانید به فایل یا جریان (stream) ذخیره کنید. این مقاله روش‌های مختلف ذخیره یک ارائه را توضیح می‌دهد.

ذخیره ارائه‌ها در فایل‌ها

یک ارائه را با فراخوانی متد 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 آن را هنگام ذخیره‌سازی تنظیم کنید. اگر 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 است که محدودیت ۴ گیگابایت (۲^۳۲ بایت) برای اندازهٔ فشرده‌نشدهٔ هر فایل، اندازهٔ فشردهٔ هر فایل و کل آرشیو اعمال می‌کند و همچنین تعداد فایل‌ها را به ۶۵٬۵۳۵ (۲^۱۶‑۱) محدود می‌سازد. افزونه‌های فرمت ZIP64 این محدودیت‌ها را به ۲^۶۴ افزایش می‌دهند.

متد PptxOptions.setZip64Mode به شما اجازه می‌دهد هنگام ذخیرهٔ یک فایل Office Open XML مشخص کنید چه زمانی از افزونه‌های فرمت ZIP64 استفاده شود.

این متد می‌تواند با حالت‌های زیر استفاده شود:

  • 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 را پیاده‌سازی می‌کند ارائه کنید؛ در طول خروجی، این callback به‌صورت دوره‌ای به‌روزرسانی‌های درصدی دریافت می‌کند.

کدهای زیر نشان می‌دهند چگونه از 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 thread‑safe نیست؛ آن را فقط از یک رشته ذخیره کنید.

هنگام ذخیره چه اتفاقی برای پیوندهای هیپرتکست و فایل‌های پیوند خارجی می‌افتد؟

Hyperlinks حفظ می‌شوند. فایل‌های پیوند خارجی (مثلاً ویدئوها با مسیرهای نسبی) به‌صورت خودکار کپی نمی‌شوند؛ اطمینان حاصل کنید مسیرهای ارجاعی در دسترس باقی بمانند.

آیا می‌توان متادیتای سند (نویسنده، عنوان، شرکت، تاریخ) را تنظیم/ذخیره کرد؟

بله. ویژگی‌های استاندارد document properties پشتیبانی می‌شوند و در زمان ذخیره به فایل نوشته می‌شوند.