Gestionar temas de presentaciones PowerPoint en Python
Descripción general
Un tema de presentación define las propiedades de sus elementos de diseño. Cuando seleccionas un tema, estás eligiendo un conjunto coordinado de elementos visuales y sus propiedades.
En PowerPoint, un tema incluye colores, fuentes, estilos de fondo, y efectos.

Cambiar el color del tema
Un tema de PowerPoint utiliza un conjunto específico de colores para diferentes elementos en una diapositiva. Si no te gustan los valores predeterminados, puedes cambiarlos aplicando nuevos colores de tema. Para que selecciones un nuevo color de tema, Aspose.Slides proporciona valores en la enumeración SchemeColor.
Este código Python muestra cómo cambiar el color de acento de un tema:
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
Puedes determinar el valor efectivo del color resultante de la siguiente manera:
fill_effective = shape.fill_format.get_effective()
print("{0} ({1})".format(fill_effective.solid_fill_color.name, fill_effective.solid_fill_color))
# La salida de ejemplo:
#
# ff8064a2 (Color [A=255, R=128, G=100, B=162])
Para demostrar aún más el cambio de color, creamos otro elemento, le asignamos el color de acento del paso inicial y, a continuación, actualizamos el color del tema.
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
El nuevo color se aplica automáticamente a ambos elementos.
Establecer un color de tema desde la paleta adicional
Cuando aplicas transformaciones de luminancia al color principal del tema (1), se generan colores de la paleta adicional (2). Entonces puedes establecer y recuperar esos colores de tema.

1 — Colores principales del tema
2 — Colores de la paleta adicional
Este código Python demuestra cómo se derivan los colores de la paleta adicional a partir del color principal del tema y luego se utilizan en formas:
import aspose.slides as slides
with slides.Presentation() as presentation:
slide = presentation.slides[0]
# Acento 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
# Acento 4, Más claro 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)
# Acento 4, Más claro 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)
# Acento 4, Más claro 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)
# Acento 4, Más oscuro 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)
# Acento 4, Más oscuro 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)
Mapear SchemeColor a colores de ColorScheme
Al trabajar con SchemeColor, puede que notes que contiene los siguientes valores de color de tema:
BACKGROUND1, BACKGROUND2, TEXT1 y TEXT2.
Sin embargo, Presentation.master_theme.color_scheme devuelve ColorScheme, que expone los colores correspondientes como:
dark1, dark2, light1 y light2.
Esta diferencia es solo de nomenclatura. Estos valores se refieren a los mismos espacios de color del tema y la asignación es fija:
TEXT1=dark1BACKGROUND1=light1TEXT2=dark2BACKGROUND2=light2
No hay conversión dinámica entre TEXT/BACKGROUND y dark/light. Simplemente son nombres alternativos para los mismos colores de tema.
Esta diferencia de nomenclatura proviene de la terminología de Microsoft Office. Las versiones antiguas de Office usaban Dark 1, Light 1, Dark 2 y Light 2, mientras que las versiones más recientes de la interfaz muestran los mismos espacios como Text 1, Background 1, Text 2 y Background 2.
Cambiar la fuente del tema
Para permitirte seleccionar fuentes para los temas y otros propósitos, Aspose.Slides utiliza estos identificadores especiales (similares a los de PowerPoint):
- +mn-lt — Fuente del cuerpo Latin (Minor Latin Font)
- +mj-lt — Fuente del encabezado Latin (Major Latin Font)
- +mn-ea — Fuente del cuerpo East Asian (Minor East Asian Font)
- +mj-ea — Fuente del encabezado East Asian (Major East Asian Font)
Este código Python muestra cómo asignar la fuente Latin a un elemento del tema:
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)
Este ejemplo Python muestra cómo cambiar la fuente del tema de la presentación:
presentation.master_theme.font_scheme.minor.latin_font = slides.FontData("Arial")
Todos los cuadros de texto se actualizarán con la nueva fuente.
TIP
Para obtener más información, consulta Fuentes maestras de PowerPoint con Python.Cambiar el estilo de fondo del tema
Por defecto, PowerPoint ofrece 12 fondos predefinidos, pero una presentación típica solo almacena 3 de ellos.

Por ejemplo, después de guardar una presentación en PowerPoint, puedes ejecutar el siguiente código Python para determinar cuántos fondos predefinidos contiene:
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 de la clase FormatScheme, puedes añadir o acceder a estilos de fondo en un tema de PowerPoint.
Este ejemplo Python muestra cómo establecer el fondo de la presentación:
presentation.masters[0].background.style_index = 2 # 0 indica sin relleno; la indexación comienza en 1.
TIP
Para obtener más información, consulta Administrar fondos de presentación en Python.Cambiar los efectos del tema
Un tema de PowerPoint normalmente incluye tres valores en cada matriz de estilo. Estas matrices se combinan en tres niveles de efecto: sutil, moderado e intenso. Por ejemplo, aquí está el resultado cuando esos efectos se aplican a una forma específica:

Utilizando las tres propiedades —FillStyles, LineStyles y EffectStyles— de la clase FormatScheme, puedes modificar los elementos del tema (incluso con mayor flexibilidad que en PowerPoint).
Este código Python muestra cómo cambiar un efecto del tema alterando partes de esos elementos:
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)
Los cambios resultantes incluyen actualizaciones del color de relleno, tipo de relleno, efecto de sombra y otras propiedades:

Preguntas frecuentes
¿Puedo aplicar un tema a una sola diapositiva sin cambiar la maestra?
Sí. Aspose.Slides admite sobrescrituras de tema a nivel de diapositiva, por lo que puedes aplicar un tema local solo a esa diapositiva mientras mantienes intacto el tema maestro (mediante el SlideThemeManager).
¿Cuál es la forma más segura de trasladar un tema de una presentación a otra?
Clonar diapositivas junto con su maestra en la presentación de destino. Esto conserva la maestra original, los diseños y el tema asociado, de modo que la apariencia permanezca coherente.
¿Cómo puedo ver los valores “efectivos” después de toda la herencia y sobrescrituras?
Utiliza las vistas “efectivas” de la API para tema/color/fuente/efecto. Estas devuelven las propiedades resueltas y finales después de aplicar la maestra y cualquier sobrescritura local.