Создание и применение эффектов WordArt в C++
О WordArt?
WordArt или Word Art — это возможность, позволяющая применять эффекты к тексту, чтобы он выделялся. С помощью WordArt, например, можно обвести текст контуром или заполнить его цветом (или градиентом), добавить 3D‑эффекты и т.д. Также можно наклонять, изгибать и растягивать форму текста.
WordArt в Microsoft PowerPoint
Чтобы использовать WordArt в Microsoft PowerPoint, необходимо выбрать один из предопределённых шаблонов WordArt. Шаблон WordArt — это набор эффектов, который применяется к тексту или его форме.
WordArt в Aspose.Slides
В Aspose.Slides для C++ 20.10 мы внедрили поддержку WordArt и в последующих версиях Aspose.Slides для C++ улучшили эту функцию.
С помощью Aspose.Slides для C++ вы можете легко создать собственный шаблон WordArt (один эффект или комбинацию эффектов) на C++ и применить его к текстам.
Создание простого шаблона WordArt и применение его к тексту
Использование Aspose.Slides
Сначала мы создаём простой текст с помощью следующего кода C++:
auto pres = System::MakeObject<Presentation>();
auto slide = pres->get_Slides()->idx_get(0);
auto autoShape = slide->get_Shapes()->AddAutoShape(ShapeType::Rectangle, 200.0f, 200.0f, 400.0f, 200.0f);
auto textFrame = autoShape->get_TextFrame();
auto portion = textFrame->get_Paragraphs()->idx_get(0)->get_Portions()->idx_get(0);
portion->set_Text(u"Aspose.Slides");
Затем мы устанавливаем высоту шрифта текста на большее значение, чтобы эффект был более заметен, с помощью следующего кода:
auto fontData = System::MakeObject<FontData>(u"Arial Black");
portion->get_PortionFormat()->set_LatinFont(fontData);
portion->get_PortionFormat()->set_FontHeight(36.0f);
Использование Microsoft PowerPoint
Откройте меню эффектов WordArt в Microsoft PowerPoint:

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

Использование Aspose.Slides
Здесь мы применяем цвет узора SmallGrid к тексту и добавляем чёрную границу шириной 1 с помощью следующего кода:
auto fillFormat = portion->get_PortionFormat()->get_FillFormat();
fillFormat->set_FillType(FillType::Pattern);
fillFormat->get_PatternFormat()->get_ForeColor()->set_Color(Color::get_DarkOrange());
fillFormat->get_PatternFormat()->get_BackColor()->set_Color(Color::get_White());
fillFormat->get_PatternFormat()->set_PatternStyle(PatternStyle::SmallGrid);
auto lineFillFormat = portion->get_PortionFormat()->get_LineFormat()->get_FillFormat();
lineFillFormat->set_FillType(FillType::Solid);
lineFillFormat->get_SolidFillColor()->set_Color(Color::get_Black());
Получившийся текст:

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

Например, к тексту можно применить эффекты Тень, Отражение и Сияние; к текстовому блоку — эффекты 3D‑формат и 3D‑поворот; к объекту Shape можно применить свойство Мягкие края (оно остаётся активным, даже если свойство 3D‑формат не задано).
Применение теневых эффектов к тексту
Здесь мы планируем задать свойства, относящиеся только к тексту. Мы применяем теневой эффект к тексту с помощью следующего кода на C++:
auto effectFormat = portion->get_PortionFormat()->get_EffectFormat();
effectFormat->EnableOuterShadowEffect();
auto outerShadowEffect = effectFormat->get_OuterShadowEffect();
outerShadowEffect->get_ShadowColor()->set_Color(Color::get_Black());
outerShadowEffect->set_ScaleHorizontal(100);
outerShadowEffect->set_ScaleVertical(65);
outerShadowEffect->set_BlurRadius(4.73);
outerShadowEffect->set_Direction(230.0f);
outerShadowEffect->set_Distance(2);
outerShadowEffect->set_SkewHorizontal(30);
outerShadowEffect->set_SkewVertical(0);
outerShadowEffect->get_ShadowColor()->get_ColorTransform()->Add(ColorTransformOperation::SetAlpha, 0.32f);
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.
Применение отражающих эффектов
Мы добавляем отражение к тексту с помощью следующего примера кода на C++:
auto effectFormat = portion->get_PortionFormat()->get_EffectFormat();
effectFormat->EnableReflectionEffect();
auto reflectionEffect = effectFormat->get_ReflectionEffect();
reflectionEffect->set_BlurRadius(0.5);
reflectionEffect->set_Distance(4.72);
reflectionEffect->set_StartPosAlpha(0.f);
reflectionEffect->set_EndPosAlpha(60.f);
reflectionEffect->set_Direction(90.0f);
reflectionEffect->set_ScaleHorizontal(100);
reflectionEffect->set_ScaleVertical(-100);
reflectionEffect->set_StartReflectionOpacity(60.f);
reflectionEffect->set_EndReflectionOpacity(0.9f);
reflectionEffect->set_RectangleAlign(RectangleAlignment::BottomLeft);
Применение сияния
Мы применяем эффект сияния к тексту, чтобы он блестел или выделялся, используя следующий код:
auto effectFormat = portion->get_PortionFormat()->get_EffectFormat();
effectFormat->EnableGlowEffect();
auto glowEffect = effectFormat->get_GlowEffect();
glowEffect->get_Color()->set_R(255);
glowEffect->get_Color()->get_ColorTransform()->Add(ColorTransformOperation::SetAlpha, 0.54f);
glowEffect->set_Radius(7);
Результат операции:

