在 Python 中格式化 PowerPoint 形状

介绍

在 PowerPoint 中,您可以向幻灯片添加形状。由于形状由线条组成,您可以通过修改或应用效果到其轮廓来格式化它们。此外,您还可以通过指定控制内部填充方式的设置来格式化形状。

PowerPoint 中的格式形状

Aspose.Slides for Python 提供了类和属性,使您能够使用 PowerPoint 中相同的选项对形状进行格式化。

格式线条

使用 Aspose.Slides,您可以为形状指定自定义线条样式。以下步骤概述了此过程:

  1. 创建 Presentation 类的实例。
  2. 通过索引获取对幻灯片的引用。
  3. 向幻灯片添加一个 AutoShape。
  4. 设置形状的 line style。
  5. 设置线宽。
  6. 设置形状的 dash style。
  7. 设置形状的线条颜色。
  8. 将修改后的演示文稿保存为 PPTX 文件。

以下 Python 代码演示了如何格式化矩形 AutoShape:

import aspose.slides as slides
import aspose.pydrawing as draw

# 实例化表示演示文稿文件的 Presentation 类。
with slides.Presentation() as presentation:

    # 获取第一张幻灯片。
    slide = presentation.slides[0]

    # 添加一个矩形类型的自动形状。
    shape = slide.shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 50, 150, 150, 75)

    # 移除矩形形状的填充,使仅显示其线条。
    shape.fill_format.fill_type = slides.FillType.NO_FILL

    # 对矩形的线条应用格式化。
    shape.line_format.style = slides.LineStyle.THICK_THIN
    shape.line_format.width = 7
    shape.line_format.dash_style = slides.LineDashStyle.DASH

    # 设置矩形线条的颜色。
    shape.line_format.fill_format.fill_type = slides.FillType.SOLID
    shape.line_format.fill_format.solid_fill_color.color = draw.Color.blue

    # 将 PPTX 文件保存到磁盘。
    presentation.save("formatted_lines.pptx", slides.export.SaveFormat.PPTX)

演示文稿中格式化的线条

对形状线条应用草图效果

草图效果可使形状线条看起来像手绘。使用 Shape.line_format 访问线条设置,使用 LineFormat.sketch_format 访问草图设置,并使用 SketchFormat.sketch_type 从 LineSketchType 枚举中选择一个值。

以下 Python 代码展示了如何应用 LineSketchType.CURVED 效果、读取显式分配的值,并使用 LineSketchType.NONE 删除该效果:

import aspose.slides as slides

with slides.Presentation() as presentation:
    slide = presentation.slides[0]
    shape = slide.shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 50, 50, 200, 100)

    # 访问形状的线条格式及其草图格式。
    sketch_format = shape.line_format.sketch_format

    # 应用草图效果。
    sketch_format.sketch_type = slides.LineSketchType.CURVED

    # 读取直接分配给形状的草图效果。
    explicit_sketch_type = sketch_format.sketch_type
    print(f"Explicit sketch type: {explicit_sketch_type}")

    # 移除草图效果。
    sketch_format.sketch_type = slides.LineSketchType.NONE

SketchFormat.sketch_type 返回的值表示直接分配给形状的设置。如果线条格式可以从主题、母版幻灯片或布局幻灯片继承,请使用 LineFormat.get_effective,访问返回对象的 sketch_format 属性,并读取其 sketch_type 属性。有效值反映了解决继承后实际应用的格式:

import aspose.slides as slides

with slides.Presentation("presentation.pptx") as presentation:
    shape = presentation.slides[0].shapes[0]
    line_format = shape.line_format

    explicit_sketch_type = line_format.sketch_format.sketch_type
    effective_line_format = line_format.get_effective()
    effective_sketch_type = effective_line_format.sketch_format.sketch_type

    print(f"Explicit sketch type: {explicit_sketch_type}")
    print(f"Effective sketch type: {effective_sketch_type}")

格式连接样式

以下是三种连接类型选项:

  • 圆角
  • 斜接
  • 倒角

