プレゼンテーションを開く - C++ PowerPoint API

PowerPointプレゼンテーションをゼロから作成するだけでなく、Aspose.Slidesを使用すると、既存のプレゼンテーションを開くことができます。プレゼンテーションをロードした後、そのプレゼンテーションに関する情報を取得したり、プレゼンテーションの内容を編集したり、新しいスライドを追加したり既存のスライドを削除したりすることができます。

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

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

このC++コードは、プレゼンテーションをどう開くか、またその中に含まれているスライドの数を見つける方法を示しています:

// ドキュメントディレクトリへのパス
String dataDir = u"";

// Presentationクラスをインスタンス化し、ファイルパスをコンストラクタに渡す
auto pres = System::MakeObject<Presentation>(dataDir + u"OpenPresentation.pptx");

// プレゼンテーション内に存在するスライドの総数を印刷
Console::WriteLine(Convert::ToString(pres->get_Slides()->get_Count()));

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

パスワード保護されたプレゼンテーションを開く必要がある場合は、get_Password()プロパティ(LoadOptionsクラスから)を通じてパスワードを渡して、プレゼンテーションを復号化し、ロードすることができます。このC++コードはその操作を示しています:

System::SharedPtr<LoadOptions> loadOptions = System::MakeObject<LoadOptions>();
loadOptions->set_Password(u"YOUR_PASSWORD");
auto presentation = System::MakeObject<Presentation>(u"pres.pptx", loadOptions);
// 復号化されたプレゼンテーションで何らかの作業を行う

大きなプレゼンテーションを開く

Aspose.Slidesは、LoadOptionsクラス内のBlobManagementOptionsプロパティを特に利用して、大きなプレゼンテーションをロードできるオプションを提供しています。

このC++コードは、サイズが2GBの大きなプレゼンテーションをロードする操作を示しています:

String pathToVeryLargePresentationFile = u"veryLargePresentation.pptx";

{
    SharedPtr<LoadOptions> loadOptions = System::MakeObject<LoadOptions>();
    // クロージャを選択しましょう - "veryLargePresentation.pptx"はプレゼンテーションのインスタンスライフタイムの間ロックされますが、
    // メモリにロードしたり、一時ファイルにコピーしたりする必要はありません
    loadOptions->get_BlobManagementOptions()->set_PresentationLockingBehavior(PresentationLockingBehavior::KeepLocked);

    auto pres = System::MakeObject<Presentation>(pathToVeryLargePresentationFile, loadOptions);

    // 大きなプレゼンテーションがロードされ、使用可能ですが、メモリ使用量はまだ低いままです。

    // プレゼンテーションを変更します。
    pres->get_Slides()->idx_get(0)->set_Name(u"非常に大きなプレゼンテーション");

    // プレゼンテーションは別のファイルに保存されます。操作中はメモリの消費は低いままです
    pres->Save(u"veryLargePresentation-copy.pptx", SaveFormat::Pptx);

    // それはできません!ファイルはロックされているためIO例外が発生しますが、presオブジェクトは
    // 解放されません
    File::Delete(pathToVeryLargePresentationFile);
}

// ここで行うのは問題ありません。ソースファイルはpresオブジェクトによってロックされていません
File::Delete(pathToVeryLargePresentationFile);

プレゼンテーションをロードする

Aspose.Slidesは、外部リソースを管理するために単独のメソッドを持つIResourceLoadingCallbackを提供します。このC++コードは、IResourceLoadingCallbackインターフェースを使用する方法を示しています:

// ドキュメントディレクトリへのパス
System::String dataDir = GetDataPath();

auto opts = System::MakeObject<LoadOptions>();
opts->set_ResourceLoadingCallback(System::MakeObject<ImageLoadingHandler>(dataDir));
auto presentation = System::MakeObject<Presentation>(dataDir + u"presentation.pptx", opts);
class ImageLoadingHandler : public IResourceLoadingCallback
{
public:
    ImageLoadingHandler(String dataDir)
        : m_dataDir(dataDir)
    {
    }

    ResourceLoadingAction ResourceLoading(SharedPtr<IResourceLoadingArgs> args) override
    {
        if (args->get_OriginalUri().EndsWith(u".jpg"))
        {
            try
            {
                System::ArrayPtr<uint8_t> imageBytes = File::ReadAllBytes(Path::Combine(m_dataDir, u"aspose-logo.jpg"));
                args->SetData(imageBytes);
                return ResourceLoadingAction::UserProvided;
            }
            catch (System::Exception&)
            {
                return ResourceLoadingAction::Skip;
            }
        }

        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;
    }
    
private:
    String m_dataDir;
};

プレゼンテーションのオープンと保存

手順:C++でプレゼンテーションを開いて保存する

  1. Presentationクラスのインスタンスを作成し、開きたいファイルを渡します。

  2. プレゼンテーションを保存します。

     const String outPath = u"../out/SaveToFile_out.ppt";
       	
     SharedPtr<Presentation> pres = MakeObject<Presentation>();
       
     // pres->get_ProtectionManager()->Encrypt(u"pass");
     // ...ここで何らかの作業を行います..
       
     pres->Save(outPath, Aspose::Slides::Export::SaveFormat::Pptx);