在 Java 中创建和应用 WordArt 效果
关于 WordArt?
WordArt(或 Word Art)是一项功能,可让您对文本应用效果,使其突出显示。例如,使用 WordArt,您可以为文本描边或填充颜色(或渐变),添加 3D 效果等。您还可以倾斜、弯曲和拉伸文本的形状。
Microsoft PowerPoint 中的 WordArt
要在 Microsoft PowerPoint 中使用 WordArt,您必须选择预定义的 WordArt 模板之一。WordArt 模板是一组将应用于文本或其形状的效果。
Aspose.Slides 中的 WordArt
在 Aspose.Slides for Java 20.10 中,我们实现了对 WordArt 的支持,并在后续的 Aspose.Slides for Java 版本中对该功能进行了改进。
使用 Aspose.Slides for Java,您可以轻松在 Java 中创建自己的 WordArt 模板(单个效果或多个效果的组合),并将其应用于文本。
创建一个简单的 WordArt 模板并将其应用于文本
使用 Aspose.Slides
首先,我们使用以下 Java 代码创建一个简单的文本:
Presentation pres = new Presentation();
try {
ISlide slide = pres.getSlides().get_Item(0);
IAutoShape autoShape = slide.getShapes().addAutoShape(ShapeType.Rectangle, 200, 200, 400, 200);
ITextFrame textFrame = autoShape.getTextFrame();
Portion portion = (Portion)textFrame.getParagraphs().get_Item(0).getPortions().get_Item(0);
portion.setText("Aspose.Slides");
} finally {
if (pres != null) pres.dispose();
}
现在,我们通过以下代码将文本的字体高度设置为更大的值,以使效果更明显:
FontData fontData = new FontData("Arial Black");
portion.getPortionFormat().setLatinFont(fontData);
portion.getPortionFormat().setFontHeight(36);
使用 Microsoft PowerPoint
在 Microsoft PowerPoint 中打开 WordArt 效果菜单:

在右侧菜单中,您可以选择预定义的 WordArt 效果。左侧菜单则可为新的 WordArt 指定设置。
以下是部分可用的参数或选项:

使用 Aspose.Slides
在这里,我们将 SmallGrid 图案颜色应用于文本,并使用以下代码添加 1 宽度的黑色文本边框:
portion.getPortionFormat().getFillFormat().setFillType(FillType.Pattern);
portion.getPortionFormat().getFillFormat().getPatternFormat().getForeColor().setColor(Color.ORANGE);
portion.getPortionFormat().getFillFormat().getPatternFormat().getBackColor().setColor(Color.WHITE);
portion.getPortionFormat().getFillFormat().getPatternFormat().setPatternStyle(PatternStyle.SmallGrid);
portion.getPortionFormat().getLineFormat().getFillFormat().setFillType(FillType.Solid);
portion.getPortionFormat().getLineFormat().getFillFormat().getSolidFillColor().setColor(Color.BLACK);
生成的文本:

应用其他 WordArt 效果
使用 Microsoft PowerPoint
在程序界面中,您可以将这些效果应用于文本、文本块、形状或类似元素:

例如,阴影、反射和发光效果可应用于文本;3D 格式和 3D 旋转效果可应用于文本块;柔和边缘属性可应用于形状对象(即使未设置 3D 格式属性,它仍会生效)。
应用阴影效果
此处我们仅针对文本设置相关属性。我们使用以下 Java 代码将阴影效果应用于文本:
portion.getPortionFormat().getEffectFormat().enableOuterShadowEffect();
portion.getPortionFormat().getEffectFormat().getOuterShadowEffect().getShadowColor().setColor(Color.BLACK);
portion.getPortionFormat().getEffectFormat().getOuterShadowEffect().setScaleHorizontal(100);
portion.getPortionFormat().getEffectFormat().getOuterShadowEffect().setScaleVertical(65);
portion.getPortionFormat().getEffectFormat().getOuterShadowEffect().setBlurRadius(4.73);
portion.getPortionFormat().getEffectFormat().getOuterShadowEffect().setDirection(230);
portion.getPortionFormat().getEffectFormat().getOuterShadowEffect().setDistance(2);
portion.getPortionFormat().getEffectFormat().getOuterShadowEffect().setSkewHorizontal(30);
portion.getPortionFormat().getEffectFormat().getOuterShadowEffect().setSkewVertical(0);
portion.getPortionFormat().getEffectFormat().getOuterShadowEffect().getShadowColor().getColorTransform().add(ColorTransformOperation.SetAlpha, 0.32f);
Aspose.Slides API 支持三种阴影类型:OuterShadow、InnerShadow 和 PresetShadow。
使用 PresetShadow,您可以为文本应用预设值的阴影。
使用 Microsoft PowerPoint
在 PowerPoint 中,您只能使用一种阴影类型。以下是示例:

