Создание и применение эффектов WordArt в Python через Java
Обзор
Эффекты WordArt позволяют добавлять визуально привлекательный, стилизованный текст в ваши презентации PowerPoint. С помощью Aspose.Slides разработчики могут программно создавать, настраивать и управлять WordArt так же, как в Microsoft PowerPoint — без необходимости установки Office. Эта статья предоставляет обзор работы с WordArt, включая применение трансформаций текста, стилей заливки, обводки, теней и других параметров форматирования, чтобы сделать содержание презентации более выразительным и захватывающим. WordArt позволяет рассматривать текст как графический объект. Он состоит из эффектов или специальных модификаций, применяемых к тексту, чтобы сделать его более привлекательным или заметным.
Создать простой шаблон WordArt и применить его к тексту
Использование Aspose.Slides
Сначала мы создаём простой текст с помощью этого кода на 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()
Затем увеличиваем размер шрифта, чтобы эффект был более заметным:
import jpade
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()
Использование Microsoft PowerPoint
Перейдите в меню эффектов WordArt в Microsoft PowerPoint:

В меню справа вы можете выбрать предопределённый эффект WordArt. В меню слева можно задать параметры нового WordArt.
Это некоторые из доступных параметров или опций:

Использование Aspose.Slides
Здесь мы применяем шаблон заполнения PatternStyle.SmallGrid к тексту и добавляем чёрную обводку текста с помощью этого кода:
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()
Получившийся текст:

Применение других эффектов WordArt
Использование Microsoft PowerPoint
Из интерфейса программы вы можете применять эти эффекты к тексту, блоку текста, фигуре или аналогичному элементу:

Например, эффекты Тень, Отражение и Светящееся могут быть применены к тексту; эффекты 3D Формат и 3D Вращение — к блоку текста; эффект Мягкие края — к фигуре (это всё равно воздействует, если эффект 3D Формат не установлен).
Применение теневых эффектов
Следующий код на Python применяет теневой эффект только к тексту:
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()
API Aspose.Slides поддерживает три типа теней: OuterShadow, InnerShadow и PresetShadow.
С помощью PresetShadow можно применить тень к тексту, используя предустановленные значения.
Использование Microsoft PowerPoint
В PowerPoint доступен один тип тени. Пример:

Использование Aspose.Slides
Aspose.Slides действительно позволяет одновременно применять два типа теней: InnerShadow и PresetShadow.
Примечания:
- Когда одновременно используются OuterShadow и PresetShadow, применяется только эффект OuterShadow.
- Если одновременно используются OuterShadow и InnerShadow, итоговый эффект зависит от версии PowerPoint. Например, в PowerPoint 2013 эффект удваивается, а в PowerPoint 2007 применяется эффект OuterShadow.
Применить отражение к тексту
Мы добавляем отражение к тексту с помощью этого примера кода на Python через 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()
Применить светящийся эффект к тексту
Мы применяем светящийся эффект к тексту, чтобы он светился или выделялся, используя следующий код:
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()
Результат операции:

Note
Вы можете менять параметры тени, отражения и свечения. Свойства эффектов задаются отдельно для каждой части текста.Использование трансформаций в WordArt
Используйте TextFrameFormat.setTransform для трансформации всего блока текста:
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()
Результат:

Note
Как Microsoft PowerPoint, так и Aspose.Slides for Python via Java предоставляют определённое количество предопределённых типов трансформаций.Использование PowerPoint
Для доступа к предопределённым типам трансформаций перейдите к: Format -> TextEffect -> Transform
Использование Aspose.Slides
Чтобы выбрать тип трансформации, используйте перечисление TextShapeType.
Применить 3D‑эффекты к тексту и фигуркам
Мы применяем 3D‑эффект к текстовой фигуре с помощью этого примера кода:
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()
Получившийся текст и его фигура:

Мы применяем 3D‑эффект к тексту с помощью этого кода на 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()
Результат операции:

Note
Применение 3D‑эффектов к тексту или его фигурам и взаимодействие между эффектами регулируются определёнными правилами.
Рассмотрим сцену для текста и фигуры, содержащей этот текст. 3D‑эффект содержит 3D‑представление объекта и сцену, в которой объект размещён.
- Когда сцена задаётся и для фигуры, и для текста, приоритет отдаётся сцене фигуры — сцена текста игнорируется.
- Когда у фигуры нет собственной сцены, но есть 3D‑представление, используется сцена текста.
- В остальных случаях, когда у фигуры изначально нет 3D‑эффекта, фигура остаётся плоской, и 3D‑эффект применяется только к тексту.
Эти правила относятся к методам ThreeDFormat.getLightRig и ThreeDFormat.getCamera.
Применить внешние теневые эффекты к тексту
Aspose.Slides for Python via Java предоставляет классы OuterShadow и InnerShadow, позволяющие применять теневые эффекты к тексту в TextFrame. Выполните следующие шаги:
- Создайте экземпляр класса [Presentation].
- Получите ссылку на слайд, используя его индекс.
- Добавьте прямоугольную форму на слайд.
- Получите доступ к текстовой рамке, связанной с формой.
- Отключите заливку формы.
- Включите внешний теневой эффект.
- Задайте радиус размытия тени.
- Задайте направление тени.
- Задайте расстояние тени.
- Выровняйте тень по верхнему левому углу.
- Установите цвет тени черным.
- Сохраните презентацию в файл [PPTX].
import jpade
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import FillType, Presentation, PresetColor, RectangleAlignment, SaveFormat, ShapeType
presentation = Presentation()
try:
# Получить ссылку на слайд
slide = presentation.getSlides().get_Item(0)
# Добавить AutoShape типа Rectangle
auto_shape = slide.getShapes().addAutoShape(ShapeType.Rectangle, 150, 75, 150, 50)
# Добавить TextFrame к прямоугольнику
auto_shape.addTextFrame("Aspose TextBox")
# Отключить заливку фигуры, если нужно получить тень текста
auto_shape.getFillFormat().setFillType(FillType.NoFill)
# Добавить внешнюю тень и установить все необходимые параметры
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)
# Сохранить презентацию на диск
presentation.save("pres_out.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
Применить внутренний теневой эффект к фигурам
Выполните следующие шаги:
- Создайте экземпляр класса [Presentation].
- Получите ссылку на слайд.
- Добавьте прямоугольную форму.
- Включите внутренний теневой эффект.
- Задайте все необходимые параметры.
- Установите тип цвета тени, используя цвет темы.
- Задайте цвет темы.
- Сохраните презентацию в файл [PPTX].
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import ColorType, FillType, Presentation, SaveFormat, SchemeColor, ShapeType
presentation = Presentation()
try:
# Получить ссылку на слайд
slide = presentation.getSlides().get_Item(0)
# Добавить AutoShape типа Rectangle
auto_shape = slide.getShapes().addAutoShape(ShapeType.Rectangle, 150, 75, 400, 300)
auto_shape.getFillFormat().setFillType(FillType.NoFill)
# Добавить TextFrame к прямоугольнику
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)
# Включить InnerShadowEffect
effect_format = portion_format.getEffectFormat()
effect_format.enableInnerShadowEffect()
# Установить все необходимые параметры
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))
# Установить ColorType как Scheme
inner_shadow.getShadowColor().setColorType(ColorType.Scheme)
# Установить Scheme Color
inner_shadow.getShadowColor().setSchemeColor(SchemeColor.Accent1)
# Сохранить презентацию
presentation.save("WordArt_out.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
Часто задаваемые вопросы
Можно ли использовать эффекты WordArt с разными шрифтами или сценариями (например, арабским, китайским)?
Да, Aspose.Slides поддерживает Unicode и работает со всеми основными шрифтами и сценариями. Эффекты WordArt, такие как тень, заливка и обводка, могут быть применены независимо от языка, хотя доступность шрифтов и их рендеринг могут зависеть от системных шрифтов.
Можно ли применять эффекты WordArt к элементам мастера слайдов?
Да, вы можете применять эффекты WordArt к фигурам на мастерах слайдов, включая заполнители заголовков, нижние колонтитулы или фоновой текст. Изменения, внесённые в макет мастера, отразятся на всех связанных слайдах.
Влияют ли эффекты WordArt на размер файла презентации?
Незначительно. Эффекты WordArt, такие как тени, свечения и градиентные заливки, могут слегка увеличить размер файла за счёт добавления метаданных форматирования, но разница обычно несущественна.
Можно ли предварительно просмотреть результат эффектов WordArt без сохранения презентации?
Да, вы можете отрисовывать слайды с WordArt в изображения (например, PNG, JPEG) с помощью Shape.getImage или Slide.getImage. Это позволяет предварительно увидеть результат в памяти или на экране до сохранения или экспорта всей презентации.