python自动化PPT:如何玩转自选图形

上节对python自动化PPT的图形基本概念做了详细介绍,当然,要作出一篇精彩的PPT文档,精彩的自选图形必须要掌握,这节继续来解读这方面的知识。

如何玩转自选图形

自选图形基础

自动形状是规则的形状。正方形,圆形,三角形,星形,那种东西。有182种不同的汽车形状可供选择。其中120个具有调整“手柄”,您可以使用它来改变形状,有时是戏剧性的。

许多形状类型共享一组共同的属性。我们将在这里介绍其中的许多,因为其中一些形状只是AutoShape的一种特殊形式。

添加自动形状

下面的代码添加了一个圆角矩形形状,一个英寸的正方形,并且距离幻灯片的左上角一英寸:

from pptx.enum.shapes import MSO_SHAPE shapes = slide.shapes left = top = width = height = Inches(1.0) shape = shapes.add_shape( MSO_SHAPE.ROUNDED_RECTANGLE, left, top, width, height )

有关所有182种自动形状类型的列表,请参阅MSO_AUTO_SHAPE_TYPE枚举页面。

了解英制公制单位

在前面的示例中,我们将位置和维度值设置为表达式Inches(1.0)。那是什么意思?

Inches

在内部,PowerPoint以英制公制单位(EMU)存储长度值。EMU是一个整数单位长度,914400英寸。Office文档中的大多数长度都存储在EMU中。914400具有很大的优点,它可以在英寸和厘米之间进行精确转换。

正如您可能想象的那样,直接在EMU中工作是不方便的。为了方便起见,python-pptx提供了一组值类型,以便于规范和转换为方便的单元:

>>> from pptx.util import Inches, Pt >>> length = Inches(1) >>> length 914400 >>> length.inches 1.0 >>> length.cm 2.54 >>> length.pt 72.0 >>> length = Pt(72) >>> length 914400

有关pptx.util的API文档中提供了更多详细信息

形状位置和尺寸

所有形状在其滑块上都有一个位置并且具有一定的尺寸。通常,在创建形状时指定位置和大小。位置和大小也可以从现有形状中读取并更改:

>>> from pptx.enum.shapes import MSO_SHAPE >>> left = top = width = height = Inches(1.0) >>> shape = shapes.add_shape( >>> MSO_SHAPE.ROUNDED_RECTANGLE, left, top, width, height >>> ) >>> shape.left, shape.top, shape.width, shape.height (914400, 914400, 914400, 914400) >>> shape.left.inches 1.0 >>> shape.left = Inches(2.0) >>> shape.left.inches 2.0

填充

自选图形的外边缘有一个轮廓。该轮廓中出现的内容称为形状填充

最常见的填充类型是纯色。形状也可以用渐变,图片,图案(例如交叉影线)填充,或者可以没有填充(透明)。

当使用颜色时,可以将其指定为特定RGB值或来自主题调色板的颜色。

因为有很多选项,填充API有点复杂。此代码将形状的填充设置为红色:

>>> fill = shape.fill >>> fill.solid() >>> fill.fore_color.rgb = RGBColor(255, 0, 0)

这会将其设置为工具栏面板中显示为“Accent 1 - 25%Darker”的主题颜色:

>>> from pptx.enum.dml import MSO_THEME_COLOR >>> fill = shape.fill >>> fill.solid() >>> fill.fore_color.theme_color = MSO_THEME_COLOR.ACCENT_1 >>> fill.fore_color.brightness = -0.25

这会将形状填充设置为透明,或者在PowerPoint UI中调用“无填充”:

>>> shape.fill.background()

如您所见,第一步是通过在fill上调用相应的方法来指定所需的填充类型。这样做实际上会更改填充对象上可用的属性。例如,.fore_color在调用其.background()方法后引用fill对象将引发异常:

>>> fill = shape.fill >>> fill.solid() >>> fill.fore_color

>>> fill.background() >>> fill.fore_color Traceback (most recent call last): ... TypeError: a transparent (background) fill has no foreground color

线

AutoShape的轮廓也可以格式化,包括设置其颜色,宽度,破折号(实线,虚线,点线等),线条样式(单,双,厚薄等),端盖,连接类型,和别的。在撰写本文时,可以使用python-pptx设置颜色和宽度:

>>> line = shape.line >>> line.color.rgb = RGBColor(255, 0, 0) >>> line.color.brightness = 0.5 # 50% lighter >>> line.width = Pt(2.5)

主题颜色也可用于线条:

>>> line.color.theme_color = MSO_THEME_COLOR.ACCENT_6

Shape.line有属性.color。这本质上是一个快捷方式:

>>> line.fill.solid() >>> line.fill.fore_color

这对于行格式化是有意义的,因为形状轮廓最常设置为纯色。例如,要将线路设置为透明,则需要直接访问填充:

>>> line.fill.background()

线宽

形状轮廓还具有读/写宽度属性:

>>> line.width 9525 >>> line.width.pt 0.75 >>> line.width = Pt(2.0) >>> line.width.pt 2.0

调整自动形状

在PowerPoint中,这些显示为小黄色钻石,您可以拖动以更改形状的外观。他们通过一个程序工作有点繁琐,但如果你有耐心让他们正确,可以非常精确地实现一些非凡的效果。

常精确地实现一些非凡的效果

形状调整概念

在尝试通过调整进行认真的工作之前,有一些值得抓住的概念。

首先,调整特定于特定的自动形状类型。每个自动形状都有0到8个调整。

调整值是大整数,每个整数基于100,000的标称值。调整的有效值与形状的宽度或高度成比例。因此,x坐标调整的值为50,000,对应于形状宽度的一半; y坐标调整的值为75,000,对应于形状高度的3/4。

调整值可以是负数,通常表示坐标位于形状左上角(原点)的左侧或上方。值也可以受到限制,这意味着它们的有效值不能超出规定范围。实际上,这对应于例如不能延伸到形状的左侧之外的点。

以下代码使用其调整格式化标注形状:

callout_sp = shapes.add_shape(

MSO_SHAPE.LINE_CALLOUT_2_ACCENT_BAR, left, top, width, height

)

# get the callout line coming out of the right place

adjs = callout_sp.adjustments

adjs[0] = 0.5 # vert pos of junction in margin line, 0 is top

adjs[1] = 0.0 # horz pos of margin ln wrt shape width, 0 is left side

adjs[2] = 0.5 # vert pos of elbow wrt margin line, 0 is top

adjs[3] = -0.1 # horz pos of elbow wrt shape width, 0 is margin line

adjs[4] = 3.0 # vert pos of line end wrt shape height, 0 is top

a5 = adjs[3] - (adjs[4] - adjs[0]) * height/width

adjs[5] = a5 # horz pos of elbow wrt shape width, 0 is margin line

# rotate 45 degrees counter-clockwise

callout_sp.rotation = -45.0

  • 以上对如何玩转自选图形做了一个详细的介绍,接下来将又会回到基础的知识的学习中去了,下一节讲解,了解占位符.