默认情况下,当 PowerPoint 在角度处(例如形状的角)连接两条线时,它使用 Round 设置。然而,如果您绘制的是尖角形状,可能更喜欢 Miter 选项。

演示文稿中的连接样式

以下 Python 代码演示了如何使用 Miter、Bevel 和 Round 连接类型设置创建三个矩形(如上图所示):

import aspose.slides as slides
import aspose.pydrawing as draw

# 实例化表示演示文稿文件的 Presentation 类。
with slides.Presentation() as presentation:

	# 获取第一张幻灯片。
	slide = presentation.slides[0]

	# 添加三个矩形类型的自动形状。
	shape1 = slide.shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 20, 20, 150, 75)
	shape2 = slide.shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 210, 20, 150, 75)
	shape3 = slide.shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 20, 135, 150, 75)

	# 为每个矩形形状设置填充颜色。
	shape1.fill_format.fill_type = slides.FillType.SOLID
	shape1.fill_format.solid_fill_color.color = draw.Color.black
	shape2.fill_format.fill_type = slides.FillType.SOLID
	shape2.fill_format.solid_fill_color.color = draw.Color.black
	shape3.fill_format.fill_type = slides.FillType.SOLID
	shape3.fill_format.solid_fill_color.color = draw.Color.black

	# 设置线宽。
	shape1.line_format.width = 15
	shape2.line_format.width = 15
	shape3.line_format.width = 15

	# 为每个矩形的线条设置颜色。
	shape1.line_format.fill_format.fill_type = slides.FillType.SOLID
	shape1.line_format.fill_format.solid_fill_color.color = draw.Color.blue
	shape2.line_format.fill_format.fill_type = slides.FillType.SOLID
	shape2.line_format.fill_format.solid_fill_color.color = draw.Color.blue
	shape3.line_format.fill_format.fill_type = slides.FillType.SOLID
	shape3.line_format.fill_format.solid_fill_color.color = draw.Color.blue

	# 设置连接样式。
	shape1.line_format.join_style = slides.LineJoinStyle.MITER
	shape2.line_format.join_style = slides.LineJoinStyle.BEVEL
	shape3.line_format.join_style = slides.LineJoinStyle.ROUND

	# 为每个矩形添加文本。
	shape1.text_frame.text = "Miter Join style"
	shape2.text_frame.text = "Bevel Join style"
	shape3.text_frame.text = "Round Join style"

	# 将 PPTX 文件保存到磁盘。
	presentation.save("join_styles.pptx", slides.export.SaveFormat.PPTX)

渐变填充

在 PowerPoint 中,渐变填充是一种格式选项,允许您对形状应用连续的颜色混合。例如,您可以以一种颜色逐渐淡入另一种颜色的方式应用两种或更多颜色。

以下是使用 Aspose.Slides 对形状应用渐变填充的方法:

  1. 创建 Presentation 类的实例。
  2. 通过索引获取对幻灯片的引用。
  3. 向幻灯片添加一个 AutoShape。
  4. 将形状的 FillType 设置为 GRADIENT。
  5. 使用 GradientFormat 类公开的 gradient_stops 集合的 add 方法,添加您首选的两种颜色并定义其位置。
  6. 将修改后的演示文稿保存为 PPTX 文件。
import aspose.slides as slides

# 实例化表示演示文稿文件的 Presentation 类。
with slides.Presentation() as presentation:

    # 获取第一张幻灯片。
    slide = presentation.slides[0]

    # 添加一个椭圆类型的自动形状。
    shape = slide.shapes.add_auto_shape(slides.ShapeType.ELLIPSE, 50, 50, 150, 75)

    # 对椭圆应用渐变格式化。
    shape.fill_format.fill_type = slides.FillType.GRADIENT
    shape.fill_format.gradient_format.gradient_shape = slides.GradientShape.LINEAR

    # 设置渐变的方向。
    shape.fill_format.gradient_format.gradient_direction = slides.GradientDirection.FROM_CORNER2

    # 添加两个渐变停止点。
    shape.fill_format.gradient_format.gradient_stops.add(1.0, slides.PresetColor.PURPLE)
    shape.fill_format.gradient_format.gradient_stops.add(0, slides.PresetColor.RED)

    # 将 PPTX 文件保存到磁盘。
    presentation.save("gradient_fill.pptx", slides.export.SaveFormat.PPTX)

