Управление темами презентаций PowerPoint в Python
Обзор
Тема презентации определяет свойства её дизайнерских элементов. Выбирая тему, вы выбираете согласованный набор визуальных элементов и их свойства.
В PowerPoint тема включает цвета, шрифты, стили фона, и эффекты.

Изменение цвета темы
Тема PowerPoint использует определённый набор цветов для разных элементов слайда. Если вас не устраивают значения по умолчанию, вы можете изменить их, применив новые цвета темы. Чтобы выбрать новый цвет темы, Aspose.Slides предоставляет значения из перечисления SchemeColor.
Этот фрагмент Python показывает, как изменить акцентный цвет темы:
import aspose.pydrawing as draw
import aspose.slides as slides
with slides.Presentation() as presentation:
slide = presentation.slides[0]
shape = slide.shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 10, 10, 100, 100)
shape.fill_format.fill_type = slides.FillType.SOLID
shape.fill_format.solid_fill_color.scheme_color = slides.SchemeColor.ACCENT4
Вы можете определить фактическое значение полученного цвета следующим образом:
fill_effective = shape.fill_format.get_effective()
print("{0} ({1})".format(fill_effective.solid_fill_color.name, fill_effective.solid_fill_color))
# Пример вывода:
#
# ff8064a2 (Цвет [A=255, R=128, G=100, B=162])
Для дальнейшей демонстрации изменения цвета мы создаём ещё один элемент, назначаем ему акцентный цвет из первого шага, а затем обновляем цвет темы.
other_shape = slide.shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 10, 120, 100, 100)
other_shape.fill_format.fill_type = slides.FillType.SOLID
other_shape.fill_format.solid_fill_color.scheme_color = slides.SchemeColor.ACCENT4
presentation.master_theme.color_scheme.accent4.color = draw.Color.red
Новый цвет применяется автоматически к обоим элементам.
Установка цвета темы из дополнительной палитры
Когда вы применяете преобразования яркости к основному цвету темы (1), генерируются цвета из дополнительной палитры (2). Затем вы можете установить и получить эти цвета темы.

