C++でプレゼンテーションを開く

概要

PowerPoint のプレゼンテーションを最初から作成するだけでなく、Aspose.Slides は既存のプレゼンテーションを開くこともできます。プレゼンテーションを読み込んだ後、情報を取得したり、スライドの内容を編集したり、新しいスライドを追加したり、既存のスライドを削除したりできます。

プレゼンテーションを開く

既存のプレゼンテーションを開くには、Presentation クラスをインスタンス化し、コンストラクタにファイルパスを渡します。

以下の C++ の例は、プレゼンテーションを開いてスライド数を取得する方法を示しています。

// Presentation クラスをインスタンス化し、コンストラクタにファイルパスを渡します。
auto presentation = MakeObject<Presentation>(u"Sample.pptx");

// プレゼンテーション内のスライド総数を出力します。
Console::WriteLine(presentation->get_Slides()->get_Count());

presentation->Dispose();

パスワードで保護されたプレゼンテーションを開く

パスワードで保護されたプレゼンテーションを開く必要がある場合は、LoadOptions クラスの set_Password メソッドにパスワードを渡して復号し、読み込みます。以下の C++ コードがこの操作を示しています。

auto loadOptions = MakeObject<LoadOptions>();
loadOptions->set_Password(u"YOUR_PASSWORD");

auto presentation = MakeObject<Presentation>(u"Sample.pptx", loadOptions);
    
// 復号化されたプレゼンテーションで操作を実行します。

presentation->Dispose();

大容量プレゼンテーションを開く

Aspose.Slides は、大容量プレゼンテーションの読み込みを支援するオプションを提供します。特に、LoadOptions クラスの get_BlobManagementOptions メソッドが有用です。

以下の C++ コードは、たとえば 2 GB の大容量プレゼンテーションを読み込む例です。

auto filePath = u"LargePresentation.pptx";

auto loadOptions = MakeObject<LoadOptions>();
// KeepLocked 動作を選択します—プレゼンテーション ファイルは
// Presentation インスタンスの存続期間中ロックされたままになりますが、メモリにロードしたり一時ファイルにコピーしたりする必要はありません。
loadOptions->get_BlobManagementOptions()->set_PresentationLockingBehavior(PresentationLockingBehavior::KeepLocked);
loadOptions->get_BlobManagementOptions()->set_IsTemporaryFilesAllowed(true);
loadOptions->get_BlobManagementOptions()->set_MaxBlobsBytesInMemory(10 * 1024 * 1024); // 10 MB

auto presentation = MakeObject<Presentation>(filePath, loadOptions);

// 大容量プレゼンテーションがロードされ、使用できます。メモリ消費は低く抑えられます。

// プレゼンテーションを変更します。
presentation->get_Slide(0)->set_Name(u"Large presentation");

// プレゼンテーションを別のファイルに保存します。この操作中もメモリ消費は低く保たれます。
presentation->Save(u"LargePresentation-copy.pptx", SaveFormat::Pptx);

// これを実行しないでください!プレゼンテーション オブジェクトが破棄されるまでファイルがロックされているため、I/O 例外がスローされます。
File::Delete(filePath);

presentation->Dispose();

// ここで実行しても問題ありません。ソース ファイルはプレゼンテーション オブジェクトによってロックされていません。
File::Delete(filePath);

外部リソースの制御

Aspose.Slides は、外部リソースを管理できる IResourceLoadingCallback インターフェイスを提供します。以下の C++ コードは、IResourceLoadingCallback インターフェイスの使用方法を示しています。

class ImageLoadingHandler : public IResourceLoadingCallback
{
public:
    ResourceLoadingAction ResourceLoading(SharedPtr<IResourceLoadingArgs> args) override
    {
        if (args->get_OriginalUri().EndsWith(u".jpg"))
        {
            try
            {
                // 代替画像を読み込む。
                auto imageData = File::ReadAllBytes(u"aspose-logo.jpg");
                args->SetData(imageData);
                return ResourceLoadingAction::UserProvided;
            }
            catch (Exception&)
            {
                return ResourceLoadingAction::Skip;
            }
        }
        else if (args->get_OriginalUri().EndsWith(u".png"))
        {
            // 代替 URL を設定する。
            args->set_Uri(u"http://www.google.com/images/logos/ps_logo2.png");
            return ResourceLoadingAction::Default;
        }

        // 他のすべての画像をスキップする。
        return ResourceLoadingAction::Skip;
    }
};
auto loadOptions = MakeObject<LoadOptions>();
loadOptions->set_ResourceLoadingCallback(MakeObject<ImageLoadingHandler>());

auto presentation = MakeObject<Presentation>(u"Sample.pptx", loadOptions);

埋め込みバイナリオブジェクトなしでプレゼンテーションを読み込む

PowerPoint プレゼンテーションには、次の種類の埋め込みバイナリオブジェクトが含まれることがあります。

ILoadOptions::set_DeleteEmbeddedBinaryObjects メソッドを使用すると、埋め込みバイナリオブジェクトを一切含まない状態でプレゼンテーションを読み込むことができます。

このメソッドは、潜在的に悪意のあるバイナリコンテンツを除去する際に便利です。以下の C++ コードは、埋め込みバイナリコンテンツなしでプレゼンテーションを読み込む例です。

auto loadOptions = MakeObject<LoadOptions>();
loadOptions->set_DeleteEmbeddedBinaryObjects(true);

auto presentation = MakeObject<Presentation>(u"malware.ppt", loadOptions);

// Perform operations on the presentation.

presentation->Dispose();

FAQ

ファイルが破損していて開けないことをどのように判断できますか?

読み込み時に解析/形式検証例外がスローされます。この種のエラーは、無効な ZIP 構造や破損した PowerPoint レコードに言及することが多いです。

開く際に必須フォントが欠如している場合はどうなりますか?

ファイルは開きますが、後続の rendering/export 時にフォントが置き換えられる可能性があります。実行環境にフォント置換を設定するか、Configure font substitutions または add the required fonts を追加してください。

開く際の埋め込みメディア(動画/音声)についてはどうですか?

メディアはプレゼンテーションリソースとして利用可能になります。外部パスで参照されているメディアがある場合は、そのパスが環境でアクセス可能であることを確認してください。そうでないと、rendering/export 時にメディアが省略されることがあります。