# Administrar temas de presentación en PHP

> Domina los temas de presentación en Aspose.Slides para PHP mediante Java para crear, personalizar y convertir archivos PowerPoint con una identidad corporativa coherente.

Source: https://docs.aspose.com/slides/es/php-java/presentation-theme/
Updated: 2026-03-04

Un tema de presentación define las propiedades de los elementos de diseño. Cuando seleccionas un tema de presentación, esencialmente estás eligiendo un conjunto específico de elementos visuales y sus propiedades.

En PowerPoint, un tema comprende colores, [fuentes](/slides/es/php-java/powerpoint-fonts/), [estilos de fondo](/slides/es/php-java/presentation-background/), y efectos.

![componentes del tema](theme-constituents.png)

## **Cambiar color del tema**

Un tema de PowerPoint utiliza un conjunto específico de colores para los diferentes elementos de una diapositiva. Si no te gustan los colores, los cambias aplicando nuevos colores al tema. Para que puedas seleccionar un nuevo color de tema, Aspose.Slides ofrece valores bajo la enumeración [SchemeColor](https://reference.aspose.com/slides/es/php-java/aspose.slides/SchemeColor).

Este código PHP muestra cómo cambiar el color de acento de un tema:

```php
  $pres = new Presentation();
  try {
    $shape = $pres->getSlides()->get_Item(0)->getShapes()->addAutoShape(ShapeType::Rectangle, 10, 10, 100, 100);
    $shape->getFillFormat()->setFillType(FillType::Solid);
    $shape->getFillFormat()->getSolidFillColor()->setSchemeColor(SchemeColor->Accent4);
  } finally {
    if (!java_is_null($pres)) {
      $pres->dispose();
    }
  }
```

Puedes determinar el valor efectivo del color resultante de esta manera:

```php
  $fillEffective = $shape->getFillFormat()->getEffective();
  $effectiveColor = $fillEffective->getSolidFillColor();
  echo(sprintf("Color [A=%d, R=%d, G=%d, B=%d]", $effectiveColor->getAlpha(), $effectiveColor->getRed(), $effectiveColor->getGreen(), $effectiveColor->getBlue()));

```

Para demostrar aún más la operación de cambio de color, creamos otro elemento y le asignamos el color de acento (de la operación inicial). Después cambiamos el color en el tema:

```php
  $otherShape = $pres->getSlides()->get_Item(0)->getShapes()->addAutoShape(ShapeType::Rectangle, 10, 120, 100, 100);
  $otherShape->getFillFormat()->setFillType(FillType::Solid);
  $otherShape->getFillFormat()->getSolidFillColor()->setSchemeColor(SchemeColor->Accent4);
  $pres->getMasterTheme()->getColorScheme()->getAccent4()->setColor(java("java.awt.Color")->RED);

```

El nuevo color se aplica automáticamente en ambos elementos.

### **Establecer color del tema a partir de una paleta adicional**

Cuando aplicas transformaciones de luminancia al color principal del tema(1), se forman colores de la paleta adicional(2). Entonces puedes establecer y obtener esos colores del tema. 

![colores de la paleta adicional](additional-palette-colors.png)

**1** - Main theme colors

**2** - Colors from the additional palette.

Este código PHP demuestra una operación donde los colores de la paleta adicional se obtienen del color principal del tema y luego se usan en formas:

```php
  $presentation = new Presentation();
  try {
    $slide = $presentation->getSlides()->get_Item(0);
    # Acento 4
    $shape1 = $slide->getShapes()->addAutoShape(ShapeType::Rectangle, 10, 10, 50, 50);
    $shape1->getFillFormat()->setFillType(FillType::Solid);
    $shape1->getFillFormat()->getSolidFillColor()->setSchemeColor(SchemeColor->Accent4);
    # Acento 4, Más claro 80%
    $shape2 = $slide->getShapes()->addAutoShape(ShapeType::Rectangle, 10, 70, 50, 50);
    $shape2->getFillFormat()->setFillType(FillType::Solid);
    $shape2->getFillFormat()->getSolidFillColor()->setSchemeColor(SchemeColor->Accent4);
    $shape2->getFillFormat()->getSolidFillColor()->getColorTransform()->add(ColorTransformOperation->MultiplyLuminance, 0.2);
    $shape2->getFillFormat()->getSolidFillColor()->getColorTransform()->add(ColorTransformOperation->AddLuminance, 0.8);
    # Acento 4, Más claro 60%
    $shape3 = $slide->getShapes()->addAutoShape(ShapeType::Rectangle, 10, 130, 50, 50);
    $shape3->getFillFormat()->setFillType(FillType::Solid);
    $shape3->getFillFormat()->getSolidFillColor()->setSchemeColor(SchemeColor->Accent4);
    $shape3->getFillFormat()->getSolidFillColor()->getColorTransform()->add(ColorTransformOperation->MultiplyLuminance, 0.4);
    $shape3->getFillFormat()->getSolidFillColor()->getColorTransform()->add(ColorTransformOperation->AddLuminance, 0.6);
    # Acento 4, Más claro 40%
    $shape4 = $slide->getShapes()->addAutoShape(ShapeType::Rectangle, 10, 190, 50, 50);
    $shape4->getFillFormat()->setFillType(FillType::Solid);
    $shape4->getFillFormat()->getSolidFillColor()->setSchemeColor(SchemeColor->Accent4);
    $shape4->getFillFormat()->getSolidFillColor()->getColorTransform()->add(ColorTransformOperation->MultiplyLuminance, 0.6);
    $shape4->getFillFormat()->getSolidFillColor()->getColorTransform()->add(ColorTransformOperation->AddLuminance, 0.4);
    # Acento 4, Más oscuro 25%
    $shape5 = $slide->getShapes()->addAutoShape(ShapeType::Rectangle, 10, 250, 50, 50);
    $shape5->getFillFormat()->setFillType(FillType::Solid);
    $shape5->getFillFormat()->getSolidFillColor()->setSchemeColor(SchemeColor->Accent4);
    $shape5->getFillFormat()->getSolidFillColor()->getColorTransform()->add(ColorTransformOperation->MultiplyLuminance, 0.75);
    # Acento 4, Más oscuro 50%
    $shape6 = $slide->getShapes()->addAutoShape(ShapeType::Rectangle, 10, 310, 50, 50);
    $shape6->getFillFormat()->setFillType(FillType::Solid);
    $shape6->getFillFormat()->getSolidFillColor()->setSchemeColor(SchemeColor->Accent4);
    $shape6->getFillFormat()->getSolidFillColor()->getColorTransform()->add(ColorTransformOperation->MultiplyLuminance, 0.5);
    $presentation->save($path . "example_accent4.pptx", SaveFormat::Pptx);
  } finally {
    if (!java_is_null($presentation)) {
      $presentation->dispose();
    }
  }
```

### **Mapear `SchemeColor` a los colores de `ColorScheme`**

Al trabajar con [SchemeColor](https://reference.aspose.com/slides/es/php-java/aspose.slides/schemecolor/), puedes notar que contiene los siguientes valores de color del tema:

`Background1`, `Background2`, `Text1`, and `Text2`.

Sin embargo, `Presentation::getMasterTheme()::getColorScheme()` devuelve [ColorScheme](https://reference.aspose.com/slides/es/php-java/aspose.slides/colorscheme/), que expone los colores correspondientes como:

`Dark1`, `Dark2`, `Light1`, and `Light2`.

Esta diferencia es solo de nomenclatura. Estos valores se refieren a las mismas ranuras de color del tema y el mapeo es fijo:

* `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 del tema.

Esta diferencia de nombres 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 las mismas ranuras como `Text 1`, `Background 1`, `Text 2` y `Background 2`.

## **Cambiar fuente del tema**

Para que puedas seleccionar fuentes para temas y otros propósitos, Aspose.Slides usa estos identificadores especiales (similares a los de PowerPoint):

* **+mn-lt** - Fuente del cuerpo Latin (Fuente Latin menor)
* **+mj-lt** - Fuente del encabezado Latin (Fuente Latin mayor)
* **+mn-ea** - Fuente del cuerpo East Asian (Fuente East Asian menor)
* **+mj-ea** - Fuente del cuerpo East Asian (Fuente East Asian mayor)

Este código PHP muestra cómo asignar la fuente Latin a un elemento del tema:

```php
  $shape = $pres->getSlides()->get_Item(0)->getShapes()->addAutoShape(ShapeType::Rectangle, 10, 10, 100, 100);
  $paragraph = new Paragraph();
  $portion = new Portion("Theme text format");
  $paragraph->getPortions()->add($portion);
  $shape->getTextFrame()->getParagraphs()->add($paragraph);
  $portion->getPortionFormat()->setLatinFont(new FontData("+mn-lt"));

```

Este código PHP muestra cómo cambiar la fuente del tema de la presentación:

```php
  $pres->getMasterTheme()->getFontScheme()->getMinor()->setLatinFont(new FontData("Arial"));

```

La fuente en todos los cuadros de texto se actualizará.

{{% alert color="primary" title="TIP" %}} 
Puede que quieras ver [fuentes de PowerPoint](/slides/es/php-java/powerpoint-fonts/).
{{% /alert %}}

## **Cambiar estilo de fondo del tema**

Por defecto, la aplicación PowerPoint ofrece 12 fondos predefinidos, pero solo 3 de esos 12 fondos se guardan en una presentación típica. 

![todo:image_alt_text](presentation-design_8.png)

Por ejemplo, después de guardar una presentación en la aplicación PowerPoint, puedes ejecutar este código PHP para averiguar el número de fondos predefinidos en la presentación:

```php
  $pres = new Presentation("pres.pptx");
  try {
    $numberOfBackgroundFills = $pres->getMasterTheme()->getFormatScheme()->getBackgroundFillStyles()->size();
    echo("Number of background fill styles for theme is " . $numberOfBackgroundFills);
  } finally {
    if (!java_is_null($pres)) {
      $pres->dispose();
    }
  }
```

{{% alert color="warning" %}} 
Utilizando la propiedad [BackgroundFillStyles](https://reference.aspose.com/slides/es/php-java/aspose.slides/FormatScheme#getBackgroundFillStyles--) de la clase [FormatScheme](https://reference.aspose.com/slides/es/php-java/aspose.slides/FormatScheme), puedes añadir o acceder al estilo de fondo en un tema de PowerPoint.
{{% /alert %}} 

Este código PHP muestra cómo establecer el fondo para una presentación:

```php
  $pres->getMasters()->get_Item(0)->getBackground()->setStyleIndex(2);
```

**Guía de índices**: 0 se usa para sin relleno. El índice comienza en 1.

{{% alert color="primary" title="TIP" %}} 
Puede que quieras ver [Fondo de PowerPoint](/slides/es/php-java/presentation-background/).
{{% /alert %}}

## **Cambiar efecto del tema**

Un tema de PowerPoint suele contener 3 valores para cada matriz de estilo. esas matrices se combinan en estos 3 efectos: sutil, moderado e intenso. Por ejemplo, este es el resultado cuando los efectos se aplican a una forma específica:

![todo:image_alt_text](presentation-design_10.png)

Utilizando 3 propiedades ([FillStyles](https://reference.aspose.com/slides/es/php-java/aspose.slides/FormatScheme#getFillStyles--), [LineStyles](https://reference.aspose.com/slides/es/php-java/aspose.slides/FormatScheme#getLineStyles--), [EffectStyles](https://reference.aspose.com/slides/es/php-java/aspose.slides/FormatScheme#getEffectStyles--)) de la clase [FormatScheme](https://reference.aspose.com/slides/es/php-java/aspose.slides/FormatScheme) puedes cambiar los elementos de un tema (incluso con más flexibilidad que las opciones de PowerPoint).

Este código PHP muestra cómo cambiar un efecto del tema alterando partes de los elementos:

```php
  $pres = new Presentation("Subtle_Moderate_Intense.pptx");
  try {
    $pres->getMasterTheme()->getFormatScheme()->getLineStyles()->get_Item(0)->getFillFormat()->getSolidFillColor()->setColor(java("java.awt.Color")->RED);
    $pres->getMasterTheme()->getFormatScheme()->getFillStyles()->get_Item(2)->setFillType(FillType::Solid);
    $pres->getMasterTheme()->getFormatScheme()->getFillStyles()->get_Item(2)->getSolidFillColor()->setColor(java("java.awt.Color")->GREEN);
    $pres->getMasterTheme()->getFormatScheme()->getEffectStyles()->get_Item(2)->getEffectFormat()->getOuterShadowEffect()->setDistance(10.0);
    $pres->save("Design_04_Subtle_Moderate_Intense-out.pptx", SaveFormat::Pptx);
  } finally {
    if (!java_is_null($pres)) {
      $pres->dispose();
    }
  }
```

Los cambios resultantes en el color de relleno, tipo de relleno, efecto de sombra, etc.:

![todo:image_alt_text](presentation-design_11.png)

## **FAQ**

**¿Puedo aplicar un tema a una sola diapositiva sin cambiar la diapositiva maestra?**

Sí. Aspose.Slides admite sobrescrituras de tema a nivel de diapositiva, por lo que puedes aplicar un tema local solo a esa diapositiva manteniendo intacto el tema maestro (a través del [SlideThemeManager](https://reference.aspose.com/slides/es/php-java/aspose.slides/slidethememanager/)).

**¿Cuál es la forma más segura de transferir un tema de una presentación a otra?**

[Clonar diapositivas](/slides/es/php-java/clone-slides/) junto con su maestro en la presentación de destino. Esto preserva el maestro original, los diseños y el tema asociado, de modo que la apariencia permanezca consistente.

**¿Cómo puedo ver los valores “efectivos” después de toda la herencia y sobrescrituras?**

Utiliza las ["vistas efectivas"](/slides/es/php-java/shape-effective-properties/) de la API para tema/color/fuente/efecto. Estas devuelven las propiedades finales resueltas tras aplicar el maestro y cualquier sobrescritura local.
