Javaでプレゼンテーションスライドを画像に変換

概要

Aspose.Slides for Java は、PowerPoint および OpenDocument プレゼンテーションから個々のスライドを PNG、JPEG、GIF、TIFF、その他の画像形式でレンダリングできます。

スライドを画像に変換するには、次の手順を実行します。

  1. プレゼンテーションを Presentation クラスでロードします。
  2. レンダリングしたいスライドを選択します。
  3. 必要に応じて、RenderingOptions または TiffOptions クラスでレンダリングを構成します。
  4. ISlide.getImage メソッドを呼び出します。これにより IImage オブジェクトが返されます。
  5. IImage.save メソッドを呼び出し、ImageFormat の値で出力フォーマットを指定します。

スライドを PNG 画像に変換

最も簡単な変換はデフォルトのレンダリング設定を使用します。結果として得られる IImage オブジェクトはメモリ内で処理することも、ファイルに保存することもできます。

以下の Java の例は、最初のスライドをレンダリングし、PNG 画像として保存します。

import com.aspose.slides.IImage;
import com.aspose.slides.ISlide;
import com.aspose.slides.ImageFormat;
import com.aspose.slides.Presentation;

Presentation presentation = new Presentation("Presentation.pptx");
try {
    ISlide slide = presentation.getSlides().get_Item(0);

    IImage image = slide.getImage();
    try {
        image.save("Slide_0.png", ImageFormat.Png);
    } finally {
        image.dispose();
    }
} finally {
    presentation.dispose();
}

カスタムサイズでスライドを画像に変換

正確なピクセル寸法でスライドをレンダリングするには、Dimension 値を受け取る ISlide.getImage のオーバーロードを使用します。

以下の例は 1820 × 1040 の JPEG 画像を作成します。

import com.aspose.slides.IImage;
import com.aspose.slides.ISlide;
import com.aspose.slides.ImageFormat;
import com.aspose.slides.Presentation;
import java.awt.Dimension;

Dimension imageSize = new Dimension(1820, 1040);

Presentation presentation = new Presentation("Presentation.pptx");
try {
    ISlide slide = presentation.getSlides().get_Item(0);

    IImage image = slide.getImage(imageSize);
    try {
        image.save("Slide_0.jpg", ImageFormat.Jpeg);
    } finally {
        image.dispose();
    }
} finally {
    presentation.dispose();
}

ノートとコメント付きのスライドを画像に変換

デフォルトでは、スライド画像にノートやコメントは含まれません。NotesCommentsLayoutingOptions オブジェクトを RenderingOptions.setSlidesLayoutOptions メソッドに渡すことで、ノートとコメントの表示位置を制御できます。

以下の例では、切り詰められたノートをスライドの下に、コメントを右側に配置します。

import com.aspose.slides.CommentsPositions;
import com.aspose.slides.IImage;
import com.aspose.slides.ISlide;
import com.aspose.slides.ImageFormat;
import com.aspose.slides.NotesCommentsLayoutingOptions;
import com.aspose.slides.NotesPositions;
import com.aspose.slides.Presentation;
import com.aspose.slides.RenderingOptions;
import java.awt.Color;

float scaleX = 2f;
float scaleY = scaleX;

Color commentsAreaColor = new Color(250, 235, 215);

NotesCommentsLayoutingOptions layoutOptions = new NotesCommentsLayoutingOptions();
layoutOptions.setNotesPosition(NotesPositions.BottomTruncated);
layoutOptions.setCommentsPosition(CommentsPositions.Right);
layoutOptions.setCommentsAreaWidth(500);
layoutOptions.setCommentsAreaColor(commentsAreaColor);

RenderingOptions renderingOptions = new RenderingOptions();
renderingOptions.setSlidesLayoutOptions(layoutOptions);

Presentation presentation = new Presentation("Presentation_with_notes_and_comments.pptx");
try {
    ISlide slide = presentation.getSlides().get_Item(0);

    IImage image = slide.getImage(renderingOptions, scaleX, scaleY);
    try {
        image.save("Image_with_notes_and_comments_0.gif", ImageFormat.Gif);
    } finally {
        image.dispose();
    }
} finally {
    presentation.dispose();
}

TIFF オプションを使用してスライドを画像に変換

TiffOptions クラスを使用すると、レンダリングされた TIFF 画像のサイズ、解像度、その他のプロパティを制御できます。

以下の例は、最初のスライドを 2160 × 2880 の TIFF 画像として、300 DPI でレンダリングします。

import com.aspose.slides.IImage;
import com.aspose.slides.ISlide;
import com.aspose.slides.ImageFormat;
import com.aspose.slides.Presentation;
import com.aspose.slides.TiffOptions;
import java.awt.Dimension;

Dimension imageSize = new Dimension(2160, 2880);

TiffOptions tiffOptions = new TiffOptions();
tiffOptions.setImageSize(imageSize);
tiffOptions.setDpiX(300);
tiffOptions.setDpiY(300);

Presentation presentation = new Presentation("sample.pptx");
try {
    ISlide slide = presentation.getSlides().get_Item(0);

    IImage image = slide.getImage(tiffOptions);
    try {
        image.save("output.tiff", ImageFormat.Tiff);
    } finally {
        image.dispose();
    }
} finally {
    presentation.dispose();
}

すべてのスライドを画像に変換

スライドコレクションを反復処理して、プレゼンテーション全体を一連の画像に変換します。特にスキップしない限り、非表示スライドも含まれます。

