Javaでプレゼンテーションを開く
概要
ゼロからPowerPointプレゼンテーションを作成するだけでなく、Aspose.Slidesは既存のプレゼンテーションを開くことも可能です。プレゼンテーションをロードした後は、情報の取得、スライド内容の編集、新しいスライドの追加、既存スライドの削除などが行えます。
プレゼンテーションのオープン
既存のプレゼンテーションを開くには、Presentation クラスをインスタンス化し、コンストラクタにファイルパスを渡します。
次の Java サンプルは、プレゼンテーションを開いてスライド数を取得する方法を示しています。
// Presentation クラスのインスタンスを作成し、コンストラクタにファイルパスを渡します。
Presentation presentation = new Presentation("Sample.pptx");
try {
// プレゼンテーション内のスライド総数を出力します。
System.out.println(presentation.getSlides().size());
} finally {
presentation.dispose();
}
パスワード保護されたプレゼンテーションのオープン
パスワード保護されたプレゼンテーションを開く必要がある場合は、LoadOptions クラスの setPassword メソッドでパスワードを渡して復号し、ロードします。次の Java コードがこの操作を示しています。
LoadOptions loadOptions = new LoadOptions();
loadOptions.setPassword("YOUR_PASSWORD");
Presentation presentation = new Presentation("Sample.pptx", loadOptions);
try {
// 復号化されたプレゼンテーションで操作を実行します。
} finally {
presentation.dispose();
}
大容量プレゼンテーションのオープン
Aspose.Slides は、特に LoadOptions クラスの getBlobManagementOptions メソッドなどのオプションを提供し、大容量プレゼンテーションのロードを支援します。
次の Java コードは、大容量プレゼンテーション(例: 2 GB)をロードする方法を示しています。
final String filePath = "LargePresentation.pptx";
LoadOptions loadOptions = new LoadOptions();
// KeepLocked 動作を選択します—プレゼンテーション ファイルはインスタンスの存続期間中ロックされたままになりますが
// Presentation インスタンスですが、メモリにロードしたり一時ファイルにコピーしたりする必要はありません。
loadOptions.getBlobManagementOptions().setPresentationLockingBehavior(PresentationLockingBehavior.KeepLocked);
loadOptions.getBlobManagementOptions().setTemporaryFilesAllowed(true);
loadOptions.getBlobManagementOptions().setMaxBlobsBytesInMemory(10 * 1024 * 1024); // 10 MB
Presentation presentation = new Presentation(filePath, loadOptions);
try {
// 大容量のプレゼンテーションがロードされ、使用可能です。メモリ使用量は低く抑えられます。
// プレゼンテーションを変更します。
presentation.getSlides().get_Item(0).setName("Large presentation");
// プレゼンテーションを別のファイルに保存します。この操作中もメモリ使用量は低く抑えられます。
presentation.save("LargePresentation-copy.pptx", SaveFormat.Pptx);
// これを行わないでください!プレゼンテーション オブジェクトが破棄されるまでファイルがロックされているため、I/O 例外がスローされます。
//Files.delete(Paths.get(filePath));
} finally {
presentation.dispose();
}
// ここで実行しても問題ありません。ソース ファイルはプレゼンテーション オブジェクトによってロックされていません。
Files.delete(Paths.get(filePath));
情報
ストリームで作業する際の特定の制限を回避するため、Aspose.Slides はストリームの内容をコピーすることがあります。ストリームから大容量プレゼンテーションをロードすると、プレゼンテーションがコピーされ、ロードが遅くなる可能性があります。したがって、大容量プレゼンテーションをロードする必要がある場合は、ストリームではなくプレゼンテーションのファイルパスを使用することを強く推奨します。
大きなオブジェクト(ビデオ、オーディオ、高解像度画像など)を含むプレゼンテーションを作成する場合は、BLOB management を使用してメモリ使用量を削減できます。
外部リソースの制御
Aspose.Slides は、外部リソースを管理できる IResourceLoadingCallback インターフェイスを提供します。次の Java コードは、IResourceLoadingCallback インターフェイスの使用方法を示しています。
LoadOptions loadOptions = new LoadOptions();
loadOptions.setResourceLoadingCallback(new ImageLoadingHandler());
Presentation presentation = new Presentation("Sample.pptx", loadOptions);
class ImageLoadingHandler implements IResourceLoadingCallback {
public int resourceLoading(IResourceLoadingArgs args) {
if (args.getOriginalUri().endsWith(".jpg")) {
try {
// 代替画像をロードします。
byte[] imageData = Files.readAllBytes(new File("aspose-logo.jpg").toPath());
args.setData(imageData);
return ResourceLoadingAction.UserProvided;
} catch (RuntimeException ex) {
return ResourceLoadingAction.Skip;
} catch (IOException ex) {
ex.printStackTrace();
}
} else if (args.getOriginalUri().endsWith(".png")) {
// 代替 URL を設定します。
args.setUri("http://www.google.com/images/logos/ps_logo2.png");
return ResourceLoadingAction.Default;
}
// 他のすべての画像をスキップします。
return ResourceLoadingAction.Skip;
}
}
埋め込みバイナリオブジェクトなしでのプレゼンテーションのロード
PowerPoint プレゼンテーションには、以下の種類の埋め込みバイナリオブジェクトが含まれることがあります。
- VBA プロジェクト(IPresentation.getVbaProject でアクセス可能);
- OLE 埋め込みデータ(IOleEmbeddedDataInfo.getEmbeddedFileData でアクセス可能);
- ActiveX コントロールのバイナリデータ(IControl.getActiveXControlBinary でアクセス可能)。
ILoadOptions.setDeleteEmbeddedBinaryObjects メソッドを使用すると、埋め込みバイナリオブジェクトを一切含まない状態でプレゼンテーションをロードできます。
このメソッドは、潜在的に悪意のあるバイナリコンテンツを除去する際に有用です。次の Java コードは、埋め込みバイナリコンテンツなしでプレゼンテーションをロードする方法を示しています。
LoadOptions loadOptions = new LoadOptions();
loadOptions.setDeleteEmbeddedBinaryObjects(true);
Presentation presentation = new Presentation("malware.ppt", loadOptions);
try {
// プレゼンテーションで操作を実行します。
} finally {
presentation.dispose();
}
FAQ
ファイルが破損していて開けないことをどのように判断できますか?
ロード時にパース/フォーマット検証例外が発生します。このエラーは、無効な ZIP 構造や破損した PowerPoint レコードに言及することが多いです。
開く際に必須フォントが欠落している場合はどうなりますか?
ファイルは開きますが、後のレンダリング/エクスポートでフォントが置き換えられる可能性があります。フォント置換の構成または必須フォントの追加をランタイム環境に行ってください。
開く際の埋め込みメディア(ビデオ/オーディオ)はどう扱われますか?
メディアはプレゼンテーションリソースとして利用可能になります。メディアが外部パスで参照されている場合、そのパスが環境でアクセス可能であることを確認してください。そうでないとレンダリング/エクスポートでメディアが省略されることがあります。