带有渐变填充的椭圆

如果导出图像中的渐变与 PowerPoint 中的显示不同,请参阅 选择渐变渲染样式。您可以在不更改演示文稿中存储的渐变填充的情况下选择渲染样式。

图案填充

在 PowerPoint 中,图案填充是一种格式选项,允许您对形状应用两色设计——例如点、条纹、交叉阴影或格子。您可以为图案的前景色和背景色选择自定义颜色。

Aspose.Slides 提供了超过 45 种预定义图案样式,您可以将其应用于形状,以增强演示文稿的视觉效果。即使选择了预定义图案,仍可指定其使用的确切颜色。

以下是使用 Aspose.Slides 对形状应用图案填充的方法:

  1. 创建 Presentation 类的实例。
  2. 通过索引获取对幻灯片的引用。
  3. 向幻灯片添加一个 AutoShape。
  4. 将形状的 FillType 设置为 PATTERN。
  5. 从预定义选项中选择图案样式。
  6. 设置图案的 back_color。
  7. 设置图案的 fore_color。
  8. 将修改后的演示文稿保存为 PPTX 文件。
import aspose.slides as slides
import aspose.pydrawing as draw

# 实例化表示演示文稿文件的 Presentation 类。
with slides.Presentation() as presentation:

    # 获取第一张幻灯片。
    slide = presentation.slides[0]

    # 添加一个矩形类型的自动形状。
    shape = slide.shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 50, 50, 150, 75)

    # 将填充类型设置为 Pattern。
    shape.fill_format.fill_type = slides.FillType.PATTERN

    # 设置图案样式。
    shape.fill_format.pattern_format.pattern_style = slides.PatternStyle.TRELLIS

    # 设置图案的背景色和前景色。
    shape.fill_format.pattern_format.back_color.color = draw.Color.light_gray
    shape.fill_format.pattern_format.fore_color.color = draw.Color.yellow

    # 将 PPTX 文件保存到磁盘。
    presentation.save("pattern_fill.pptx", slides.export.SaveFormat.PPTX)

带有图案填充的矩形

图片填充

在 PowerPoint 中,图片填充是一种格式选项,允许您在形状内部插入图像——实质上将图像用作形状的背景。

以下是使用 Aspose.Slides 对形状应用图片填充的方法:

  1. 创建 Presentation 类的实例。
  2. 通过索引获取对幻灯片的引用。
  3. 向幻灯片添加一个 AutoShape。
  4. 将形状的 FillType 设置为 PICTURE。
  5. 将图片填充模式设置为 TILE(或其他首选模式)。
  6. 从要使用的图像创建一个 PPImage 对象。
  7. 将此图像分配给形状的 picture_fill_format 的 picture.image 属性。
  8. 将修改后的演示文稿保存为 PPTX 文件。

假设我们有一个名为 “lotus.png” 的文件,图片如下:

莲花图片

import aspose.slides as slides

# 实例化表示演示文稿文件的 Presentation 类。
with slides.Presentation() as presentation:

    # 获取第一张幻灯片。
    slide = presentation.slides[0]

    # 添加一个矩形类型的自动形状。
    shape = slide.shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 50, 50, 192, 95)

    # 将填充类型设置为 Picture。
    shape.fill_format.fill_type = slides.FillType.PICTURE

    # 设置图片填充模式。
    shape.fill_format.picture_fill_format.picture_fill_mode = slides.PictureFillMode.TILE

    # 加载图像并将其添加到演示文稿资源中。
    with slides.Images.from_file("lotus.png") as image:
        presentation_image = presentation.images.add_image(image)

    # 设置图片。
    shape.fill_format.picture_fill_format.picture.image = presentation_image

    # 将 PPTX 文件保存到磁盘。
    presentation.save("picture_fill.pptx", slides.export.SaveFormat.PPTX)