以下の例は、すべてのスライドを水平方向・垂直方向のスケール係数 2 の JPEG 画像としてレンダリングします。

import com.aspose.slides.IImage;
import com.aspose.slides.ISlide;
import com.aspose.slides.ImageFormat;
import com.aspose.slides.Presentation;

float scaleX = 2f;
float scaleY = scaleX;

Presentation presentation = new Presentation("Presentation.pptx");
try {
    int slideCount = presentation.getSlides().size();
    for (int index = 0; index < slideCount; index++) {
        ISlide slide = presentation.getSlides().get_Item(index);
        IImage image = slide.getImage(scaleX, scaleY);
        try {
            image.save("Slide_" + index + ".jpg", ImageFormat.Jpeg);
        } finally {
            image.dispose();
        }
    }
} finally {
    presentation.dispose();
}

拡張メタファイル出力を作成

拡張メタファイル (EMF) は、ベクトルベースのグラフィックを Microsoft Office や Windows メタファイルをサポートする他の Windows アプリケーションとやり取りする必要がある場合に便利です。ピクセルベースの画像とは異なり、EMF はベクトル描画操作を保持でき、拡大縮小してもシャープさが同程度に保たれます。ただし、EMF は主に Windows メタファイルをサポートするアプリケーション向けの互換性フォーマットであり、汎用的な交換フォーマットではありません。さらに、ビットマップ画像や一部のエフェクトなどの複雑なスライドコンテンツは、ベクトルメタファイルコンテナ内にラスタライズされた要素として格納されることがあります。

スライドを EMF にエクスポート

ISlide.writeAsEmf メソッドは、ISlide を EMF 形式でターゲットストリームに書き込みます。以下の例は、プレゼンテーションをロードし、最初のスライドを選択し、EMF ファイルストリームに書き出します。

import com.aspose.slides.ISlide;
import com.aspose.slides.Presentation;
import java.io.FileOutputStream;

Presentation presentation = new Presentation("Presentation.pptx");
try {
    ISlide slide = presentation.getSlides().get_Item(0);

    FileOutputStream emfStream = new FileOutputStream("Slide_0.emf");
    try {
        slide.writeAsEmf(emfStream);
    } finally {
        emfStream.close();
    }
} finally {
    presentation.dispose();
}

呼び出し元は ISlide.writeAsEmf に渡されたストリームの所有権を持ち、上記のようにストリームを閉じる責任があります。

SVG 画像を EMF に変換し、プレゼンテーションに追加

ISvgImage.writeAsEmf を使用して SVG コンテンツを EMF に変換します。生成されたバイト列は IImageCollection.addImage を介してプレゼンテーションに追加でき、IShapeCollection.addPictureFrame でスライド上に配置できます。

以下の例は、SVG マークアップから SvgImage を作成し、メモリ内の EMF に変換し、最初のスライドにメタファイルを挿入し、プレゼンテーションを保存します。

import com.aspose.slides.IPPImage;
import com.aspose.slides.ISlide;
import com.aspose.slides.ISvgImage;
import com.aspose.slides.Presentation;
import com.aspose.slides.SaveFormat;
import com.aspose.slides.ShapeType;
import com.aspose.slides.SvgImage;
import java.io.ByteArrayOutputStream;

String svgContent = "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"200\" height=\"100\"><rect width=\"200\" height=\"100\" fill=\"#4472C4\"/></svg>";
ISvgImage svgImage = new SvgImage(svgContent);

Presentation presentation = new Presentation();
try {
    ISlide slide = presentation.getSlides().get_Item(0);

    ByteArrayOutputStream emfStream = new ByteArrayOutputStream();
    try {
        svgImage.writeAsEmf(emfStream);

        byte[] emfData = emfStream.toByteArray();
        IPPImage image = presentation.getImages().addImage(emfData);
        slide.getShapes().addPictureFrame(ShapeType.Rectangle, 20, 20, 200, 100, image);
    } finally {
        emfStream.close();
    }

    presentation.save("Presentation_with_emf.pptx", SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

ISvgImage.writeAsEmf は宛先ストリームの所有権を取得しません。ByteArrayOutputStream は生成されたデータをすべてメモリに保持するため、toByteArray を呼び出す前に位置リセットは必要ありません。ストリームが閉じられた後も返されたバイト配列は有効です。

EMF の生成は、選択された Aspose.Slides for Java と JDK 構成がサポートするオペレーティングシステム上で利用可能ですが、フォントやグラフィックの依存関係が利用できない場合、プラットフォーム間でレンダリングが異なることがあります。ソースコンテンツで使用されているフォントをインストールするか、適切な代替フォントを設定し、Aspose.Slides for Java の platform requirements に従って、対象の EMF 使用アプリケーションで結果を検証してください。Linux や macOS のアプリケーションは、Windows メタファイルの表示や編集に対するサポートが限定的または一貫性がないことが多いです。

カラー絵文字のレンダリング

FAQ

Aspose.Slides はアニメーション付きスライドのレンダリングをサポートしていますか?

いいえ。ISlide.getImage メソッドはスライドの静止画像をレンダリングし、アニメーションはエクスポートされません。

非表示スライドを画像としてエクスポートできますか?

はい。非表示スライドも通常のスライドと同様にレンダリングできます。上記の例のように、処理ループに含めてください。

スライド画像に影やその他のエフェクトは保持されますか?

はい。Aspose.Slides は影、透明度、その他サポートされているグラフィックエフェクトをスライド画像にレンダリングします。