1 — Основные цвета темы
2 — Цвета из дополнительной палитры
Этот фрагмент Python демонстрирует, как цвета дополнительной палитры выводятся из основного цвета темы и затем используются в фигурах:
import aspose.slides as slides
with slides.Presentation() as presentation:
slide = presentation.slides[0]
# Акцент 4
shape1 = slide.shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 10, 10, 50, 50)
shape1.fill_format.fill_type = slides.FillType.SOLID
shape1.fill_format.solid_fill_color.scheme_color = slides.SchemeColor.ACCENT4
# Акцент 4, светлее 80%
shape2 = slide.shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 10, 70, 50, 50)
shape2.fill_format.fill_type = slides.FillType.SOLID
shape2.fill_format.solid_fill_color.scheme_color = slides.SchemeColor.ACCENT4
shape2.fill_format.solid_fill_color.color_transform.add(slides.ColorTransformOperation.MULTIPLY_LUMINANCE, 0.2)
shape2.fill_format.solid_fill_color.color_transform.add(slides.ColorTransformOperation.ADD_LUMINANCE, 0.8)
# Акцент 4, светлее 60%
shape3 = slide.shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 10, 130, 50, 50)
shape3.fill_format.fill_type = slides.FillType.SOLID
shape3.fill_format.solid_fill_color.scheme_color = slides.SchemeColor.ACCENT4
shape3.fill_format.solid_fill_color.color_transform.add(slides.ColorTransformOperation.MULTIPLY_LUMINANCE, 0.4)
shape3.fill_format.solid_fill_color.color_transform.add(slides.ColorTransformOperation.ADD_LUMINANCE, 0.6)
# Акцент 4, светлее 40%
shape4 = slide.shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 10, 190, 50, 50)
shape4.fill_format.fill_type = slides.FillType.SOLID
shape4.fill_format.solid_fill_color.scheme_color = slides.SchemeColor.ACCENT4
shape4.fill_format.solid_fill_color.color_transform.add(slides.ColorTransformOperation.MULTIPLY_LUMINANCE, 0.6)
shape4.fill_format.solid_fill_color.color_transform.add(slides.ColorTransformOperation.ADD_LUMINANCE, 0.4)
# Акцент 4, темнее 25%
shape5 = slide.shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 10, 250, 50, 50)
shape5.fill_format.fill_type = slides.FillType.SOLID
shape5.fill_format.solid_fill_color.scheme_color = slides.SchemeColor.ACCENT4
shape5.fill_format.solid_fill_color.color_transform.add(slides.ColorTransformOperation.MULTIPLY_LUMINANCE, 0.75)
# Акцент 4, темнее 50%
shape6 = slide.shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 10, 310, 50, 50)
shape6.fill_format.fill_type = slides.FillType.SOLID
shape6.fill_format.solid_fill_color.scheme_color = slides.SchemeColor.ACCENT4
shape6.fill_format.solid_fill_color.color_transform.add(slides.ColorTransformOperation.MULTIPLY_LUMINANCE, 0.5)
presentation.save("example.pptx", slides.export.SaveFormat.PPTX)
Изменение шрифта темы
Чтобы предоставить возможность выбора шрифтов для тем и других целей, Aspose.Slides использует следующие специальные идентификаторы (аналогичные тем, что применяются в PowerPoint):
- +mn-lt — Body Font Latin (Minor Latin Font)
- +mj-lt — Heading Font Latin (Major Latin Font)
- +mn-ea — Body Font East Asian (Minor East Asian Font)
- +mj-ea — Heading Font East Asian (Major East Asian Font)
Этот фрагмент Python показывает, как назначить латинский шрифт элементу темы:
portion = slides.Portion("Theme text format")
portion.portion_format.latin_font = slides.FontData("+mn-lt")
paragraph = slides.Paragraph()
paragraph.portions.add(portion)
shape = slide.shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 10, 10, 100, 100)
shape.text_frame.paragraphs.add(paragraph)
Этот пример Python показывает, как изменить шрифт темы презентации:
presentation.master_theme.font_scheme.minor.latin_font = slides.FontData("Arial")
Все текстовые поля будут обновлены новым шрифтом.
TIP
Для получения дополнительной информации см. Master PowerPoint Fonts with Python.Изменение стиля фона темы
По умолчанию PowerPoint предоставляет 12 предопределённых фонов, однако типичная презентация хранит только 3 из них.

Например, после сохранения презентации в PowerPoint вы можете выполнить следующий код Python, чтобы определить, сколько предопределённых фонов она содержит:
with slides.Presentation() as presentation:
number_of_background_fills = len(presentation.master_theme.format_scheme.background_fill_styles)
print(f"Number of theme background fill styles: {number_of_background_fills}")
background_fill_styles из класса FormatScheme, вы можете добавить или получить доступ к стилям фона в теме PowerPoint.
Этот пример Python показывает, как задать фон презентации:
presentation.masters[0].background.style_index = 2 # 0 обозначает отсутствие заливки; нумерация начинается с 1.
TIP
Для получения дополнительной информации см. Manage Presentation Backgrounds in Python.Изменение эффектов темы
Тема PowerPoint обычно включает три значения в каждом массиве стилей. Эти массивы объединяются в три уровня эффектов: тонкий, умеренный и интенсивный. Например, ниже показан результат применения этих эффектов к конкретной фигуре:

Используя три свойства — FillStyles, LineStyles и EffectStyles — из класса FormatScheme, вы можете изменять элементы темы (даже более гибко, чем в PowerPoint).
Этот фрагмент Python показывает, как изменить эффект темы, изменив части этих элементов:
with slides.Presentation("sample.pptx") as presentation:
presentation.master_theme.format_scheme.line_styles[0].fill_format.solid_fill_color.color = draw.Color.red
presentation.master_theme.format_scheme.fill_styles[2].fill_type = slides.FillType.SOLID
presentation.master_theme.format_scheme.fill_styles[2].solid_fill_color.color = draw.Color.forest_green
presentation.master_theme.format_scheme.effect_styles[2].effect_format.outer_shadow_effect.distance = 10
presentation.save("output.pptx", slides.export.SaveFormat.PPTX)
Полученные изменения включают обновления цвета заливки, типа заливки, тени и других свойств:

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