Crear y aplicar efectos WordArt en Python mediante Java

Visión general

Los efectos WordArt le permiten añadir texto visualmente atractivo y estilizado a sus presentaciones de PowerPoint. Con Aspose.Slides, los desarrolladores pueden crear, personalizar y gestionar WordArt de forma programática al igual que en Microsoft PowerPoint, sin necesidad de que Office esté instalado. Este artículo ofrece una visión general del trabajo con WordArt, incluyendo cómo aplicar transformaciones de texto, estilos de relleno, contornos, sombras y otras opciones de formato para que el contenido de su presentación sea más expresivo y atractivo. WordArt le permite tratar el texto como un objeto gráfico. Consiste en efectos o modificaciones especiales aplicadas al texto para hacerlo más atractivo o visible.

Crear una plantilla WordArt sencilla y aplicarla al texto

Usando Aspose.Slides

Primero, creamos texto sencillo usando este código Python:

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import Presentation, ShapeType

presentation = Presentation()
try:
    slide = presentation.getSlides().get_Item(0)
    auto_shape = slide.getShapes().addAutoShape(ShapeType.Rectangle, 200, 200, 400, 200)
    text_frame = auto_shape.getTextFrame()

    portion = text_frame.getParagraphs().get_Item(0).getPortions().get_Item(0)
    portion.setText("Aspose.Slides")
finally:
    presentation.dispose()

A continuación, aumentamos el tamaño de la fuente para que el efecto sea más perceptible:

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import FontData, Presentation, ShapeType

presentation = Presentation()
try:
    slide = presentation.getSlides().get_Item(0)
    auto_shape = slide.getShapes().addAutoShape(ShapeType.Rectangle, 200, 200, 400, 200)
    text_frame = auto_shape.getTextFrame()
    portion = text_frame.getParagraphs().get_Item(0).getPortions().get_Item(0)
    portion.setText("Aspose.Slides")

    font_data = FontData("Arial Black")
    portion_format = portion.getPortionFormat()
    portion_format.setLatinFont(font_data)
    portion_format.setFontHeight(36)
finally:
    presentation.dispose()

Usando Microsoft PowerPoint

Vaya al menú de efectos WordArt en Microsoft PowerPoint:

Menú de efectos WordArt en PowerPoint

En el menú de la derecha, puede elegir un efecto WordArt predefinido. En el menú de la izquierda, puede especificar la configuración para un WordArt nuevo.

Estos son algunos de los parámetros u opciones disponibles:

Opciones de formato WordArt

Usando Aspose.Slides

Aquí, aplicamos el relleno de patrón PatternStyle.SmallGrid al texto y añadimos un contorno negro al texto usando este código:

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import FillType, PatternStyle, Presentation, ShapeType
from java.awt import Color

presentation = Presentation()
try:
    slide = presentation.getSlides().get_Item(0)
    auto_shape = slide.getShapes().addAutoShape(ShapeType.Rectangle, 200, 200, 400, 200)
    text_frame = auto_shape.getTextFrame()
    portion = text_frame.getParagraphs().get_Item(0).getPortions().get_Item(0)
    portion.setText("Aspose.Slides")

    portion_format = portion.getPortionFormat()
    portion_format.getFillFormat().setFillType(FillType.Pattern)
    pattern_format = portion_format.getFillFormat().getPatternFormat()
    pattern_format.getForeColor().setColor(Color.ORANGE)
    pattern_format.getBackColor().setColor(Color.WHITE)
    pattern_format.setPatternStyle(PatternStyle.SmallGrid)

    line_format = portion_format.getLineFormat()
    line_format.getFillFormat().setFillType(FillType.Solid)
    line_format.getFillFormat().getSolidFillColor().setColor(Color.BLACK)
finally:
    presentation.dispose()

El texto resultante:

Texto con relleno de patrón y contorno negro

Aplicar otros efectos WordArt

Usando Microsoft PowerPoint

Desde la interfaz del programa, puede aplicar estos efectos al texto, a un bloque de texto, a una forma o a un elemento similar:

Efectos de texto y forma en PowerPoint

Por ejemplo, los efectos Sombra, Reflexión y Resplandor pueden aplicarse al texto; los efectos Formato 3D y Rotación 3D pueden aplicarse a un bloque de texto; el efecto Borde suave puede aplicarse a una forma (aún tiene efecto cuando no se establece ningún efecto Formato 3D).

Aplicar efectos de sombra

El siguiente código Python aplica un efecto de sombra solo al texto:

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import ColorTransformOperation, Presentation, ShapeType
from java.awt import Color

