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

نمای کلی

پس از اینکه یک ارائه ایجاد کردید یا یک ارائه موجود را باز کنید، از روش Presentation::save برای نوشتن نتیجه استفاده کنید. Aspose.Slides for PHP via Java می‌تواند ارائه را در قالب PowerPoint، OpenDocument، PDF و سایر فرمت‌ها به یک فایل یا جریان ذخیره کند. بخش‌های زیر عملیات ذخیره‌سازی استاندارد و گزینه‌های موجود برای خروجی PPTX را پوشش می‌دهند.

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

برای ذخیره یک ارائه به فایل، مسیر خروجی و مقدار SaveFormat را به متد Presentation::save پاس دهید. مقدار فرمت نوع فایلی که Aspose.Slides ایجاد می‌کند را تعیین می‌کند.

مثال زیر یک ارائه ایجاد می‌کند و آن را به عنوان فایل PPTX ذخیره می‌نماید:

use aspose\slides\Presentation;
use aspose\slides\SaveFormat;

$presentation = new Presentation();
try {
    // محتوا یا اسلایدهای ارائه را اینجا اضافه یا اصلاح کنید.

    $presentation->save("Output.pptx", SaveFormat::Pptx);
} finally {
    $presentation->dispose();
}

ذخیره ارائه‌ها در فرمت اصلی آن‌ها

برای مثال‌های تشخیص فایل و جریان، رفتار ارائه‌های تازه ایجاد شده و تمایز بین فرمت‌های منبع و خروجی، به Determine the Original Presentation Format مراجعه کنید.

در یک برنامه پردازش دسته‌ای، ممکن است فرمت ورودی از پیش شناخته‌شده نباشد. پس از بارگذاری یک فایل، فرمت اصلی آن را با استفاده از متد Presentation::getSourceFormat بخوانید. مقدار SourceFormat حاصل را به SlideUtil::toSaveFormat پاس دهید تا مقدار SaveFormat متناظر به دست آید، سپس از Presentation::save برای نوشتن ارائهٔ تغییر یافته استفاده کنید.

مثال کامل زیر هر فایل را در یک پوشهٔ ورودی پردازش می‌کند، عنوان آن را به‌روز می‌سازد و در پوشهٔ خروجی به فرمتی که از آن بارگذاری شده است ذخیره می‌کند:

use aspose\slides\Presentation;
use aspose\slides\SlideUtil;

$inputDirectory = __DIR__ . DIRECTORY_SEPARATOR . "Input";
$outputDirectory = __DIR__ . DIRECTORY_SEPARATOR . "Output";

if (!is_dir($outputDirectory) && !mkdir($outputDirectory, 0777, true)) {
    echo("Cannot create the output directory." . PHP_EOL);
}

$inputFiles = is_dir($inputDirectory) ? scandir($inputDirectory) : false;
if ($inputFiles !== false && is_dir($outputDirectory)) {
    foreach ($inputFiles as $fileName) {
        $inputPath = $inputDirectory . DIRECTORY_SEPARATOR . $fileName;
        if (!is_file($inputPath)) {
            continue;
        }

        $presentation = null;
        $presentationLoaded = false;
        try {
            $presentation = new Presentation($inputPath);
            $presentationLoaded = true;
            $saveFormat = SlideUtil::toSaveFormat($presentation->getSourceFormat());
            $presentation->getDocumentProperties()->setTitle("Processed by the batch application");

            $outputPath = $outputDirectory . DIRECTORY_SEPARATOR . $fileName;
            $presentation->save($outputPath, $saveFormat);
        } catch (\Throwable $exception) {
            echo("Cannot process '" . $inputPath . "': " . $exception->getMessage() . PHP_EOL);
        } finally {
            if ($presentationLoaded) {
                $presentation->dispose();
            }
        }
    }
}

SlideUtil::toSaveFormat فرمت‌های PPT، PPTX، ODP، PPTM، PPSX، PPSM، POTX، POTM، PPS، POT، OTP، FODP و XML PowerPoint را به فرمت‌های ذخیرهٔ ارائهٔ متناظرشان نگاشت می‌کند. این نگاشت فقط برای فرمت‌های منبع ارائه است؛ برای انتخاب فرمت‌های خروجی مانند PDF، HTML، TIFF یا تصاویر طراحی نشده است. ارسال مقدار SourceFormat پشتیبانی‌نشده یا نامعتبر منجر به ایجاد یک IllegalArgumentException می‌شود.