带有图片填充的形状

将图片平铺为纹理

如果您想将平铺图片设为纹理并自定义平铺行为,可以使用 PictureFillFormat 类的以下属性:

  • picture_fill_mode:设置图片填充模式——TILE 或 STRETCH。
  • tile_alignment:指定平铺在形状内部的对齐方式。
  • tile_flip:控制平铺是否水平翻转、垂直翻转或同时翻转。
  • tile_offset_x:设置平铺相对于形状原点的水平偏移(单位为点)。
  • tile_offset_y:设置平铺相对于形状原点的垂直偏移(单位为点)。
  • tile_scale_x:定义平铺的水平比例,以百分比表示。
  • tile_scale_y:定义平铺的垂直比例,以百分比表示。

以下代码示例展示了如何添加一个带有平铺图片填充的矩形形状并配置平铺选项:

import aspose.slides as slides

# 实例化表示演示文稿文件的 Presentation 类。
with slides.Presentation() as presentation:

    # 获取第一张幻灯片。
    first_slide = presentation.slides[0]

    # 添加一个矩形自动形状。
    shape = first_slide.shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 50, 50, 190, 95)

    # 将形状的填充类型设置为 Picture。
    shape.fill_format.fill_type = slides.FillType.PICTURE

    # 加载图像并将其添加到演示文稿资源中。
    with slides.Images.from_file("lotus.png") as source_image:
        presentation_image = presentation.images.add_image(source_image)

    # 将图像分配给形状。
    picture_fill_format = shape.fill_format.picture_fill_format
    picture_fill_format.picture.image = presentation_image

    # 配置图片填充模式和瓦片属性。
    picture_fill_format.picture_fill_mode = slides.PictureFillMode.TILE
    picture_fill_format.tile_offset_x = -32
    picture_fill_format.tile_offset_y = -32
    picture_fill_format.tile_scale_x = 50
    picture_fill_format.tile_scale_y = 50
    picture_fill_format.tile_alignment = slides.RectangleAlignment.BOTTOM_RIGHT
    picture_fill_format.tile_flip = slides.TileFlip.FLIP_BOTH

    # 将 PPTX 文件保存到磁盘。
    presentation.save("tile.pptx", slides.export.SaveFormat.PPTX)

平铺选项

纯色填充

在 PowerPoint 中,纯色填充是一种格式选项,可使用单一、均匀的颜色填充形状。此纯色背景不会使用任何渐变、纹理或图案。

使用 Aspose.Slides 对形状应用纯色填充,请按以下步骤操作:

  1. 创建 Presentation 类的实例。
  2. 通过索引获取对幻灯片的引用。
  3. 向幻灯片添加一个 AutoShape。
  4. 将形状的 FillType 设置为 SOLID。
  5. 为形状分配您首选的填充颜色。
  6. 将修改后的演示文稿保存为 PPTX 文件。
import aspose.slides as slides
import aspose.pydrawing as draw

# 实例化表示演示文稿文件的 Presentation 类。
with slides.Presentation() as presentation:

    # 获取第一张幻灯片。
    slide = presentation.slides[0]

    # 添加一个矩形类型的自动形状。
    shape = slide.shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 50, 50, 150, 75)

    # 将填充类型设置为 Solid。
    shape.fill_format.fill_type = slides.FillType.SOLID

    # 设置填充颜色。
    shape.fill_format.solid_fill_color.color = draw.Color.yellow

    # 将 PPTX 文件保存到磁盘。
    presentation.save("solid_color_fill.pptx", slides.export.SaveFormat.PPTX)

带有纯色填充的形状

设置透明度

在 PowerPoint 中,当您对形状应用纯色、渐变、图片或纹理填充时,也可以设置透明度级别以控制填充的透明度。较高的透明度值会使形状更透明,从而部分显示背景或底层对象。

Aspose.Slides 通过调整用于填充的颜色的 alpha 值来设置透明度。操作方法如下:

  1. 创建 Presentation 类的实例。
  2. 通过索引获取对幻灯片的引用。
  3. 向幻灯片添加一个 AutoShape。
  4. 将填充类型设置为 SOLID。
  5. 使用 Color.from_argb 定义具有透明度的颜色(alpha 组件控制透明度)。
  6. 保存演示文稿。