presentation = Presentation()
try:
    slide = presentation.getSlides().get_Item(0)
    auto_shape = slide.getShapes().addAutoShape(ShapeType.Rectangle, 200, 200, 400, 200)
    text_frame = auto_shape.getTextFrame()
    portion = text_frame.getParagraphs().get_Item(0).getPortions().get_Item(0)
    portion.setText("Aspose.Slides")

    portion_format = portion.getPortionFormat()
    portion_format.getEffectFormat().enableOuterShadowEffect()
    outer_shadow = portion_format.getEffectFormat().getOuterShadowEffect()
    outer_shadow.getShadowColor().setColor(Color.BLACK)
    outer_shadow.setScaleHorizontal(100)
    outer_shadow.setScaleVertical(65)
    outer_shadow.setBlurRadius(4.73)
    outer_shadow.setDirection(230)
    outer_shadow.setDistance(2)
    outer_shadow.setSkewHorizontal(30)
    outer_shadow.setSkewVertical(0)
    outer_shadow.getShadowColor().getColorTransform().add(ColorTransformOperation.SetAlpha, 0.32)
finally:
    presentation.dispose()

La API de Aspose.Slides admite tres tipos de sombras: OuterShadow, InnerShadow y PresetShadow.

Con PresetShadow puede aplicar una sombra al texto usando valores predefinidos.

Usando Microsoft PowerPoint

En PowerPoint, puede usar un tipo de sombra. He aquí un ejemplo:

Ajustes de sombra en PowerPoint

Usando Aspose.Slides

Aspose.Slides permite aplicar dos tipos de sombras a la vez: InnerShadow y PresetShadow.

Notas:

  • Cuando se usan conjuntamente OuterShadow y PresetShadow, solo se aplica el efecto OuterShadow.
  • Si se utilizan simultáneamente OuterShadow y InnerShadow, el efecto resultante o aplicado depende de la versión de PowerPoint. Por ejemplo, en PowerPoint 2013 el efecto se duplica. Pero en PowerPoint 2007 se aplica el efecto OuterShadow.

Aplicar reflexión al texto

Añadimos una reflexión al texto mediante este fragmento de código en Python a través de Java:

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import Presentation, RectangleAlignment, ShapeType

presentation = Presentation()
try:
    slide = presentation.getSlides().get_Item(0)
    auto_shape = slide.getShapes().addAutoShape(ShapeType.Rectangle, 200, 200, 400, 200)
    text_frame = auto_shape.getTextFrame()
    portion = text_frame.getParagraphs().get_Item(0).getPortions().get_Item(0)
    portion.setText("Aspose.Slides")

    portion_format = portion.getPortionFormat()
    portion_format.getEffectFormat().enableReflectionEffect()
    reflection = portion_format.getEffectFormat().getReflectionEffect()
    reflection.setBlurRadius(0.5)
    reflection.setDistance(4.72)
    reflection.setStartPosAlpha(0)
    reflection.setEndPosAlpha(60)
    reflection.setDirection(90)
    reflection.setScaleHorizontal(100)
    reflection.setScaleVertical(-100)
    reflection.setStartReflectionOpacity(60)
    reflection.setEndReflectionOpacity(0.9)
    reflection.setRectangleAlign(RectangleAlignment.BottomLeft)
finally:
    presentation.dispose()

Aplicar un efecto de resplandor al texto

Aplicamos el efecto de resplandor al texto para que brille o destaque usando este código:

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import ColorTransformOperation, Presentation, ShapeType

presentation = Presentation()
try:
    slide = presentation.getSlides().get_Item(0)
    auto_shape = slide.getShapes().addAutoShape(ShapeType.Rectangle, 200, 200, 400, 200)
    text_frame = auto_shape.getTextFrame()
    portion = text_frame.getParagraphs().get_Item(0).getPortions().get_Item(0)
    portion.setText("Aspose.Slides")

    portion_format = portion.getPortionFormat()
    portion_format.getEffectFormat().enableGlowEffect()
    glow = portion_format.getEffectFormat().getGlowEffect()
    glow.getColor().setR(jpype.JByte(-1))
    glow.getColor().getColorTransform().add(ColorTransformOperation.SetAlpha, 0.54)
    glow.setRadius(7)
finally:
    presentation.dispose()

El resultado de la operación:

Texto con efecto de resplandor

Usar transformaciones en WordArt

Utilice TextFrameFormat.setTransform para transformar todo el bloque de texto:

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import Presentation, ShapeType, TextShapeType

presentation = Presentation()
try:
    slide = presentation.getSlides().get_Item(0)
    auto_shape = slide.getShapes().addAutoShape(ShapeType.Rectangle, 200, 200, 400, 200)
    text_frame = auto_shape.getTextFrame()
    text_frame.setText("Aspose.Slides")

    text_frame.getTextFrameFormat().setTransform(TextShapeType.ArchUpPour)
finally:
    presentation.dispose()

El resultado:

Texto con transformación de arco

Usando PowerPoint

Para acceder a los tipos de transformación predefinidos, vaya a: Formato -> Efecto de texto -> Transformar

