Управление темами презентаций в .NET
Тема презентации определяет свойства элементов дизайна. При выборе темы презентации вы по сути выбираете конкретный набор визуальных элементов и их свойства.
В PowerPoint тема состоит из цветов, fonts, background styles, и эффектов.

Изменить цвет темы
Тема PowerPoint использует определенный набор цветов для различных элементов слайда. Если вам не нравятся цвета, вы меняете их, применяя новые цвета к теме. Чтобы позволить вам выбрать новый цвет темы, Aspose.Slides предоставляет значения в перечислении SchemeColor.
Этот код на C# показывает, как изменить цвет акцента темы:
using (Presentation pres = new Presentation())
{
IAutoShape shape = pres.Slides[0].Shapes.AddAutoShape(ShapeType.Rectangle, 10, 10, 100, 100);
shape.FillFormat.FillType = FillType.Solid;
shape.FillFormat.SolidFillColor.SchemeColor = SchemeColor.Accent4;
}
Таким образом вы можете определить эффективное значение полученного цвета:
var fillEffective = shape.FillFormat.GetEffective();
Console.WriteLine($"{fillEffective.SolidFillColor.Name} ({fillEffective.SolidFillColor})"); // ff8064a2 (Цвет [A=255, R=128, G=100, B=162])
Чтобы дополнительно продемонстрировать операцию изменения цвета, мы создаём другой элемент и назначаем ему цвет акцента (из первоначальной операции). Затем меняем цвет в теме:
IAutoShape otherShape = pres.Slides[0].Shapes.AddAutoShape(ShapeType.Rectangle, 10, 120, 100, 100);
otherShape.FillFormat.FillType = FillType.Solid;
otherShape.FillFormat.SolidFillColor.SchemeColor = SchemeColor.Accent4;
pres.MasterTheme.ColorScheme.Accent4.Color = Color.Red;
Новый цвет автоматически применяется к обоим элементам.
Установить цвет темы из дополнительной палитры
Когда вы применяете преобразования яркости к основному цвету темы (1), образуются цвета из дополнительной палитры (2). Затем вы можете задавать и получать эти цвета темы.

1 - Основные цвета темы
2 - Цвета из дополнительной палитры.
Этот код на C# демонстрирует операцию, при которой цвета дополнительной палитры получаются из основного цвета темы и затем используются в фигурах:
using (Presentation presentation = new Presentation())
{
ISlide slide = presentation.Slides[0];
// Акцент 4
IShape shape1 = slide.Shapes.AddAutoShape(ShapeType.Rectangle, 10, 10, 50, 50);
shape1.FillFormat.FillType = FillType.Solid;
shape1.FillFormat.SolidFillColor.SchemeColor = SchemeColor.Accent4;
// Акцент 4, светлее 80%
IShape shape2 = slide.Shapes.AddAutoShape(ShapeType.Rectangle, 10, 70, 50, 50);
shape2.FillFormat.FillType = FillType.Solid;
shape2.FillFormat.SolidFillColor.SchemeColor = SchemeColor.Accent4;
shape2.FillFormat.SolidFillColor.ColorTransform.Add(ColorTransformOperation.MultiplyLuminance, 0.2f);
shape2.FillFormat.SolidFillColor.ColorTransform.Add(ColorTransformOperation.AddLuminance, 0.8f);
// Акцент 4, светлее 60%
IShape shape3 = slide.Shapes.AddAutoShape(ShapeType.Rectangle, 10, 130, 50, 50);
shape3.FillFormat.FillType = FillType.Solid;
shape3.FillFormat.SolidFillColor.SchemeColor = SchemeColor.Accent4;
shape3.FillFormat.SolidFillColor.ColorTransform.Add(ColorTransformOperation.MultiplyLuminance, 0.4f);
shape3.FillFormat.SolidFillColor.ColorTransform.Add(ColorTransformOperation.AddLuminance, 0.6f);
// Акцент 4, светлее 40%
IShape shape4 = slide.Shapes.AddAutoShape(ShapeType.Rectangle, 10, 190, 50, 50);
shape4.FillFormat.FillType = FillType.Solid;
shape4.FillFormat.SolidFillColor.SchemeColor = SchemeColor.Accent4;
shape4.FillFormat.SolidFillColor.ColorTransform.Add(ColorTransformOperation.MultiplyLuminance, 0.6f);
shape4.FillFormat.SolidFillColor.ColorTransform.Add(ColorTransformOperation.AddLuminance, 0.4f);
// Акцент 4, темнее 25%
IShape shape5 = slide.Shapes.AddAutoShape(ShapeType.Rectangle, 10, 250, 50, 50);
shape5.FillFormat.FillType = FillType.Solid;
shape5.FillFormat.SolidFillColor.SchemeColor = SchemeColor.Accent4;
shape5.FillFormat.SolidFillColor.ColorTransform.Add(ColorTransformOperation.MultiplyLuminance, 0.75f);
// Акцент 4, темнее 50%
IShape shape6 = slide.Shapes.AddAutoShape(ShapeType.Rectangle, 10, 310, 50, 50);
shape6.FillFormat.FillType = FillType.Solid;
shape6.FillFormat.SolidFillColor.SchemeColor = SchemeColor.Accent4;
shape6.FillFormat.SolidFillColor.ColorTransform.Add(ColorTransformOperation.MultiplyLuminance, 0.5f);
presentation.Save("example.pptx", SaveFormat.Pptx);
}
Изменить шрифт темы
Чтобы позволить вам выбирать шрифты для тем и других целей, Aspose.Slides использует следующие специальные идентификаторы (аналогичные тем, что используются в PowerPoint):
- +mn-lt - Основной шрифт Latin (Minor Latin Font)
- +mj-lt - Шрифт заголовка Latin (Major Latin Font)
- +mn-ea - Основной шрифт East Asian (Minor East Asian Font)
- +mj-ea - Основной шрифт East Asian (Minor East Asian Font)
Этот код на C# показывает, как назначить латинский шрифт элементу темы:
IAutoShape shape = pres.Slides[0].Shapes.AddAutoShape(ShapeType.Rectangle, 10, 10, 100, 100);
Paragraph paragraph = new Paragraph();
Portion portion = new Portion("Theme text format");
paragraph.Portions.Add(portion);
shape.TextFrame.Paragraphs.Add(paragraph);
portion.PortionFormat.LatinFont = new FontData("+mn-lt");
Этот код на C# показывает, как изменить шрифт темы презентации:
pres.MasterTheme.FontScheme.Minor.LatinFont = new FontData("Arial");
Шрифт во всех текстовых полях будет обновлён.
TIP
Возможно, вам будет интересно посмотреть PowerPoint fonts.Изменить стиль фона темы
По умолчанию приложение PowerPoint предоставляет 12 предопределённых фонов, но только 3 из этих 12 фонов сохраняются в типичной презентации.