فایل‌های قدیمی PPT، PPS و POT از همان بستهٔ باینری استفاده می‌کنند. هنگام بارگذاری چنین ارائه‌ای از یک جریان بدون پسوند فایل، ممکن است یک فایل PPS یا POT به عنوان PPT شناسایی شود. اگر حفظ این زیرنوع‌های قدیمی لازم باشد، نام فایل اصلی یا فرادادهٔ فرمت را به‌طور جداگانه نگه دارید و هنگام انتخاب نام فایل و فرمت خروجی از آن استفاده کنید.

ذخیره ارائه‌ها به جریان‌ها

برای نوشتن یک ارائه بدون وابستگی به مسیر نهایی فایل، یک جریان قابل نوشتن و مقدار SaveFormat را به متد Presentation::save پاس دهید. این روش زمانی مفید است که خروجی باید از یک سرویس وب بازگردانده شود، در پایگاه داده ذخیره شود یا در حافظه پردازش شود.

مثال زیر یک ارائهٔ جدید را به یک جریان فایل ذخیره می‌کند:

use aspose\slides\Presentation;
use aspose\slides\SaveFormat;

$presentation = new Presentation();
try {
    $outputStream = new Java("java.io.FileOutputStream", "Output.pptx");
    try {
        $presentation->save($outputStream, SaveFormat::Pptx);
    } finally {
        $outputStream->close();
    }
} finally {
    $presentation->dispose();
}

ذخیره ارائه‌ها با نوع نمای پیش‌تعریف‌شده

می‌توانید نمایی را که PowerPoint هنگام باز کردن اولیهٔ یک ارائهٔ ذخیره‌شده استفاده می‌کند، مشخص کنید. پیش از ذخیره، از متد ViewProperties::setLastView با مقدار ViewType استفاده کنید.

مثال زیر نمای Slide Master را به عنوان نمای اولیه تنظیم می‌کند:

use aspose\slides\Presentation;
use aspose\slides\SaveFormat;
use aspose\slides\ViewType;

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

ذخیره ارائه‌ها در فرمت Strict Office Open XML

برای ایجاد یک فایل PPTX که با پروفایل Strict از Office Open XML سازگار باشد، یک نمونهٔ PptxOptions ایجاد کرده و با استفاده از متد PptxOptions::setConformance مقدار Conformance::Iso29500_2008_Strict را تنظیم کنید. سپس گزینه‌ها را به متد Presentation::save پاس دهید.

use aspose\slides\Conformance;
use aspose\slides\PptxOptions;
use aspose\slides\Presentation;
use aspose\slides\SaveFormat;

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

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

ذخیره ارائه‌ها در فرمت Office Open XML در حالت Zip64

یک آرشیو ZIP استاندارد اندازهٔ فشرده و غیر فشرده هر ورودی، کل اندازهٔ آرشیو و تعداد ورودی‌ها را محدود می‌کند. از آنجا که یک فایل PPTX یک آرشیو ZIP است، یک ارائهٔ بسیار بزرگ می‌تواند این محدودیت‌ها را عبور کند. افزونه‌های Zip64 محدودیت‌های مربوط به اندازه و تعداد ورودی‌ها را افزایش می‌دهند.

از متد PptxOptions::setZip64Mode برای کنترل اینکه آیا Aspose.Slides افزونه‌های ZIP64 می‌نویسد یا نه استفاده کنید:

  • IfNecessary فقط زمانی از ZIP64 استفاده می‌کند که ارائه از محدودیت‌های استاندارد ZIP عبور کند. این حالت پیش‌فرض است.
  • Never افزونه‌های ZIP64 را غیرفعال می‌کند.
  • Always همیشه افزونه‌های ZIP64 را می‌نویسد.

مثال زیر همیشه افزونه‌های ZIP64 را برای ارائهٔ خروجی فعال می‌کند:

use aspose\slides\PptxOptions;
use aspose\slides\Presentation;
use aspose\slides\SaveFormat;
use aspose\slides\Zip64Mode;

$presentation = new Presentation("Sample.pptx");
try {
    $options = new PptxOptions();
    $options->setZip64Mode(Zip64Mode::Always);

    $presentation->save("OutputZip64.pptx", SaveFormat::Pptx, $options);
} finally {
    $presentation->dispose();
}

ذخیره ارائه‌ها در فرمت Office Open XML با سطوح فشرده‌سازی

برای خروجی PPTX، می‌توانید با استفاده از متد PptxOptions::setCompressionLevel سرعت ذخیره‌سازی را در مقابل اندازهٔ فایل متعادل کنید. کلاس CompressionLevel این مقادیر را ارائه می‌دهد:

  • None داده‌ها را بدون فشرده‌سازی ذخیره می‌کند.
  • Level1 سریع‌ترین فشرده‌سازی و بزرگ‌ترین خروجی فشرده را فراهم می‌کند.
  • Level2 تا Level5 به‌تدریج خروجی کوچکتر را به قیمت سرعت ذخیره‌سازی ترجیح می‌دهند.
  • Level6 بین سرعت ذخیره و اندازهٔ فایل تعادل برقرار می‌کند. این سطح پیش‌فرض است.
  • Level7 و Level8 بیشتر خروجی کوچکتر را نسبت به سرعت ذخیره ترجیح می‌دهند.
  • Level9 قوی‌ترین فشرده‌سازی را فراهم می‌کند و بیشترین زمان پردازش را می‌طلبد.

