Управление слайд‑мастерами презентации в .NET

Обзор

Слайд‑мастер определяет общие настройки дизайна для группы слайдов. Он может содержать общие фигуры, логотипы, фоны, стили текста, параметры темы и настройки нижних колонтитулов. В PowerPoint редактирование слайд‑мастера — обычный способ поддерживать презентацию в едином стиле без повторения одинакового форматирования на каждом слайде.

Aspose.Slides for .NET поддерживает ту же модель. Презентация может содержать один или несколько слайд‑мастеров, каждый из которых может включать несколько макетных слайдов. Обычные слайды обычно не ссылаются непосредственно на слайд‑мастер. Вместо этого обычный слайд использует макетный слайд, который принадлежит слайд‑мастеру.

Иерархия выглядит так:

  1. Slide master – определяет общий дизайн и тему.
  2. Layout slide – определяет конкретное расположение заполнителей и форматирование уровня макета.
  3. Normal slide – содержит фактическое содержимое презентации и использует один макетный слайд.

Иерархия слайд‑мастеров, макетных слайдов и обычных слайдов

В Aspose.Slides слайд‑мастер представлен интерфейсом IMasterSlide. Все слайд‑мастера в презентации доступны через коллекцию Presentation.Masters, реализующую IMasterSlideCollection.

Access Slide Masters

В PowerPoint вы можете открыть представление слайд‑мастера через View > Slide Master.

Команда Slide Master на вкладке View в PowerPoint

В Aspose.Slides используйте коллекцию Masters для доступа к слайд‑мастерам:

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

var firstMasterSlide = presentation.Masters[0];
var masterSlideCount = presentation.Masters.Count;
var firstMasterLayoutSlideCount = firstMasterSlide.LayoutSlides.Count;

Console.WriteLine("Master slides: " + masterSlideCount);
Console.WriteLine("Layouts in the first master: " + firstMasterLayoutSlideCount);

Также можно получить слайд‑мастер, используемый обычным слайдом, через его макет:

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

var slide = presentation.Slides[0];
var layoutSlide = slide.LayoutSlide;
var masterSlide = layoutSlide.MasterSlide;
var masterSlideName = masterSlide.Name;

Console.WriteLine(masterSlideName);

What a Slide Master Contains

Слайд‑мастер — это объект, похожий на слайд. Он реализует IBaseSlide, поэтому предоставляет многие те же свойства слайдов, что и обычные и макетные слайды. Члены, специфичные для мастера, перечислены на странице API IMasterSlide.

Часто используемые члены слайд‑мастера включают:

Member Purpose
Background Устанавливает фон уровня мастера.
Shapes Сохраняет фигуры, размещённые на мастере, такие как логотипы, рамки изображений и общий текст.
LayoutSlides Содержит макетные слайды, принадлежащие мастеру.
ThemeManager Предоставляет доступ к API темы мастера.
HeaderFooterManager Управляет заголовками, нижними колонтитулами, датами и номерами слайдов для мастера и его дочерних макетов.
GetDependingSlides Возвращает обычные слайды, зависящие от мастера через их макеты.

Add an Image to a Slide Master

Когда вы добавляете изображение в слайд‑мастер, оно появляется на слайдах, использующих макеты этого мастера. Это удобно для логотипов, водяных знаков, декоративных полос и других повторяющихся визуальных элементов.

Следующий пример добавляет логотип на первый слайд‑мастер:

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

var masterSlide = presentation.Masters[0];
var logoBytes = File.ReadAllBytes("logo.png");
var logoImage = presentation.Images.AddImage(logoBytes);

masterSlide.Shapes.AddPictureFrame(
    ShapeType.Rectangle,
    x: 20,
    y: 20,
    width: 80,
    height: 80,
    image: logoImage);

presentation.Save("presentation-with-logo.pptx", SaveFormat.Pptx);

Для получения более подробной информации о рамках изображений см. Picture Frame.

Work with Placeholders

Заполнители обычно определяются на макетных слайдах. Слайд‑мастер предоставляет общий стиль и тему, которые наследуют эти макеты, а каждый макет решает, какие заполнители доступны и где они расположены.

В PowerPoint команды заполнителей доступны в представлении слайд‑мастера.

Команда Insert Placeholder в представлении Slide Master PowerPoint

