python办公自动化知识点_最全总结 | 聊聊 Python 办公自动化之 PDF(上)

14909556791ec9107069fba432da8d6f.png

1. 前言

自动化办公,非 Python 莫属!python

从本篇文章开始,咱们继续聊聊自动化办公中另一个经常使用系列:PPTide

2. 准备一下

Python 操做 PPT 最强大的依赖库是:python-pptx函数

因此,在开始操做以前,咱们须要在虚拟环境下安装这个依赖库字体

# 安装依赖

pip3 install python-pptx

3. PPT 结构

首先,咱们须要了解一个 PPT 文档的页面结构3d

46a97cf501d2848e77c903ee1e8215a0.png

一个 PPT 文档对应一个 Presentation 对象code

一个 Presentation 包含多个 Slide 对象,每个 Slide 表明一个幻灯片对象

每一张幻灯片的内容都是由各类形状 Shape 组成blog

其次,PPT 中的内容元素都是由各类形状构成索引

好比:文字框、图片、占位符、表格、普通形状等队列

经过翻看源码,发现他们都定义在 MSO_SHAPE_TYPE  类中

7bda780102c4b22b8d7991d4f36422b7.png

最后,咱们须要了解一下 PPT 中的 版式模板

使用 Presentation 对象的 属性方法 slide_layouts 能够获取内置的 11 种母版样式

# 使用Presentation获取PPT内置的11种版式样式

# 版式索引从0开始

slide_layout = presentation.slide_layouts[slide_style_index]

他们分别是:

Title Slide 标题幻灯片

Title and Content    标题和内容幻灯片

Section Header    节标题幻灯片

Two Content    两栏内容幻灯片

Comparison    比较幻灯片

Title Only    仅标题的幻灯片

Blank    空白幻灯片

Content with Caption    内容和标题的幻灯片

Picture with Caption    图片和标题的幻灯片

Title and Vertical Text 标题和竖排内容

Vertical Title and Text 竖排标题和文本

固然,也能够在 Microsoft PPT / WPS 中查看对应母版的样式

这里补充一下,除了内置的版式样式,也能够经过占位符 PlaceHolder 去自定义母版,知足一些特定的场景需求

4. 幻灯片管理

一个 PPT 文件是由一个或多张幻灯片组成

1-1  那如何添加一张一张幻灯片呢?

这里,只须要经过下面 3 个步骤

实例化一个 Presentation 对象

经过内置的版本样式,新建一个版本样式 Layout

经过版本样式 Layout,添加一张幻灯片

def add_slide(presentation, slide_style_index):

"""

在PPT文档中,之内置的版式添加幻灯片

:param presentation:文档对象

:param slide_style_index:版式索引

:return:

"""

# PPT版式样式

# 内置有11种版式样式

# 0:Title Slide 标题幻灯片

# 1:Title and Content 标题和内容

# 2:Section Header 节标题

# 3:Two Content 两栏内容

# 4:Comparison 比较

# 5:Title Only 仅标题

# 6:Blank 空白

# 7:Content with Caption 内容和标题

# 8:Picture with Caption 图片和标题

# 9:Title and Vertical Text 标题和竖排内容

# 10:Vertical Title and Text 竖排标题和文本

slide_layout = presentation.slide_layouts[slide_style_index]

# 经过样式Layout,新增一张幻灯片

slide = presentation.slides.add_slide(slide_layout)

return slide

# 1.1 新增幻灯片

slide1 = add_slide(self.presentation, 0)

slide2 = add_slide(self.presentation, 1)

slide3 = add_slide(self.presentation, 2)

slide4 = add_slide(self.presentation, 3)

1-2  获取已有的幻灯片或某一张幻灯片?

Presentation 对象的 slides 属性 会返回当前 PPT 文档中全部的幻灯片对象列表

def get_slides(presentation):

"""

获取全部的幻灯片

:param presentation:

:return:

"""

# 全部幻灯片

slides = presentation.slides

# 幻灯片数目

slide_num = len(slides)

return slides, slide_num

def get_slide(presentation, slide_index):

"""

根据索引,获取某一个幻灯片

:param presentation:

:param slide_index:页面索引,从0开始

:return:

"""

slides, slide_num = get_slides(presentation=presentation)

return slides[slide_index]

# 1.2.1 获取所幻灯片

slides, slide_num = get_slides(self.presentation)

print('现有幻灯片:', slides)

print('幻灯片数目:', slide_num)

# 1.2.2 获取某一个幻灯片

slide = get_slide(self.presentation, 1)

print(slide.shapes)

1-3  若是须要删除某一张幻灯片,如何破?

这个也简单,只须要先获取目前幻灯片对象,而后使用下面方法移除便可

def del_slide(presentation, slide_index=0):

"""

删除某一张幻灯片

:param presentation:

:param slide_index: 索引

:return:

"""

# 全部幻灯片的列表

slides = list(presentation.slides._sldIdLst)

# 根据索引,删除某一张幻灯片

presentation.slides._sldIdLst.remove(slides[slide_index])

# 1.3 根据索引,删除PPT文档中某一张幻灯片

# 好比:删除第4张幻灯片

del_slide(self.presentation, 3)

5. 文字及段落

咱们首先须要指定一个幻灯片对象 Slide,它能够是已有的幻灯片,也能够是新建的一张幻灯片

接着,使用幻灯片对象的 slide.shapes 属性,获取当前幻灯片中的全部形状 Shape 组成的队列