import aspose.pydrawing as draw
import aspose.slides as slides

# 实例化表示演示文稿文件的 Presentation 类。
with slides.Presentation() as presentation:

    # 获取第一张幻灯片。
    slide = presentation.slides[0]
    
    # 添加一个纯色矩形自动形状。
    slide.shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 50, 50, 150, 75)

    # 在纯色形状上添加一个透明矩形自动形状。
    shape = slide.shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 80, 80, 150, 75)
    shape.fill_format.fill_type = slides.FillType.SOLID
    shape.fill_format.solid_fill_color.color = draw.Color.from_argb(128, 204, 102, 0)
    
    presentation.save("shape_transparency.pptx", slides.export.SaveFormat.PPTX)

透明形状

旋转形状

Aspose.Slides 允许您在 PowerPoint 演示文稿中旋转形状。这在为视觉元素定位特定的对齐或设计需求时非常有用。

要在幻灯片上旋转形状,请按以下步骤操作:

  1. 创建 Presentation 类的实例。
  2. 通过索引获取对幻灯片的引用。
  3. 向幻灯片添加一个 AutoShape。
  4. 将形状的 rotation 属性设置为所需的角度。
  5. 保存演示文稿。
import aspose.slides as slides

# 实例化表示演示文稿文件的 Presentation 类。
with slides.Presentation() as presentation:

    # 获取第一张幻灯片。
    slide = presentation.slides[0]

    # 添加一个矩形类型的自动形状。
    shape = slide.shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 50, 50, 150, 75)

    # 将形状旋转 5 度。
    shape.rotation = 5

    # 将 PPTX 文件保存到磁盘。
    presentation.save("shape_rotation.pptx", slides.export.SaveFormat.PPTX)

形状旋转

添加 3D 倾斜效果

Aspose.Slides 允许您通过配置其 ThreeDFormat 属性为形状添加 3D 倾斜效果。

要为形状添加 3D 倾斜效果,请按以下步骤操作:

  1. 实例化 Presentation 类。
  2. 通过索引获取对幻灯片的引用。
  3. 向幻灯片添加一个 AutoShape。
  4. 配置形状的 ThreeDFormat 以定义倾斜设置。
  5. 保存演示文稿。
import aspose.slides as slides
import aspose.pydrawing as draw

# 创建 Presentation 类的实例。
with slides.Presentation() as presentation:

    slide = presentation.slides[0]

    # 向幻灯片添加形状。
    shape = slide.shapes.add_auto_shape(slides.ShapeType.ELLIPSE, 50, 50, 100, 100)
    shape.fill_format.fill_type = slides.FillType.SOLID
    shape.fill_format.solid_fill_color.color = draw.Color.green
    shape.line_format.fill_format.fill_type = slides.FillType.SOLID
    shape.line_format.fill_format.solid_fill_color.color = draw.Color.orange
    shape.line_format.width = 2.0

    # 设置形状的 ThreeDFormat 属性。
    shape.three_d_format.depth = 4
    shape.three_d_format.bevel_top.bevel_type = slides.BevelPresetType.CIRCLE
    shape.three_d_format.bevel_top.height = 6
    shape.three_d_format.bevel_top.width = 6
    shape.three_d_format.camera.camera_type = slides.CameraPresetType.ORTHOGRAPHIC_FRONT
    shape.three_d_format.light_rig.light_type = slides.LightRigPresetType.THREE_PT
    shape.three_d_format.light_rig.direction = slides.LightingDirection.TOP

    # 将演示文稿保存为 PPTX 文件。
    presentation.save("3D_bevel_effect.pptx", slides.export.SaveFormat.PPTX)

3D 倾斜效果

添加 3D 旋转效果

Aspose.Slides 通过配置其 ThreeDFormat 属性来为形状添加 3D 旋转效果。