Чтобы добавить новые заполнители с помощью Aspose.Slides, работайте с макетным слайдом, принадлежащим мастеру:

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

var masterSlide = presentation.Masters[0];
var blankLayoutSlide =
    masterSlide.LayoutSlides.GetByType(SlideLayoutType.Blank) ??
    masterSlide.LayoutSlides.Add(SlideLayoutType.Blank, "Blank");

blankLayoutSlide.PlaceholderManager.AddTextPlaceholder(
    x: 60,
    y: 120,
    width: 600,
    height: 80);

presentation.Slides.AddEmptySlide(blankLayoutSlide);
presentation.Save("presentation-with-placeholder.pptx", SaveFormat.Pptx);

Вы также можете форматировать уже существующие фигуры‑заполнители на слайд‑мастере. Следующий пример находит заполнитель заголовка и применяет линейный градиентный залив:

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

var masterSlide = presentation.Masters[0];
var titlePlaceholder = FindPlaceholder(masterSlide, PlaceholderType.Title);

if (titlePlaceholder != null)
{
    var redGradientColor = Color.FromArgb(255, 0, 0);
    var purpleGradientColor = Color.FromArgb(128, 0, 128);

    titlePlaceholder.FillFormat.FillType = FillType.Gradient;
    titlePlaceholder.FillFormat.GradientFormat.GradientShape = GradientShape.Linear;
    titlePlaceholder.FillFormat.GradientFormat.GradientStops.Add(0, redGradientColor);
    titlePlaceholder.FillFormat.GradientFormat.GradientStops.Add(255, purpleGradientColor);
}

presentation.Save("presentation-title-style.pptx", SaveFormat.Pptx);

static IAutoShape? FindPlaceholder(IMasterSlide masterSlide, PlaceholderType placeholderType)
{
    foreach (var shape in masterSlide.Shapes)
    {
        if (shape is IAutoShape { Placeholder: not null } autoShape &&
            autoShape.Placeholder.Type == placeholderType)
        {
            return autoShape;
        }
    }

    return null;
}

Отформатированный заголовок‑заполнитель, унаследованный обычными слайдами

Для получения дополнительных вариантов форматирования заполнителей и текста см. Set Prompt Text in Placeholder и Text Formatting.

Change a Slide Master Background

Фон мастера наследуется макетами и слайдами, которые его не переопределяют. Следующий пример задаёт сплошной цвет фона для первого слайд‑мастера:

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

var masterSlide = presentation.Masters[0];

masterSlide.Background.Type = BackgroundType.OwnBackground;
masterSlide.Background.FillFormat.FillType = FillType.Solid;
masterSlide.Background.FillFormat.SolidFillColor.Color = Color.ForestGreen;

presentation.Save("presentation-master-background.pptx", SaveFormat.Pptx);

См. также Presentation Background и Presentation Theme.

Clone a Slide Master to Another Presentation

Используйте IMasterSlideCollection.AddClone для копирования слайд‑мастера в другую презентацию. Скопированный мастер затем может использоваться макетами и слайдами в целевой презентации.

using var sourcePresentation = new Presentation("source.pptx");
using var destinationPresentation = new Presentation("destination.pptx");

var sourceMasterSlide = sourcePresentation.Masters[0];
var clonedMasterSlide = destinationPresentation.Masters.AddClone(sourceMasterSlide);

destinationPresentation.Save("destination-with-master.pptx", SaveFormat.Pptx);

Если необходимо клонировать обычные слайды вместе с их мастером, см. Clone Slides.

Add Multiple Slide Masters

Презентация может содержать несколько слайд‑мастеров. Это полезно, когда разные разделы требуют различного фирменного стиля, структуры страниц или настроек темы.

Команды PowerPoint для вставки и управления слайд‑мастерами

Следующий пример клонирует мастер по умолчанию, задаёт клону другой фон, создаёт макет под этим клонированным мастером и добавляет новый слайд на основе этого макета:

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

var defaultMasterSlide = presentation.Masters[0];
var sectionMasterSlide = presentation.Masters.AddClone(defaultMasterSlide);

sectionMasterSlide.Background.Type = BackgroundType.OwnBackground;
sectionMasterSlide.Background.FillFormat.FillType = FillType.Solid;
sectionMasterSlide.Background.FillFormat.SolidFillColor.Color = Color.LightSteelBlue;

