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、PowerPoint XML をそれぞれのプレゼンテーション保存形式にマッピングします。これはプレゼンテーションの元形式のみを対象とし、PDF、HTML、TIFF、画像などのエクスポート形式を選択するためのものではありません。サポートされていない、または無効な SourceFormat の値を渡すと、IllegalArgumentException がスローされます。

レガシーな PPT、PPS、POT ファイルは同じバイナリ コンテナを使用します。そのようなプレゼンテーションを拡張子なしのストリームから読み込むと、PPS や POT が PPT として識別されることがあります。これらのレガシーサブタイプを保持する必要がある場合は、元のファイル名またはフォーマット メタデータを別途保持し、出力ファイル名および形式を選択するときに使用してください。

プレゼンテーションをストリームに保存

最終的なファイルパスに依存せずにプレゼンテーションを書き込むには、書き込み可能なストリームと SaveFormat の値を Presentation::save メソッドに渡します。このアプローチは、出力を Web サービスから返す必要がある場合や、データベースに保存する場合、またはメモリ内で処理する場合に便利です。

以下の例は、新しいプレゼンテーションをファイル ストリームに保存します:

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 の値を渡してください。

以下の例は、スライド マスター ビューを初期ビューとして設定します:

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 形式でプレゼンテーションを保存

Strict プロファイルに準拠した PPTX ファイルを作成するには、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();
}

Zip64 モードで Office Open XML 形式に保存

標準的な ZIP アーカイブは各エントリの圧縮サイズ・非圧縮サイズ、総アーカイブサイズ、エントリ数に制限があります。PPTX ファイルは ZIP アーカイブであるため、非常に大きなプレゼンテーションはこれらの制限を超えることがあります。ZIP64 拡張機能は、適用可能なサイズとエントリ数の制限を緩和します。

PptxOptions::setZip64Mode メソッドで Aspose.Slides が ZIP64 拡張を書き込むかどうかを制御します。

  • IfNecessary は、プレゼンテーションが標準 ZIP 制限を超える場合にのみ ZIP64 を使用します。これがデフォルトモードです。
  • 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();
}

保存進行状況をパーセンテージで取得

保存操作の進行状況を監視するには、IProgressCallback インターフェイスを実装した Java プロキシを作成し、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();
}

FAQ

Aspose.Slides はインクリメンタル保存(“高速保存”)をサポートしていますか?

いいえ。各保存操作は変更された部分だけを更新するのではなく、完全な出力ファイルを作成します。

同じ Presentation インスタンスを複数スレッドで保存できますか?

いいえ。Presentation インスタンスは スレッド セーフではありません (/slides/ja/php-java/multithreading/)。各インスタンスへのアクセスと保存は、同時に 1 スレッドからのみ行ってください。

プレゼンテーションを保存するとハイパーリンクや外部リンクされたファイルはどうなりますか?

ハイパーリンク はプレゼンテーションに残ります。Aspose.Slides は外部リンクされたファイルをコピーしないため、保存されたプレゼンテーションは引き続きそれらの場所にアクセスできる必要があります。

作者、タイトル、会社、作成日などのドキュメント メタデータを保存できますか?

はい。保存前に適切な ドキュメント プロパティ を設定すれば、Aspose.Slides がそれらを出力ファイルに書き込みます。