Использование трансформаций в WordArt
Мы используем метод set_Transform (применяемый ко всему блоку текста) с помощью следующего кода:
textFrame->get_TextFrameFormat()->set_Transform(TextShapeType::ArchUpPour);
Результат:

Использование PowerPoint
Чтобы открыть предопределённые типы трансформаций, перейдите: Format → TextEffect → Transform
Использование Aspose.Slides
Чтобы выбрать тип трансформации, используйте перечисление TextShapeType.
Применение 3D‑эффектов к тексту и фигурам
Мы задаём 3D‑эффект для текстовой фигуры с помощью следующего примера кода:
auto threeDFormat = autoShape->get_ThreeDFormat();
threeDFormat->get_BevelBottom()->set_BevelType(BevelPresetType::Circle);
threeDFormat->get_BevelBottom()->set_Height(10.5);
threeDFormat->get_BevelBottom()->set_Width(10.5);
threeDFormat->get_BevelTop()->set_BevelType(BevelPresetType::Circle);
threeDFormat->get_BevelTop()->set_Height(12.5);
threeDFormat->get_BevelTop()->set_Width(11);
threeDFormat->get_ExtrusionColor()->set_Color(Color::get_Orange());
threeDFormat->set_ExtrusionHeight(6);
threeDFormat->get_ContourColor()->set_Color(Color::get_DarkRed());
threeDFormat->set_ContourWidth(1.5);
threeDFormat->set_Depth(3);
threeDFormat->set_Material(MaterialPresetType::Plastic);
threeDFormat->get_LightRig()->set_Direction(LightingDirection::Top);
threeDFormat->get_LightRig()->set_LightType(LightRigPresetType::Balanced);
threeDFormat->get_LightRig()->SetRotation(0.0f, 0.0f, 40.0f);
threeDFormat->get_Camera()->set_CameraType(CameraPresetType::PerspectiveContrastingRightFacing);
Получившийся текст и его форма:

Мы применяем 3D‑эффект к тексту с помощью следующего кода на C++:
auto threeDFormat = textFrame->get_TextFrameFormat()->get_ThreeDFormat();
threeDFormat->get_BevelBottom()->set_BevelType(BevelPresetType::Circle);
threeDFormat->get_BevelBottom()->set_Height(3.5);
threeDFormat->get_BevelBottom()->set_Width(3.5);
threeDFormat->get_BevelTop()->set_BevelType(BevelPresetType::Circle);
threeDFormat->get_BevelTop()->set_Height(4);
threeDFormat->get_BevelTop()->set_Width(4);
threeDFormat->get_ExtrusionColor()->set_Color(Color::get_Orange());
threeDFormat->set_ExtrusionHeight(6);
threeDFormat->get_ContourColor()->set_Color(Color::get_DarkRed());
threeDFormat->set_ContourWidth(1.5);
threeDFormat->set_Depth(3);
threeDFormat->set_Material(MaterialPresetType::Plastic);
threeDFormat->get_LightRig()->set_Direction(LightingDirection::Top);
threeDFormat->get_LightRig()->set_LightType(LightRigPresetType::Balanced);
threeDFormat->get_LightRig()->SetRotation(0.0f, 0.0f, 40.0f);
threeDFormat->get_Camera()->set_CameraType(CameraPresetType::PerspectiveContrastingRightFacing);
Результат операции:

Применение 3D‑эффектов к тексту или его фигурам и взаимодействие между эффектами основаны на определённых правилах.
Рассмотрим сцену для текста и фигуры, содержащей этот текст. 3D‑эффект включает представление 3D‑объекта и сцену, в которой объект размещён.
- Когда сцена задаётся как для фигуры, так и для текста, приоритет имеет сцена фигуры — сцена текста игнорируется.
- Когда у фигуры нет собственной сцены, но есть 3D‑представление, используется сцена текста.
- В остальных случаях — когда у фигуры изначально нет 3D‑эффекта — фигура остаётся плоской, и 3D‑эффект применяется только к тексту.
Эти описания связаны с методами ThreeDFormat.getLightRig() и ThreeDFormat.getCamera().
Применение внешних теней к фигурам
Aspose.Slides для C++ предоставляет классы IOuterShadow и IInnerShadow, позволяющие применять теневые эффекты к тексту, содержащемуся в TextFrame. Выполните следующие шаги:
- Создайте экземпляр класса Presentation.
- Получите ссылку на слайд, используя его индекс.
- Добавьте к слайду AutoShape типа Rectangle.
- Получите доступ к TextFrame, связанному с AutoShape.
- Установите свойство FillType AutoShape в значение NoFill.
- Создайте экземпляр класса OuterShadow.
- Установите BlurRadius тени.
- Установите Direction тени.
- Установите Distance тени.
- Установите RectanglelAlign в TopLeft.
- Установите PresetColor тени в Black.
- Сохраните презентацию в файл PPTX.
Этот пример кода на C++ — реализация вышеописанных шагов — демонстрирует, как применить внешний теневой эффект к тексту:
auto pres = System::MakeObject<Presentation>();
// Получить ссылку на слайд
auto sld = pres->get_Slides()->idx_get(0);
// Добавить AutoShape типа Rectangle
auto ashp = sld->get_Shapes()->AddAutoShape(ShapeType::Rectangle, 150.0f, 75.0f, 150.0f, 50.0f);
// Добавить TextFrame к прямоугольнику
ashp->AddTextFrame(u"Aspose TextBox");
// Отключить заливку фигуры, если требуется получить тень текста
ashp->get_FillFormat()->set_FillType(FillType::NoFill);
// Добавить внешнюю тень и установить все необходимые параметры
ashp->get_EffectFormat()->EnableOuterShadowEffect();
auto shadow = ashp->get_EffectFormat()->get_OuterShadowEffect();
shadow->set_BlurRadius(4.0);
shadow->set_Direction(45.0f);
shadow->set_Distance(3);
shadow->set_RectangleAlign(RectangleAlignment::TopLeft);
shadow->get_ShadowColor()->set_PresetColor(PresetColor::Black);
// Сохранить презентацию на диск
pres->Save(u"pres_out.pptx", SaveFormat::Pptx);
Применение внутренних теней к фигурам
Выполните следующие шаги:
- Создайте экземпляр класса Presentation.
- Получите ссылку на слайд.
- Добавьте AutoShape типа Rectangle.
- Включите InnerShadowEffect.
- Установите все необходимые параметры.
- Установите ColorType в значение Scheme.
- Установите Scheme Color.
- Сохраните презентацию в файл PPTX.
Этот пример кода (основанный на вышеуказанных шагах) показывает, как добавить соединитель между двумя фигурами на C++:
auto presentation = System::MakeObject<Presentation>();
// Получить ссылку на слайд
auto slide = presentation->get_Slides()->idx_get(0);
// Add an AutoShape of Rectangle type
// Добавить AutoShape типа Rectangle
auto ashp = slide->get_Shapes()->AddAutoShape(ShapeType::Rectangle, 150.0f, 75.0f, 400.0f, 300.0f);
ashp->get_FillFormat()->set_FillType(FillType::NoFill);
// Add TextFrame to the Rectangle
// Добавить TextFrame к прямоугольнику
ashp->AddTextFrame(u"Aspose TextBox");
auto port = ashp->get_TextFrame()->get_Paragraphs()->idx_get(0)->get_Portions()->idx_get(0);
auto pf = port->get_PortionFormat();
pf->set_FontHeight(50.0f);
// Enable InnerShadowEffect
// Включить InnerShadowEffect
auto ef = pf->get_EffectFormat();
ef->EnableInnerShadowEffect();
// Set all necessary parameters
// Установить все необходимые параметры
auto shadow = ef->get_InnerShadowEffect();
shadow->set_BlurRadius(8.0);
shadow->set_Direction(90.0F);
shadow->set_Distance(6.0);
shadow->get_ShadowColor()->set_B(189);
// Set ColorType as Scheme
// Установить ColorType как Scheme
shadow->get_ShadowColor()->set_ColorType(ColorType::Scheme);
// Set Scheme Color
// Установить Scheme Color
shadow->get_ShadowColor()->set_SchemeColor(SchemeColor::Accent1);
// Save Presentation
// Сохранить презентацию
presentation->Save(u"WordArt_out.pptx", SaveFormat::Pptx);
FAQ
Можно ли использовать эффекты WordArt с разными шрифтами или скриптами (например, арабский, китайский)?
Да, Aspose.Slides поддерживает Unicode и работает со всеми основными шрифтами и скриптами. Эффекты WordArt, такие как тень, заливка и контур, можно применять независимо от языка, хотя доступность шрифтов и их рендеринг могут зависеть от системных шрифтов.
Можно ли применять эффекты WordArt к элементам шаблона слайда?
Да, вы можете применять эффекты WordArt к фигурам на слайдах‑шаблонах, включая заполнители заголовков, колонтитулы или фоновые тексты. Изменения, внесённые в шаблон, отражаются во всех связанных слайдах.
Влияют ли эффекты WordArt на размер файла презентации?
Слегка. Эффекты WordArt, такие как тени, сияние и градиентные заливки, могут незначительно увеличить размер файла из‑за добавления метаданных форматирования, но разница обычно пренебрежимо мала.
Можно ли просмотреть результат эффектов WordArt без сохранения презентации?
Да, вы можете отрисовать слайды с WordArt в изображения (например, PNG, JPEG), используя метод GetImage из интерфейсов IShape или ISlide. Это позволяет предварительно просмотреть результат в памяти или на экране до сохранения или экспорта полной презентации.