C++でプレゼンテーションを効率的に結合

Presentation Merging

プレゼンテーションを別のものに結合すると、スライドが 1 つのプレゼンテーションにまとめられ、1 ファイルとして取得できます。

What Can Be Merged

Aspose.Slides を使用すると、次のものを結合できます

  • プレゼンテーション全体 – すべてのスライドが 1 つのプレゼンテーションに統合されます
  • 特定のスライド – 選択したスライドだけが 1 つのプレゼンテーションに統合されます
  • 同じ形式(PPT→PPT、PPTX→PPTX など)または 異なる形式(PPT→PPTX、PPTX→ODP など)のプレゼンテーション同士の結合

Merging Options

次のオプションで結合方法を制御できます

  • 各スライドが出力プレゼンテーションで固有のスタイルを保持するか
  • すべてのスライドに共通のスタイルを適用するか

プレゼンテーションを結合するには、Aspose.Slides が提供する AddClone メソッド(ISlideCollection インターフェイス)を使用します。AddClone メソッドには複数の実装があり、結合プロセスのパラメータを指定できます。各 Presentation オブジェクトは Slides コレクションを持っているため、スライドを結合したいプレゼンテーションから AddClone を呼び出します。

AddCloneISlide オブジェクトを返し、これは元のスライドのクローンです。出力プレゼンテーションのスライドは単に元スライドのコピーであるため、元のプレゼンテーションに影響を与えることなく、スタイルや書式設定、レイアウトの変更が可能です。

Merge Presentations

Aspose.Slides の AddClone (ISlide) メソッドは、スライドのレイアウトとスタイルを保持したまま結合できます(デフォルト パラメータ)。

以下の C++ コードはプレゼンテーションの結合方法を示しています:

auto pres1 = System::MakeObject<Presentation>(u"pres1.pptx");
auto pres2 = System::MakeObject<Presentation>(u"pres2.pptx");
for (const auto& slide : pres2->get_Slides())
{
    pres1->get_Slides()->AddClone(slide);
}

pres1->Save(u"combined.pptx", SaveFormat::Pptx);

Merge Presentations with a Slide Master

Aspose.Slides の AddClone (ISlide, IMasterSlide, bool) メソッドは、スライドマスター テンプレートを適用しながらスライドを結合します。これにより、必要に応じて出力プレゼンテーションのスライドスタイルを変更できます。

以下の C++ コードはこの操作を実演しています:

auto pres1 = System::MakeObject<Presentation>(u"pres1.pptx");
auto pres2 = System::MakeObject<Presentation>(u"pres2.pptx");
for (const auto& slide : pres2->get_Slides())
{
    pres1->get_Slides()->AddClone(slide, pres2->get_Masters()->idx_get(0), true);
}

pres1->Save(u"combined.pptx", SaveFormat::Pptx);

出力プレゼンテーションのスライドに別のレイアウトを適用したい場合は、結合時に AddClone (ISlide, ILayoutSlide) メソッドを使用してください。

Merge Specific Slides from Presentations

複数のプレゼンテーションから特定のスライドだけを結合すると、カスタム スライド デッキを作成できます。Aspose.Slides C++ は必要なスライドのみを選択してインポートでき、元のスライドの書式、レイアウト、デザインを保持します。

以下の C++ コードは新しいプレゼンテーションを作成し、2 つの別のプレゼンテーションからタイトル スライドを追加してファイルに保存します:

SmartPtr<ISlide> GetTitleSlide(SmartPtr<IPresentation> presentation)
{
    for (auto&& slide : presentation->get_Slides())
    {
        if (slide->get_LayoutSlide()->get_LayoutType() == SlideLayoutType::Title)
        {
            return slide;
        }
    }
    return nullptr;
}
auto presentation = MakeObject<Presentation>();
auto presentation1 = MakeObject<Presentation>(u"presentation1.pptx");
auto presentation2 = MakeObject<Presentation>(u"presentation2.pptx");

presentation->get_Slides()->RemoveAt(0);

auto slide1 = GetTitleSlide(presentation1);

if (slide1 != nullptr)
    presentation->get_Slides()->AddClone(slide1);

auto slide2 = GetTitleSlide(presentation2);

if (slide2 != nullptr)
    presentation->get_Slides()->AddClone(slide2);

presentation->Save(u"combined.pptx", SaveFormat::Pptx);

presentation2->Dispose();
presentation1->Dispose();
presentation->Dispose();

Merge Presentations with a Slide Layout

この C++ コードは、好みのスライド レイアウトを適用しながらプレゼンテーションのスライドを結合し、1 つの出力プレゼンテーションを作成する方法を示します:

auto pres1 = System::MakeObject<Presentation>(u"pres1.pptx");
auto pres2 = System::MakeObject<Presentation>(u"pres2.pptx");
for (const auto& slide : pres2->get_Slides())
{
    pres1->get_Slides()->AddClone(slide, pres2->get_LayoutSlides()->idx_get(0));
}

pres1->Save(u"combined.pptx", SaveFormat::Pptx);

Merge Presentations with Different Slide Sizes

サイズが異なる 2 つのプレゼンテーションを結合するには、サイズが合うようにどちらかのプレゼンテーションをリサイズする必要があります。

このサンプルコードは、上記の操作を示しています:

auto pres1 = System::MakeObject<Presentation>(u"pres1.pptx");
auto pres1Size = pres1->get_SlideSize()->get_Size();

auto pres2 = System::MakeObject<Presentation>(u"pres2.pptx");
pres2->get_SlideSize()->SetSize(pres1Size.get_Width(), pres1Size.get_Height(), SlideSizeScaleType::EnsureFit);

for (const auto& slide : pres2->get_Slides())
{
    pres1->get_Slides()->AddClone(slide);
}

pres1->Save(u"combined.pptx", SaveFormat::Pptx);

Merge Slides to a Presentation Section

この C++ コードは、特定のスライドをプレゼンテーションのセクションに結合する方法を示します:

auto pres1 = System::MakeObject<Presentation>(u"pres1.pptx");
auto pres2 = System::MakeObject<Presentation>(u"pres2.pptx");
for (int32_t index = 0; index < pres2->get_Slides()->get_Count(); index++)
{
    auto slide = pres2->get_Slides()->idx_get(index);
    pres1->get_Slides()->AddClone(slide, pres1->get_Sections()->idx_get(0));
}

pres1->Save(u"combined.pptx", SaveFormat::Pptx);

スライドはセクションの末尾に追加されます。

FAQ

結合時にスピーカーノートは保持されますか?

はい。スライドをクローンすると、ノート、書式設定、アニメーションを含むすべてのスライド要素が保持されます。

コメントとその作成者は転送されますか?

コメントはスライド コンテンツの一部としてコピーされ、コメント作成者のラベルは結果のプレゼンテーション内のコメント オブジェクトとして残ります。

元のプレゼンテーションがパスワードで保護されている場合は?

LoadOptions::set_Password を使用してパスワードで開く必要があります(/slides/cpp/password-protected-presentation/)。ロード後、スライドは保護されていないターゲット ファイル(または保護されたファイル)に安全にクローンできます。

結合操作はスレッドセーフですか?

同じ Presentation インスタンスを複数のスレッドから使用しないでください。推奨ルールは「1 ドキュメント – 1 スレッド」で、別々のファイルは異なるスレッドで並列処理できます。