.NET でスライドレイアウトを適用または変更

概要

スライドレイアウトは、タイトル、テキスト、画像、チャート、テーブルなどのプレースホルダーの位置と書式を定義します。レイアウトを適用すると、スライドに一貫した構造が提供され、各スライドが独自のコンテンツを保持できます。

最も一般的なレイアウトは次のとおりです:

  • Title Slide: タイトルとサブタイトルのプレースホルダーが含まれます。
  • Title and Content: タイトルのプレースホルダーと汎用コンテンツプレースホルダーが含まれます。
  • Blank: コンテンツプレースホルダーがなく、すべての形状を手動で配置する場合に便利です。

レイアウト継承の理解

プレゼンテーションには、関連する3つのレベルがあります:

  1. master slide は、テーマ、共有書式、背景、および共通オブジェクトを定義します。
  2. layout slide は、マスターに属し、プレースホルダーの特定の配置を定義します。
  3. normal slide は、1つのレイアウトを使用し、そのスライドに入力されたコンテンツを格納します。

通常のスライドはレイアウトからテーマと書式を継承し、レイアウトはマスターから継承します。通常のスライドに直接設定された値は、そのレベルで継承された値を上書きします。通常のスライドが作成されると、プレースホルダー形状は選択されたレイアウトから生成され、これらのプレースホルダーに入力されたコンテンツは通常のスライドに属します。

スライドを作成する前に、レイアウトに必要なプレースホルダーを追加してください。後でレイアウトに別のプレースホルダーを追加しても、既存の通常スライドに対応するプレースホルダー形状が自動的に追加されることはありません。

この関係には、2つの重要な結果があります:

  • レイアウト上の継承された書式や既存のプレースホルダーのジオメトリを変更すると、それに依存するすべてのスライドが更新されます。既に使用中のレイアウトを編集する前に、依存スライドを確認し、結果のプレゼンテーションをレビューしてください。
  • スライドが使用中のレイアウトは削除できません。先に依存スライドを別のレイアウトに再割り当てするか、未使用のレイアウトだけを削除してください。

この階層の最上位レベルの詳細については、Slide Master を参照してください。

1つのスライドまたは共有レイアウトで継承されたロゴや装飾的なマスターシェイプを非表示にするには、Control the Visibility of Master Graphics を参照してください。例では、同じマスターを使用する2つのスライドを比較しています。

スライドレイアウトの選択と適用

プレゼンテーションが標準の PowerPoint レイアウト定義に従っている場合にレイアウトタイプを使用します。レイアウト名はユーザーが編集可能でローカライズできるため、ソーステンプレートを管理していない限り、名前ベースの選択は信頼性が低くなります。

次の例は、最初のマスターで Title and Content を探します。そのレイアウトが利用できない場合は、意図的に Blank にフォールバックします。2 番目の null チェックは、プレゼンテーションにカスタムレイアウトしか含まれない可能性があるために必要です。選択されたレイアウトは、ISlide.LayoutSlide プロパティを介して最初の通常スライドに適用されます。

using System;
using Aspose.Slides;
using Aspose.Slides.Export;

using var presentation = new Presentation("input.pptx");

var layoutSlides = presentation.Masters[0].LayoutSlides;
var targetLayout = layoutSlides.GetByType(SlideLayoutType.TitleAndObject) ?? layoutSlides.GetByType(SlideLayoutType.Blank);

if (targetLayout == null)
{
    throw new InvalidOperationException("The first master does not contain a suitable layout slide.");
}

presentation.Slides[0].LayoutSlide = targetLayout;
presentation.Save("output-with-new-layout.pptx", SaveFormat.Pptx);

スライドのレイアウトを変更しても、スライドに直接追加された通常の形状は削除されません。ただし、プレースホルダーの位置、継承された書式、および既存のプレースホルダーと新しいレイアウト間の対応が変わる可能性があるため、実質的に異なるレイアウト間を切り替える際は出力を確認してください。