Usando Aspose.Slides

Para seleccionar un tipo de transformación, utilice la enumeración TextShapeType.

Aplicar efectos 3D a texto y formas

Aplicamos un efecto 3D a una forma de texto con este fragmento de código de ejemplo:

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import BevelPresetType, CameraPresetType, LightRigPresetType, LightingDirection, MaterialPresetType, Presentation, ShapeType
from java.awt import Color

presentation = Presentation()
try:
    slide = presentation.getSlides().get_Item(0)
    auto_shape = slide.getShapes().addAutoShape(ShapeType.Rectangle, 200, 200, 400, 200)
    auto_shape.getTextFrame().setText("Aspose.Slides")

    three_d_format = auto_shape.getThreeDFormat()
    three_d_format.getBevelBottom().setBevelType(BevelPresetType.Circle)
    three_d_format.getBevelBottom().setHeight(10.5)
    three_d_format.getBevelBottom().setWidth(10.5)

    three_d_format.getBevelTop().setBevelType(BevelPresetType.Circle)
    three_d_format.getBevelTop().setHeight(12.5)
    three_d_format.getBevelTop().setWidth(11)

    three_d_format.getExtrusionColor().setColor(Color.ORANGE)
    three_d_format.setExtrusionHeight(6)

    three_d_format.getContourColor().setColor(Color.RED)
    three_d_format.setContourWidth(1.5)

    three_d_format.setDepth(3)

    three_d_format.setMaterial(MaterialPresetType.Plastic)

    three_d_format.getLightRig().setDirection(LightingDirection.Top)
    three_d_format.getLightRig().setLightType(LightRigPresetType.Balanced)
    three_d_format.getLightRig().setRotation(0, 0, 40)

    three_d_format.getCamera().setCameraType(CameraPresetType.PerspectiveContrastingRightFacing)
finally:
    presentation.dispose()

El texto y su forma resultantes:

Forma de texto con efectos 3D

Aplicamos un efecto 3D al texto con este código Python:

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import BevelPresetType, CameraPresetType, LightRigPresetType, LightingDirection, MaterialPresetType, Presentation, ShapeType
from java.awt import Color

presentation = Presentation()
try:
    slide = presentation.getSlides().get_Item(0)
    auto_shape = slide.getShapes().addAutoShape(ShapeType.Rectangle, 200, 200, 400, 200)
    text_frame = auto_shape.getTextFrame()
    text_frame.setText("Aspose.Slides")

    three_d_format = text_frame.getTextFrameFormat().getThreeDFormat()
    three_d_format.getBevelBottom().setBevelType(BevelPresetType.Circle)
    three_d_format.getBevelBottom().setHeight(3.5)
    three_d_format.getBevelBottom().setWidth(3.5)

    three_d_format.getBevelTop().setBevelType(BevelPresetType.Circle)
    three_d_format.getBevelTop().setHeight(4)
    three_d_format.getBevelTop().setWidth(4)

    three_d_format.getExtrusionColor().setColor(Color.ORANGE)
    three_d_format.setExtrusionHeight(6)

    three_d_format.getContourColor().setColor(Color.RED)
    three_d_format.setContourWidth(1.5)

    three_d_format.setDepth(3)

    three_d_format.setMaterial(MaterialPresetType.Plastic)

    three_d_format.getLightRig().setDirection(LightingDirection.Top)
    three_d_format.getLightRig().setLightType(LightRigPresetType.Balanced)
    three_d_format.getLightRig().setRotation(0, 0, 40)

    three_d_format.getCamera().setCameraType(CameraPresetType.PerspectiveContrastingRightFacing)
finally:
    presentation.dispose()

El resultado de la operación:

Texto con efectos 3D

Aplicar efectos de sombra externa al texto

Aspose.Slides para Python a través de Java proporciona las clases OuterShadow y InnerShadow que permiten aplicar efectos de sombra al texto en un TextFrame. Siga estos pasos:

  1. Cree una instancia de la clase Presentation.
  2. Obtenga la referencia a una diapositiva mediante su índice.
  3. Añada una forma rectangular a la diapositiva.
  4. Acceda al marco de texto asociado a la forma.
  5. Desactive el relleno de la forma.
  6. Active el efecto de sombra externa.
  7. Establezca el radio de difuminado de la sombra.
  8. Defina la dirección de la sombra.
  9. Establezca la distancia de la sombra.
  10. Alinee la sombra a la esquina superior izquierda.
  11. Defina el color de la sombra como negro.
  12. Grabe la presentación como archivo PPTX.

Este código de muestra en Python a través de Java—una implementación de los pasos anteriores—le muestra cómo aplicar el efecto de sombra externa al texto:

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import FillType, Presentation, PresetColor, RectangleAlignment, SaveFormat, ShapeType