مثال زیر یک ارائه را بدون فشرده‌سازی ذخیره می‌کند:

use aspose\slides\CompressionLevel;
use aspose\slides\PptxOptions;
use aspose\slides\Presentation;
use aspose\slides\SaveFormat;

$presentation = new Presentation("Sample.pptx");
try {
    $options = new PptxOptions();
    $options->setCompressionLevel(CompressionLevel::None);

    $presentation->save("OutputNoCompression.pptx", SaveFormat::Pptx, $options);
} finally {
    $presentation->dispose();
}

مثال زیر از حداکثر سطح فشرده‌سازی استفاده می‌کند:

use aspose\slides\CompressionLevel;
use aspose\slides\PptxOptions;
use aspose\slides\Presentation;
use aspose\slides\SaveFormat;

$presentation = new Presentation("Sample.pptx");
try {
    $options = new PptxOptions();
    $options->setCompressionLevel(CompressionLevel::Level9);

    $presentation->save("OutputMaximumCompression.pptx", SaveFormat::Pptx, $options);
} finally {
    $presentation->dispose();
}

ذخیره ارائه‌ها بدون به‌روزرسانی تصویر بندانگشتی

هنگام ذخیرهٔ یک ارائه به صورت PPTX، متد PptxOptions::setRefreshThumbnail تصویر بندانگشتی سند را کنترل می‌کند:

  • true تصویر بندانگشتی را در طول عملیات ذخیره بازسازی می‌کند. این مقدار پیش‌فرض است.
  • false تصویر بندانگشتی موجود را حفظ می‌کند. اگر ارائه تصویر بندانگشتی نداشته باشد، Aspose.Slides هیچ‌کدام را تولید نمی‌کند.

مثال زیر یک ارائه را بدون به‌روزرسانی تصویر بندانگشتی ذخیره می‌کند:

use aspose\slides\PptxOptions;
use aspose\slides\Presentation;
use aspose\slides\SaveFormat;

$presentation = new Presentation("Sample.pptx");
try {
    $options = new PptxOptions();
    $options->setRefreshThumbnail(false);

    $presentation->save("Output.pptx", SaveFormat::Pptx, $options);
} finally {
    $presentation->dispose();
}

به‌روزرسانی پیشرفت ذخیره به درصد

برای نظارت بر یک عملیات ذخیره، یک پروکسی Java که رابط IProgressCallback را پیاده‌سازی می‌کند، فراهم کنید و این پروکسی را به متد SaveOptions::setProgressCallback پاس دهید. سپس Aspose.Slides متد IProgressCallback::reporting را با مقادیر پیشرفت در طول خروجی فراخوانی می‌کند.

مثال زیر پیشرفت یک خروجی PDF را به کنسول گزارش می‌دهد:

use aspose\slides\PdfOptions;
use aspose\slides\Presentation;
use aspose\slides\SaveFormat;

class ExportProgressHandler {
    function reporting($progressValue) {
        $progress = java("java.lang.Double")->valueOf($progressValue)->intValue();
        echo($progress . "% of the file has been converted." . PHP_EOL);
    }
}

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

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

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

سوالات متداول

آیا Aspose.Slides از ذخیره incremental یا “ذخیره سریع” پشتیبانی می‌کند؟

خیر. هر عملیات ذخیره یک فایل خروجی کامل می‌نویسد و فقط بخش‌های تغییر یافته را به‌روز نمی‌کند.

آیا چندین رشته می‌توانند همان نمونهٔ Presentation را ذخیره کنند؟

خیر. یک نمونهٔ Presentation thread‑safe نیست. دسترسی و ذخیره هر نمونه باید فقط از یک رشته به‌صورت همزمان انجام شود.

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

Hyperlinks در ارائه باقی می‌مانند. Aspose.Slides فایل‌های لینک‌شده خارجی را کپی نمی‌کند، بنابراین ارائهٔ ذخیره‌شده باید همچنان قادر به دسترسی به مکان‌های آن‌ها باشد.

آیا می‌توانم متادیتای سند مانند نویسنده، عنوان، شرکت و تاریخ ایجاد را ذخیره کنم؟

بله. قبل از ذخیره، ویژگی‌های سند مناسب را تنظیم کنید و Aspose.Slides آنها را در فایل خروجی می‌نویسد.