使用 Aspose.Slides
Aspose.Slides 实际上允许一次应用两种阴影:InnerShadow 和 PresetShadow。
注意:
- 当同时使用 OuterShadow 和 PresetShadow 时,仅会应用 OuterShadow 效果。
- 如果同时使用 OuterShadow 和 InnerShadow,最终或实际的效果取决于 PowerPoint 版本。例如,在 PowerPoint 2013 中,效果会叠加两次;而在 PowerPoint 2007 中,则仅应用 OuterShadow 效果。
对文本应用显示效果
我们通过以下 Java 示例代码为文本添加显示效果:
portion.getPortionFormat().getEffectFormat().enableReflectionEffect();
portion.getPortionFormat().getEffectFormat().getReflectionEffect().setBlurRadius(0.5);
portion.getPortionFormat().getEffectFormat().getReflectionEffect().setDistance(4.72);
portion.getPortionFormat().getEffectFormat().getReflectionEffect().setStartPosAlpha(0f);
portion.getPortionFormat().getEffectFormat().getReflectionEffect().setEndPosAlpha(60f);
portion.getPortionFormat().getEffectFormat().getReflectionEffect().setDirection(90);
portion.getPortionFormat().getEffectFormat().getReflectionEffect().setScaleHorizontal(100);
portion.getPortionFormat().getEffectFormat().getReflectionEffect().setScaleVertical(-100);
portion.getPortionFormat().getEffectFormat().getReflectionEffect().setStartReflectionOpacity(60f);
portion.getPortionFormat().getEffectFormat().getReflectionEffect().setEndReflectionOpacity(0.9f);
portion.getPortionFormat().getEffectFormat().getReflectionEffect().setRectangleAlign(RectangleAlignment.BottomLeft);
对文本应用发光效果
我们使用以下代码为文本应用发光效果,使其发光或突出:
portion.getPortionFormat().getEffectFormat().enableGlowEffect();
portion.getPortionFormat().getEffectFormat().getGlowEffect().getColor().setR((byte)255);
portion.getPortionFormat().getEffectFormat().getGlowEffect().getColor().getColorTransform().add(ColorTransformOperation.SetAlpha, 0.54f);
portion.getPortionFormat().getEffectFormat().getGlowEffect().setRadius(7);
操作的结果:

在 WordArt 中使用变换
我们通过以下代码使用 Transform 属性(适用于整个文本块):
textFrame.getTextFrameFormat().setTransform(TextShapeType.ArchUpPour);
结果:

使用 PowerPoint
要访问预定义的变换类型,请依次点击:格式 -> 文字效果 -> 变换
使用 Aspose.Slides
要选择变换类型,请使用 TextShapeType 枚举。
对文本和形状应用 3D 效果
我们使用以下示例代码为文本形状设置 3D 效果:
autoShape.getThreeDFormat().getBevelBottom().setBevelType(BevelPresetType.Circle);
autoShape.getThreeDFormat().getBevelBottom().setHeight(10.5);
autoShape.getThreeDFormat().getBevelBottom().setWidth(10.5);
autoShape.getThreeDFormat().getBevelTop().setBevelType(BevelPresetType.Circle);
autoShape.getThreeDFormat().getBevelTop().setHeight(12.5);
autoShape.getThreeDFormat().getBevelTop().setWidth(11);
autoShape.getThreeDFormat().getExtrusionColor().setColor(Color.ORANGE);
autoShape.getThreeDFormat().setExtrusionHeight(6);
autoShape.getThreeDFormat().getContourColor().setColor(Color.RED);
autoShape.getThreeDFormat().setContourWidth(1.5);
autoShape.getThreeDFormat().setDepth(3);
autoShape.getThreeDFormat().setMaterial(MaterialPresetType.Plastic);
autoShape.getThreeDFormat().getLightRig().setDirection(LightingDirection.Top);
autoShape.getThreeDFormat().getLightRig().setLightType(LightRigPresetType.Balanced);
autoShape.getThreeDFormat().getLightRig().setRotation(0, 0, 40);
autoShape.getThreeDFormat().getCamera().setCameraType(CameraPresetType.PerspectiveContrastingRightFacing);
生成的文本及其形状:

我们使用以下 Java 代码对文本应用 3D 效果:
textFrame.getTextFrameFormat().getThreeDFormat().getBevelBottom().setBevelType(BevelPresetType.Circle);
textFrame.getTextFrameFormat().getThreeDFormat().getBevelBottom().setHeight(3.5);
textFrame.getTextFrameFormat().getThreeDFormat().getBevelBottom().setWidth(3.5);
textFrame.getTextFrameFormat().getThreeDFormat().getBevelTop().setBevelType(BevelPresetType.Circle);
textFrame.getTextFrameFormat().getThreeDFormat().getBevelTop().setHeight(4);
textFrame.getTextFrameFormat().getThreeDFormat().getBevelTop().setWidth(4);
textFrame.getTextFrameFormat().getThreeDFormat().getExtrusionColor().setColor(Color.ORANGE);
textFrame.getTextFrameFormat().getThreeDFormat().setExtrusionHeight(6);
textFrame.getTextFrameFormat().getThreeDFormat().getContourColor().setColor(Color.RED);
textFrame.getTextFrameFormat().getThreeDFormat().setContourWidth(1.5);
textFrame.getTextFrameFormat().getThreeDFormat().setDepth(3);
textFrame.getTextFrameFormat().getThreeDFormat().setMaterial(MaterialPresetType.Plastic);
textFrame.getTextFrameFormat().getThreeDFormat().getLightRig().setDirection(LightingDirection.Top);
textFrame.getTextFrameFormat().getThreeDFormat().getLightRig().setLightType(LightRigPresetType.Balanced);
textFrame.getTextFrameFormat().getThreeDFormat().getLightRig().setRotation(0, 0, 40);
textFrame.getTextFrameFormat().getThreeDFormat().getCamera().setCameraType(CameraPresetType.PerspectiveContrastingRightFacing);
操作的结果:

对文本或其形状应用 3D 效果以及效果之间的交互遵循特定规则。
考虑文本及其所在形状的场景。3D 效果包含 3D 对象的表示以及对象所在的场景。
- 当形状和文本都设置了场景时,形状的场景具有更高优先级——文本的场景被忽略。
- 当形状没有自己的场景但具有 3D 表示时,使用文本的场景。
- 否则——即形状本身没有 3D 效果时——形状保持平面,仅对文本应用 3D 效果。
这些说明与 ThreeDFormat.getLightRig() 和 ThreeDFormat.getCamera() 方法相关。
对文本应用外部阴影效果
Aspose.Slides for Java 提供了 IOuterShadow 和 IInnerShadow 类,允许您对由 TextFrame 承载的文本应用阴影效果。请按照以下步骤操作:
- 创建一个 Presentation 类的实例。
- 使用索引获取幻灯片的引用。
- 向幻灯片添加一个矩形类型的 AutoShape。
- 访问与 AutoShape 关联的 TextFrame。
- 将 AutoShape 的 FillType 设置为 NoFill。
- 实例化 OuterShadow 类
- 设置阴影的 BlurRadius。
- 设置阴影的 Direction。
- 设置阴影的 Distance。
- 将 RectanglelAlign 设置为 TopLeft。
- 将阴影的 PresetColor 设置为 Black。
- 将演示文稿写入为 PPTX 文件。
下面的 Java 示例代码实现了上述步骤,演示了如何对文本应用外部阴影效果:
Presentation pres = new Presentation();
try {
// 获取幻灯片的引用
ISlide sld = pres.getSlides().get_Item(0);
// 添加一个矩形类型的 AutoShape
IAutoShape ashp = sld.getShapes().addAutoShape(ShapeType.Rectangle, 150, 75, 150, 50);
// 向矩形添加 TextFrame
ashp.addTextFrame("Aspose TextBox");
// 禁用形状填充,以便获取文本的阴影
ashp.getFillFormat().setFillType(FillType.NoFill);
// 添加外部阴影并设置所有必要参数
ashp.getEffectFormat().enableOuterShadowEffect();
IOuterShadow shadow = ashp.getEffectFormat().getOuterShadowEffect();
shadow.setBlurRadius(4.0);
shadow.setDirection(45);
shadow.setDistance(3);
shadow.setRectangleAlign(RectangleAlignment.TopLeft);
shadow.getShadowColor().setPresetColor(PresetColor.Black);
// 将演示文稿写入磁盘
pres.save("pres_out.pptx", SaveFormat.Pptx);
} finally {
if (pres != null) pres.dispose();
}
对形状应用内部阴影效果
请按照以下步骤操作:
- 创建一个 Presentation 类的实例。
- 获取幻灯片的引用。
- 添加一个矩形类型的 AutoShape。
- 启用 InnerShadowEffect。
- 设置所有必要的参数。
- 将 ColorType 设置为 Scheme。
- 设置 Scheme Color。
- 将演示文稿写入为 PPTX 文件。
下面的示例代码(基于上述步骤)展示了如何在 Java 中为两个形状添加连接线:
Presentation pres = new Presentation();
try {
// 获取幻灯片的引用
ISlide slide = pres.getSlides().get_Item(0);
// 添加一个矩形类型的 AutoShape
IAutoShape ashp = slide.getShapes().addAutoShape(ShapeType.Rectangle, 150, 75, 400, 300);
ashp.getFillFormat().setFillType(FillType.NoFill);
// 向矩形添加 TextFrame
ashp.addTextFrame("Aspose TextBox");
IPortion port = ashp.getTextFrame().getParagraphs().get_Item(0).getPortions().get_Item(0);
IPortionFormat pf = port.getPortionFormat();
pf.setFontHeight(50);
// 启用内部阴影效果
IEffectFormat ef = pf.getEffectFormat();
ef.enableInnerShadowEffect();
// 设置所有必要的参数
ef.getInnerShadowEffect().setBlurRadius(8.0);
ef.getInnerShadowEffect().setDirection(90.0F);
ef.getInnerShadowEffect().setDistance(6.0);
ef.getInnerShadowEffect().getShadowColor().setB((byte)189);
// 将 ColorType 设置为 Scheme
ef.getInnerShadowEffect().getShadowColor().setColorType(ColorType.Scheme);
// 设置 Scheme 颜色
ef.getInnerShadowEffect().getShadowColor().setSchemeColor(SchemeColor.Accent1);
// 保存演示文稿
pres.save("WordArt_out.pptx", SaveFormat.Pptx);
} finally {
if (pres != null) pres.dispose();
}
常见问题
我可以将 WordArt 效果应用于不同的字体或文字(例如阿拉伯文、中文)吗?
是的,Aspose.Slides 支持 Unicode,能够兼容所有主流字体和文字。无论语言如何,都可以对文本应用阴影、填充、描边等 WordArt 效果,但字体的可用性和渲染效果取决于系统字体。
我可以将 WordArt 效果应用于母版幻灯片元素吗?
是的,您可以对母版幻灯片中的形状(包括标题占位符、页脚或背景文字)应用 WordArt 效果。对母版布局的更改会在所有使用该母版的幻灯片中体现。
WordArt 效果会影响演示文稿文件大小吗?
会有轻微影响。阴影、发光和渐变填充等 WordArt 效果会因添加的格式元数据略微增大文件大小,但差异通常可以忽略不计。
我可以在不保存演示文稿的情况下预览 WordArt 效果的结果吗?
可以,您可以使用 IShape 或 ISlide 接口的 getImage 方法,将包含 WordArt 的幻灯片渲染为图像(如 PNG、JPEG)。这样即可在内存或屏幕上预览效果,再决定是否保存或导出完整的演示文稿。