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.

theme-constituents

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.

additional-palette-colors

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 = dark1
  • BACKGROUND1 = light1
  • TEXT2 = dark2
  • BACKGROUND2 = 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.

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.

todo:image_alt_text

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}")

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.

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:

todo:image_alt_text

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:

todo:image_alt_text

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.