PHPでプレゼンテーションスライドをSVG画像としてレンダリング

SVG フォーマット

SVG—Scalable Vector Graphics の略称—は、2 次元画像を描画するために使用される標準的なグラフィックタイプまたはフォーマットです。SVG は画像を XML 形式のベクターとして保存し、その動作や外観を定義する詳細情報を含みます。

SVG は、拡張性、インタラクティブ性、パフォーマンス、アクセシビリティ、プログラマビリティなど、非常に高い基準を満たす数少ない画像フォーマットのひとつです。そのため、Web 開発で広く使用されています。

以下のような場合に SVG ファイルを使用したくなるでしょう

  • プレゼンテーションを 非常に大きなサイズ で印刷する。SVG 画像は任意の解像度やサイズまで拡大でき、品質を損なうことなく何度でもリサイズできます。
  • スライドのチャートやグラフを 異なる媒体やプラットフォーム で使用する。ほとんどのリーダーが SVG ファイルを解釈できます。
  • 画像の 可能な限り最小サイズ を使用する。SVG ファイルは一般に、他のフォーマットの高解像度版よりもサイズが小さく、特にビットマップ(JPEG や PNG)ベースのフォーマットと比べて顕著です。

スライドを SVG 画像としてレンダリングする

Aspose.Slides for PHP via Java を使用すると、プレゼンテーション内のスライドを SVG 画像としてエクスポートできます。以下の手順で SVG 画像を生成します。

  1. Presentation クラスのインスタンスを作成します。
  2. プレゼンテーション内のすべてのスライドを反復処理します。
  3. 各スライドを FileOutputStream を使用して個別の SVG ファイルに書き込みます。

このサンプルコードは、Aspose.Slides を使用して PPT を SVG に変換する方法を示しています。

  $pres = new Presentation("pres.pptx");
  try {
    for($index = 0; $index < java_values($pres->getSlides()->size()) ; $index++) {
      $slide = $pres->getSlides()->get_Item($index);
      $fileStream = new Java("java.io.FileOutputStream", "slide-" . $index . ".svg");
      try {
        $slide->writeAsSvg($fileStream);
      } finally {
        $fileStream->close();
      }
    }
  } catch (JavaException $e) {
  } finally {
    if (!java_is_null($pres)) {
      $pres->dispose();
    }
  }

よくある質問

なぜ生成された SVG がブラウザ間で異なる見た目になることがあるのでしょうか?

特定の SVG 機能のサポートはブラウザエンジンごとに実装が異なります。SVGOptions パラメータを使用すると、互換性の問題を緩和できます。

スライドだけでなく個々のシェイプも SVG にエクスポートできますか?

はい。シェイプは個別の SVG として保存できます、アイコンやピクトグラム、グラフィックの再利用に便利です。

複数のスライドを 1 つの SVG(ストリップ/ドキュメント)に結合できますか?

標準的なシナリオは 1 スライド → 1 SVG です。複数のスライドを 1 つの SVG キャンバスに結合する場合は、アプリケーション側で行うポストプロセスとなります。