presentation = Presentation()
try:
    # Obtener referencia de la diapositiva
    slide = presentation.getSlides().get_Item(0)

    # Añadir una AutoShape del tipo Rectángulo
    auto_shape = slide.getShapes().addAutoShape(ShapeType.Rectangle, 150, 75, 150, 50)

    # Añadir TextFrame al rectángulo
    auto_shape.addTextFrame("Aspose TextBox")

    # Desactivar el relleno de la forma en caso de que queramos obtener la sombra del texto
    auto_shape.getFillFormat().setFillType(FillType.NoFill)

    # Añadir sombra externa y establecer todos los parámetros necesarios
    auto_shape.getEffectFormat().enableOuterShadowEffect()
    shadow = auto_shape.getEffectFormat().getOuterShadowEffect()
    shadow.setBlurRadius(4.0)
    shadow.setDirection(45)
    shadow.setDistance(3)
    shadow.setRectangleAlign(RectangleAlignment.TopLeft)
    shadow.getShadowColor().setPresetColor(PresetColor.Black)

    # Guardar la presentación en disco
    presentation.save("pres_out.pptx", SaveFormat.Pptx)
finally:
    presentation.dispose()

Aplicar efecto de sombra interna a formas

Siga estos pasos:

  1. Cree una instancia de la clase Presentation.
  2. Obtenga la referencia de la diapositiva.
  3. Añada una forma rectangular.
  4. Active el efecto de sombra interna.
  5. Defina todos los parámetros necesarios.
  6. Establezca el tipo de color de la sombra para usar un color temático.
  7. Defina el color temático.
  8. Grabe la presentación como archivo PPTX.

Este código de muestra (basado en los pasos anteriores) le muestra cómo aplicar el efecto de sombra interna al texto dentro de una forma en Python a través de Java:

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import ColorType, FillType, Presentation, SaveFormat, SchemeColor, ShapeType

presentation = Presentation()
try:
    # Obtener referencia de la diapositiva
    slide = presentation.getSlides().get_Item(0)

    # Añadir una AutoShape del tipo Rectangle
    auto_shape = slide.getShapes().addAutoShape(ShapeType.Rectangle, 150, 75, 400, 300)
    auto_shape.getFillFormat().setFillType(FillType.NoFill)

    # Añadir TextFrame al Rectangle
    auto_shape.addTextFrame("Aspose TextBox")
    portion = auto_shape.getTextFrame().getParagraphs().get_Item(0).getPortions().get_Item(0)
    portion_format = portion.getPortionFormat()
    portion_format.setFontHeight(50)

    # Activar InnerShadowEffect
    effect_format = portion_format.getEffectFormat()
    effect_format.enableInnerShadowEffect()

    # Establecer todos los parámetros necesarios
    inner_shadow = effect_format.getInnerShadowEffect()
    inner_shadow.setBlurRadius(8.0)
    inner_shadow.setDirection(90.0)
    inner_shadow.setDistance(6.0)
    inner_shadow.getShadowColor().setB(jpype.JByte(-67))

    # Establecer ColorType como Scheme
    inner_shadow.getShadowColor().setColorType(ColorType.Scheme)

    # Establecer Scheme Color
    inner_shadow.getShadowColor().setSchemeColor(SchemeColor.Accent1)

    # Guardar la presentación
    presentation.save("WordArt_out.pptx", SaveFormat.Pptx)
finally:
    presentation.dispose()

Preguntas frecuentes

¿Puedo usar los efectos WordArt con fuentes o escrituras diferentes (por ejemplo, árabe, chino)?

Sí, Aspose.Slides admite Unicode y funciona con todas las fuentes y escrituras principales. Los efectos WordArt como sombra, relleno y contorno pueden aplicarse independientemente del idioma, aunque la disponibilidad de la fuente y el renderizado pueden depender de las fuentes del sistema.

¿Puedo aplicar efectos WordArt a elementos del patrón de diapositivas?

Sí, puede aplicar efectos WordArt a formas en diapositivas maestras, incluidos los marcadores de posición de título, pies de página o texto de fondo. Los cambios realizados en el diseño maestro se reflejarán en todas las diapositivas asociadas.

¿Los efectos WordArt afectan al tamaño del archivo de la presentación?

Un poco. Los efectos WordArt como sombras, resplandores y rellenos degradados pueden aumentar ligeramente el tamaño del archivo debido a los metadatos de formato añadidos, pero la diferencia suele ser insignificante.

¿Puedo previsualizar el resultado de los efectos WordArt sin guardar la presentación?

Sí, puede renderizar diapositivas que contengan WordArt a imágenes (por ejemplo, PNG, JPEG) mediante Shape.getImage o Slide.getImage. Esto le permite previsualizar el resultado en memoria o en pantalla antes de guardar o exportar la presentación completa.