要对形状应用 3D 旋转:

  1. 创建 Presentation 类的实例。
  2. 通过索引获取对幻灯片的引用。
  3. 向幻灯片添加一个 AutoShape。
  4. 设置形状的 camera_type 和 light_type 以定义 3D 旋转。
  5. 保存演示文稿。
import aspose.slides as slides

# 创建 Presentation 类的实例。
with slides.Presentation() as presentation:

    slide = presentation.slides[0]

    auto_shape = slide.shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 50, 50, 150, 75)
    auto_shape.text_frame.text = "Hello, Aspose!"

    auto_shape.three_d_format.depth = 6
    auto_shape.three_d_format.camera.set_rotation(40, 35, 20)
    auto_shape.three_d_format.camera.camera_type = slides.CameraPresetType.ISOMETRIC_LEFT_UP
    auto_shape.three_d_format.light_rig.light_type = slides.LightRigPresetType.BALANCED

    # 将演示文稿保存为 PPTX 文件。      
    presentation.save("3D_rotation_effect.pptx", slides.export.SaveFormat.PPTX)

3D 旋转效果

控制形状的黑白渲染

[Shape.black_white_mode](https://reference.aspose.com/slides/python-net/aspose.slides/shape/black_white_mode/) 属性指定在以黑白模式查看或处理演示文稿时,单个形状的渲染方式。它本身并不会启用黑白显示,也不会在正常彩色模式下更改形状的填充、线条或其他格式。

使用 BlackWhiteMode 枚举中的值来选择所需行为。例如,AUTOMATIC 让渲染应用程序自行选择转换方式,GRAY 和 LIGHT_GRAY 使用灰色,BLACK_WHITE 仅使用黑白,BLACK 和 WHITE 强制单一颜色,COLOR 保持正常上色,HIDDEN 在黑白模式下隐藏形状。NOT_DEFINED 表示未分配形状级别的模式。

以下 Python 代码创建了一个彩色形状,并在黑白显示模式下使其呈现为灰色:

import aspose.slides as slides
import aspose.pydrawing as draw

with slides.Presentation() as presentation:
    slide = presentation.slides[0]

    shape = slide.shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 50, 50, 200, 100)
    shape.fill_format.fill_type = slides.FillType.SOLID
    shape.fill_format.solid_fill_color.color = draw.Color.orange

    # 在彩色模式下保持橙色填充,但在黑白模式下将形状渲染为灰色。
    shape.black_white_mode = slides.BlackWhiteMode.GRAY

    presentation.save("shape_black_white_mode.pptx", slides.export.SaveFormat.PPTX)

在正常彩色模式下,矩形保持橙色填充。在黑白显示工作流中,由于模式设置为 GRAY,它使用灰色上色。这使您能够在保留全彩幻灯片的同时,为打印、预览或其他遵循演示文稿黑白显示设置的工作流定义不同的外观。

重置格式

以下 Python 代码展示了如何重置幻灯片的格式,并将 LayoutSlide 上所有占位符形状的位置、大小和格式恢复为默认设置:

import aspose.slides as slides

with slides.Presentation("sample.pptx") as presentation:

    for slide in presentation.slides:
        # 重置每个在布局上具有占位符的形状。
        slide.reset()

    presentation.save("reset_formatting.pptx", slides.export.SaveFormat.PPTX)

常见问题

形状格式化会影响最终演示文稿的文件大小吗?

影响极小。嵌入的图像和媒体占用大部分文件空间,而颜色、效果和渐变等形状参数以元数据形式存储,几乎不增加额外大小。

如何检测幻灯片上具有相同格式的形状以便对其进行分组?

比较每个形状的关键格式属性——填充、线条和效果设置。如果所有对应的值匹配,则视其样式为相同,并在逻辑上对这些形状进行分组,从而简化后续的样式管理。

我可以将一组自定义形状样式保存到单独的文件,以便在其他演示文稿中重用吗?

可以。将带有所需样式的示例形状存储在模板幻灯片或 .POTX 模板文件中。创建新演示文稿时,打开该模板,克隆所需的样式形状,并在需要的地方重新应用其格式。