レイアウトスライドの追加

選択と作成は別々の操作です。前の例は既存のレイアウトを選択していますが、作成はしていません。レイアウトを作成するには、対象マスターのレイアウトコレクション上で IMasterLayoutSlideCollection.Add メソッドを呼び出します。

次の例は常に Report Title and Content という名前の新しい Title and Content レイアウトを追加し、続いてそれに基づく通常スライドを追加します。レイアウト名はコレクション内で一意である必要があります。

using Aspose.Slides;
using Aspose.Slides.Export;

using var presentation = new Presentation("input.pptx");

var masterSlide = presentation.Masters[0];
var reportLayout = masterSlide.LayoutSlides.Add(SlideLayoutType.TitleAndObject, "Report Title and Content");
presentation.Slides.AddEmptySlide(reportLayout);

presentation.Save("output-with-report-layout.pptx", SaveFormat.Pptx);

テンプレートが本当に別の再利用可能な構造を必要とする場合にのみレイアウトを追加してください。適切なレイアウトが既に存在する場合は、重複を作成せずに選択して再利用してください。

レイアウトスライドへのプレースホルダーの追加

ILayoutSlide.PlaceholderManager プロパティは、レイアウトにプレースホルダー形状を追加するための ILayoutPlaceholderManager を提供します。

PowerPoint プレースホルダー ILayoutPlaceholderManager Method
Content AddContentPlaceholder(float x, float y, float width, float height)
Content (Vertical) AddVerticalContentPlaceholder(float x, float y, float width, float height)
Text AddTextPlaceholder(float x, float y, float width, float height)
Text (Vertical) AddVerticalTextPlaceholder(float x, float y, float width, float height)
Picture AddPicturePlaceholder(float x, float y, float width, float height)
Chart AddChartPlaceholder(float x, float y, float width, float height)
Table AddTablePlaceholder(float x, float y, float width, float height)
SmartArt AddSmartArtPlaceholder(float x, float y, float width, float height)
Media AddMediaPlaceholder(float x, float y, float width, float height)
Online Image AddOnlineImagePlaceholder(float x, float y, float width, float height)

次の例は Blank レイアウトが存在することを確認し、4 つのプレースホルダーを追加してから、変更されたレイアウトを使用する通常スライドを作成します。順序は意図的です:プレースホルダーは通常スライドが作成される前に追加されるため、Aspose.Slides はそのスライド上に対応するプレースホルダー形状を生成できます。

using System;
using Aspose.Slides;
using Aspose.Slides.Export;

using var presentation = new Presentation();

var blankLayout = presentation.LayoutSlides.GetByType(SlideLayoutType.Blank);

if (blankLayout == null)
{
    throw new InvalidOperationException("The presentation does not contain a Blank layout slide.");
}

var placeholderManager = blankLayout.PlaceholderManager;
placeholderManager.AddContentPlaceholder(20, 20, 310, 270);
placeholderManager.AddVerticalTextPlaceholder(350, 20, 350, 270);
placeholderManager.AddChartPlaceholder(20, 310, 310, 180);
placeholderManager.AddTablePlaceholder(350, 310, 350, 180);

presentation.Slides.AddEmptySlide(blankLayout);
presentation.Save("output-with-placeholders.pptx", SaveFormat.Pptx);

結果:

The placeholders on the layout slide

未使用のレイアウトスライドの削除

Compress.RemoveUnusedLayoutSlides メソッドを使用して、通常スライドが参照していないレイアウトを削除します。このメソッドは、使用中のレイアウトはそのまま残します。

using Aspose.Slides;
using Aspose.Slides.Export;
using Aspose.Slides.LowCode;

using var presentation = new Presentation("input.pptx");

Compress.RemoveUnusedLayoutSlides(presentation);
presentation.Save("output-without-unused-layouts.pptx", SaveFormat.Pptx);