Например, после сохранения презентации в приложении PowerPoint вы можете выполнить этот код на C#, чтобы узнать количество предопределённых фонов в презентации:
using (Presentation pres = new Presentation("pres.pptx"))
{
int numberOfBackgroundFills = pres.MasterTheme.FormatScheme.BackgroundFillStyles.Count;
Console.WriteLine($"Number of background fill styles for theme is {numberOfBackgroundFills}");
}
Этот код на C# показывает, как задать фон для презентации:
pres.Masters[0].Background.StyleIndex = 2;
Справочник индексов: 0 используется для отсутствия заливки. Индекс начинается с 1.
TIP
Возможно, вам будет интересно посмотреть PowerPoint Background.Изменить эффект темы
Тема PowerPoint обычно содержит 3 значения для каждого массива стилей. Эти массивы комбинируются в 3 эффекта: тонкий, умеренный и интенсивный. Например, это результат, когда эффекты применяются к конкретной фигуре:

Используя 3 свойства (FillStyles, LineStyles, EffectStyles) из класса FormatScheme вы можете изменить элементы темы (даже более гибко, чем варианты в PowerPoint).
Этот код на C# показывает, как изменить эффект темы, изменяя части элементов:
using (Presentation pres = new Presentation("Subtle_Moderate_Intense.pptx"))
{
pres.MasterTheme.FormatScheme.LineStyles[0].FillFormat.SolidFillColor.Color = Color.Red;
pres.MasterTheme.FormatScheme.FillStyles[2].FillType = FillType.Solid;
pres.MasterTheme.FormatScheme.FillStyles[2].SolidFillColor.Color = Color.ForestGreen;
pres.MasterTheme.FormatScheme.EffectStyles[2].EffectFormat.OuterShadowEffect.Distance = 10f;
pres.Save("Design_04_Subtle_Moderate_Intense-out.pptx", SaveFormat.Pptx);
}
Полученные изменения в цвете заливки, типе заливки, эффекте тени и т.д.:

FAQ
Могу ли я применить тему к отдельному слайду, не меняя мастер?
Да. Aspose.Slides поддерживает переопределение темы на уровне слайда, поэтому вы можете применить локальную тему только к этому слайду, сохранив мастер‑тему нетронутой (через SlideThemeManager).
Какой самый безопасный способ перенести тему из одной презентации в другую?
Clone slides вместе с их мастером в целевую презентацию. Это сохраняет исходный мастер, макеты и связанную тему, так что внешний вид остаётся одинаковым.
Как я могу увидеть «эффективные» значения после всех наследований и переопределений?
Используйте «эффективные» представления API [/slides/net/shape-effective-properties/] для темы/цвета/шрифта/эффекта. Они возвращают окончательные свойства после применения мастера и любых локальных переопределений.