最后利用形状队列的下面这个函数添加一个文本框,函数返回值为一个:文本框对象

add_textbox( left , top , width , height )

该函数参数分别为:

left  左边距

top  上边距

width  文字框宽度

height  文字框高度

这里须要引出另一个概念:文字形状

PS:文字形状便于在文字框中添加段落和设置样式,经过「文本框对象」的属性函数 text_frame 获取

def insert_textbox(slide, left, top, width, height, unit=Inches):

"""

幻灯片中添加文本框

:param unit: 单元,默认设置为Inches

:param slide: 幻灯片对象

:param left: 左边距

:param top: 上边距

:param width: 宽度

:param height: 高度

:return:

"""

# 文本框

textbox = slide.shapes.add_textbox(left=unit(left),

top=unit(top),

width=unit(width),

height=unit(height))

# 文本框形状

tf = textbox.text_frame

return textbox, tf

为了便于使用,我对幻灯片中插入文字框这一动做进行了一次封装

长度单位默认设置为:Inches,也能够自定义为厘米等单位

接下来,咱们来操做文字框及段落的常见操做

1-1  插入文本框,并设置默认段落内容

插入文本框的同时,文本框形状对象会自带一个段落,能够对这个段落设置内容

# 二、往幻灯片中插入一个文本框,返回一个文本框对象和一个文本框形状对象

textbox, tf = insert_textbox(slide, 8, 2, 10, 4, unit=Cm)

# 2.1 默认的段落

paragraph_default = tf.paragraphs[0]

paragraph_default.text = "设置段落默认的内容"

1-2  文本框中新增一个段落

查看源码发现,文本框形状对象是 TextFrame 的子类,所以可使用 TextFrame 类中的 add_paragraph() 函数添加一个新的段落

# 2.2 添加一个新的段落

paragraph_new = tf.add_paragraph()

# 2.3 给段落设置内容

paragraph_new.text = "欢迎关注公众号:AirPython\n每周分享 Python 原创技术干货!"

1-3  设置段落及文字样式

和 Word 同样,使用 python-pptx 一样能够设置 PPT 文档的段落样式

其中

对齐方式:对齐方式是针对段落的,只须要指定段落对象的 alignment 的属性值便可

def set_parg_font_style(paragraph, font_name=None, font_color=None, font_size=-1, font_bold=False, font_italic=False,

paragraph_alignment=PP_ALIGN.CENTER):

"""

设置段落中文本的样式,包含:字体名称、颜色、大小、是否加粗、是否斜体

:param paragraph_alignment: 段落对齐方式

:param paragraph:

:param font_name:

:param font_color:

:param font_size:

:param font_bold:

:param font_italic:

:return:

"""

# 对齐方式

# 注意:对齐方式是针对段落的

paragraph.alignment = paragraph_alignment

# 获取段落中字体对象

font = paragraph.font

# 设置字体样式

set_font_style(font, font_name, font_color, font_size, font_bold, font_italic)

return font

段落文字属性:使用段落对象的 font 属性获取字体对象,接着设置字体名称、大小、颜色、是否斜体、加粗

def set_font_style(font, font_name=None, font_color=None, font_size=-1, font_bold=False, font_italic=False):

"""

设置字体样式

:param font:

:param font_name:

:param font_color:

:param font_size:

:param font_bold:

:param font_italic:

:return:

"""

# 字体名称

if font_name:

font.name = font_name

# 字体颜色

if font_color and len(font_color) == 3:

font.color.rgb = RGBColor(font_color[0], font_color[1], font_color[2])

# 字体大小

if font_size != -1:

font.size = Pt(font_size)

# 是否加粗,默认不加粗

font.bold = font_bold

# 是否倾斜,默认不倾斜

font.italic = font_italic

1-4  设置文字框的背景颜色

设置文字框背景颜色只须要 2 步

将形状的填充类型设置为纯色

设置文字框的背景颜色

def set_widget_bg(widget, bg_rgb_color=None):

"""

设置【文本框textbox/单元格/形状】的背景颜色

:param widget:文本框textbox、单元格、形状

:param bg_rgb_color:背景颜色值

:return:

"""

if bg_rgb_color and len(bg_rgb_color) == 3:

# 一、将形状填充类型设置为纯色

widget.fill.solid()

# 二、设置文本框的背景颜色

widget.fill.fore_color.rgb = RGBColor(bg_rgb_color[0], bg_rgb_color[1], bg_rgb_color[2])

# 四、设置文字框的背景颜色

set_widget_bg(textbox, [0, 255, 0])

须要指出的是,该方法一样适用于设置表格单元格、普通形状的背景颜色

1-5 文本框的自动对齐

一旦文本框设置一段很长的文字,单行可能显示不彻底

这时候,咱们只须要设置文字形状的 word_wrap 值为 True,则可让文本框的文字自动换行显示

# 五、设置文本框的文字自动对齐

tf.word_wrap = True

6. 最后

受限于篇幅,本篇文章仅聊到了 PPT 的结构、幻灯片管理、段落及文字;更多复杂操做、项目实战,会在后面的文章中进行说明

要获取所有源码,关注公众号「 AirPython 」,后台回复「 ppt 」便可得到所有源码

若是你以为文章还不错,请你们 点赞、分享、留言下,由于这将是我持续输出更多优质文章的最强动力!

推荐阅读

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值