特定のレイアウトを削除するには、まずその HasDependingSlides プロパティまたは GetDependingSlides メソッドを使用します。削除前に依存スライドを再割り当てし、ILayoutSlide.Remove を呼び出してください。使用中のレイアウトを削除しようとすると、PptxEditException がスローされます。

レイアウトスライド上のフッター表示の制御

レイアウトには独自のフッター、スライド番号、日時プレースホルダーがあります。これらのプレースホルダーを 1 つのレイアウトに対して制御するには、ILayoutSlide.HeaderFooterManager プロパティを使用します。たとえば、コンテンツレイアウトではフッターを表示し、タイトルレイアウトでは非表示にしたい場合に便利です。

次の例はレイアウトを安全に選択し、そのフッター要素を表示可能にします:

using System;
using Aspose.Slides;
using Aspose.Slides.Export;

using var presentation = new Presentation("input.pptx");

var layoutSlide = presentation.LayoutSlides.GetByType(SlideLayoutType.TitleAndObject) ?? presentation.LayoutSlides.GetByType(SlideLayoutType.Blank);

if (layoutSlide == null)
{
    throw new InvalidOperationException("The presentation does not contain a suitable layout slide.");
}

var headerFooterManager = layoutSlide.HeaderFooterManager;
headerFooterManager.SetFooterVisibility(true);
headerFooterManager.SetSlideNumberVisibility(true);
headerFooterManager.SetDateTimeVisibility(true);
headerFooterManager.SetFooterText("Footer text");
headerFooterManager.SetDateTimeText("Date and time text");

presentation.Save("output-with-layout-footers.pptx", SaveFormat.Pptx);

マスターとその子レイアウト上のフッター表示の制御

マスターヒエラルキー全体に一貫したフッター設定を適用するには、IMasterSlide.HeaderFooterManager プロパティを使用します。IMasterSlideHeaderFooterManager の伝搬メソッドは、マスターとその依存レイアウトスライドおよび通常スライドに対して動作し、単一の通常スライドだけを対象にすることはありません。

using Aspose.Slides;
using Aspose.Slides.Export;

using var presentation = new Presentation("input.pptx");

var headerFooterManager = presentation.Masters[0].HeaderFooterManager;
headerFooterManager.SetFooterAndChildFootersVisibility(true);
headerFooterManager.SetSlideNumberAndChildSlideNumbersVisibility(true);
headerFooterManager.SetDateTimeAndChildDateTimesVisibility(true);
headerFooterManager.SetFooterAndChildFootersText("Footer text");
headerFooterManager.SetDateTimeAndChildDateTimesText("Date and time text");

presentation.Save("output-with-master-footers.pptx", SaveFormat.Pptx);

FAQ

マスタースライドとレイアウトスライドの違いは何ですか?

マスタースライドはプレゼンテーションのテーマと共有書式を定義します。レイアウトスライドはマスターに属し、プレースホルダーの再利用可能な配置を1つ定義します。通常のスライドはこれらのレイアウトを使用し、スライド固有のコンテンツを保存します。

あるプレゼンテーションから別のプレゼンテーションへレイアウトスライドをコピーできますか?

できます。目的のコレクションに対して AddClone メソッドでコピーを追加します。プレゼンテーション間でコピーする場合は、ソースレイアウトで使用されているフォント、テーマ、画像、その他のリソースも確認してください。

すでに使用中のレイアウトを変更するとどうなりますか?

依存スライドはレイアウトの変更を継承しますが、ローカルで書式やオブジェクトを上書きしていない限りです。プレースホルダーのジオメトリや継承されたスタイルは、多くのスライドで同時に変わる可能性があります。編集前に GetDependingSlides を使用して影響を受けるスライドを特定してください。

まだ使用中のレイアウトを削除するとどうなりますか?

Aspose.Slides は PptxEditException をスローします。先に依存スライドを再割り当てするか、RemoveUnusedLayoutSlides を使用して未参照のレイアウトのみを削除してください。