var sourceBlankLayout =
    defaultMasterSlide.LayoutSlides.GetByType(SlideLayoutType.Blank) ??
    defaultMasterSlide.LayoutSlides[0];
var sectionBlankLayout = sectionMasterSlide.LayoutSlides.AddClone(sourceBlankLayout);

presentation.Slides.AddEmptySlide(sectionBlankLayout);
presentation.Save("presentation-with-multiple-masters.pptx", SaveFormat.Pptx);

Compare Slide Masters

Слайд‑мастера можно сравнивать методом Equals, унаследованным от IBaseSlide. Сравнение проверяет структуру и статическое содержимое, такое как фигуры, текст, форматирование, анимацию и другие настройки слайда. Оно не сравнивает уникальные идентификаторы, например ID слайдов, или динамические значения заполнителей, такие как текущая дата.

using var firstPresentation = new Presentation("first.pptx");
using var secondPresentation = new Presentation("second.pptx");

var firstPresentationMasterCount = firstPresentation.Masters.Count;
var secondPresentationMasterCount = secondPresentation.Masters.Count;

for (var firstMasterIndex = 0; firstMasterIndex < firstPresentationMasterCount; firstMasterIndex++)
{
    for (var secondMasterIndex = 0; secondMasterIndex < secondPresentationMasterCount; secondMasterIndex++)
    {
        var firstMasterSlide = firstPresentation.Masters[firstMasterIndex];
        var secondMasterSlide = secondPresentation.Masters[secondMasterIndex];
        var areMasterSlidesEqual = firstMasterSlide.Equals(secondMasterSlide);

        if (areMasterSlidesEqual)
        {
            Console.WriteLine(
                "first.pptx master #{0} equals second.pptx master #{1}",
                firstMasterIndex,
                secondMasterIndex);
        }
    }
}

Для получения дополнительной информации см. Compare Presentation Slides.

Set Slide Master View as the Default View

Используйте свойство LastView на ViewProperties для управления представлением, которое PowerPoint открывает первым. Следующий пример открывает презентацию в режиме Slide Master:

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

presentation.ViewProperties.LastView = ViewType.SlideMasterView;
presentation.Save("presentation-master-view.pptx", SaveFormat.Pptx);

Для получения информации о настройках представления см. Save Presentation.

Remove Unused Master Slides

Иногда презентации содержат слайд‑мастера, которые больше не используются обычными слайдами. Удаление неиспользуемых мастеров может уменьшить размер файла и упростить обслуживание шаблона.

Используйте MasterSlideCollection.RemoveUnused для удаления неиспользуемых мастеров из коллекции Masters:

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

presentation.Masters.RemoveUnused(ignorePreserveField: true);
presentation.Save("presentation-clean.pptx", SaveFormat.Pptx);

Вы также можете воспользоваться методом низко‑кода Compress.RemoveUnusedMasterSlides:

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

Aspose.Slides.LowCode.Compress.RemoveUnusedMasterSlides(presentation);
presentation.Save("presentation-clean.pptx", SaveFormat.Pptx);

FAQ

В чём разница между слайд‑мастером и макетным слайдом?

Слайд‑мастер определяет общие настройки дизайна, такие как тема, фон, общие фигуры и стили текста. Макетный слайд принадлежит слайд‑мастеру и задаёт конкретное расположение заполнителей. Обычный слайд использует макетный слайд, поэтому наследует как от макета, так и от мастера.

Может ли одна презентация содержать несколько слайд‑мастеров?

Да. Презентация может содержать несколько слайд‑мастеров. Используйте несколько мастеров, когда разные разделы требуют разных визуальных систем или фирменного стиля.

Стоит ли добавлять заполнители в слайд‑мастер или в макетный слайд?

В большинстве случаев заполнители добавляют в макетные слайды. Общие визуальные элементы и общие форматирования размещайте на слайд‑мастере, а заполнители содержимого — на макетах, которые будут использовать обычные слайды.

Могу ли я удалить слайд‑мастер, который всё ещё используется?

Нет. Слайд‑мастер, имеющий зависимые слайды, нельзя безопасно удалить напрямую. Сначала переместите эти слайды в макеты под другим мастером или используйте метод очистки неиспользуемых мастеров, который удаляет только те мастера, которые не задействованы.