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:

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:

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:

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:

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:

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:

Nota
Puede cambiar los parámetros de sombra, reflexión y resplandor. Las propiedades de los efectos se establecen en cada parte del texto por separado.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:

Nota
Tanto Microsoft PowerPoint como Aspose.Slides para Python a través de Java proporcionan un número determinado de tipos de transformación predefinidos.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:

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:

Nota
La aplicación de efectos 3D al texto o a sus formas y la interacción entre efectos se basa en ciertas reglas.
Considere una escena para el texto y la forma que contiene ese texto. El efecto 3D contiene una representación de objeto 3D y la escena en la que se coloca el objeto.
- Cuando la escena se define tanto para la forma como para el texto, la escena de la forma tiene prioridad; la escena del texto se ignora.
- Cuando la forma no tiene su propia escena pero sí una representación 3D, se utiliza la escena del texto.
- En caso contrario—cuando la forma originalmente no tiene efecto 3D—la forma permanece plana y el efecto 3D se aplica solo al texto.
Estas reglas se relacionan con los métodos ThreeDFormat.getLightRig y ThreeDFormat.getCamera.
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:
- Cree una instancia de la clase Presentation.
- Obtenga la referencia a una diapositiva mediante su índice.
- Añada una forma rectangular a la diapositiva.
- Acceda al marco de texto asociado a la forma.
- Desactive el relleno de la forma.
- Active el efecto de sombra externa.
- Establezca el radio de difuminado de la sombra.
- Defina la dirección de la sombra.
- Establezca la distancia de la sombra.
- Alinee la sombra a la esquina superior izquierda.
- Defina el color de la sombra como negro.
- 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:
- Cree una instancia de la clase Presentation.
- Obtenga la referencia de la diapositiva.
- Añada una forma rectangular.
- Active el efecto de sombra interna.
- Defina todos los parámetros necesarios.
- Establezca el tipo de color de la sombra para usar un color temático.
- Defina el color temático.
- 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.