首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
引言:Python操作PPT
新建和保存PPT
打开PPT文档
ppt与pptx格式转换
设置长度单位
操作幻灯片
幻灯片布局
新建幻灯片
幻灯片位置
获取幻灯片
删除幻灯片
PPT中的形状介绍
获取形状
添加形状
形状填充色
形状边框
占位符介绍
获取占位符
占位符类型
填充占位符
操作文本介绍
获取文本框
添加文本框
添加文本
段落样式
Run样式
文本框样式
添加图表
柱状图
折线图
散点图
饼图
占位符图表
操作表格
插入表格
读取表格
占位符表格
表格对象
行列对象
访问单元格
单元格文本
单元格样式
合并单元格
拆分单元格
操作图片
当前位置:
首页>>
技术小册>>
Python与办公-玩转PPT
小册名称:Python与办公-玩转PPT
### 添加图片 在一个幻灯片页面插入一张图片的方法除了前面学过的填充占位符,还可以像插入表格和图表那样指定图片的位置和宽高,那就需要调用SlideShapes对象的add_picture()方法了,该方法的第一个参数是图片路径,后面四个参数是位置和宽高,我们已经接触过这几个参数很多次了,只要是插入形状基本上都会用到left、top、width和height这四个参数。值得注意的是,如果插入图片的时候不设置宽高参数则会以图片本身的尺寸显示,如果只指定了宽(或高),则会自动计算高(或宽)保持图片不变形,即等比缩放,代码如下: ```bash from pptx import Presentation from pptx.util import Cm ppt = Presentation() slide = ppt.slides.add_slide(ppt.slide_layouts[6]) path = "./ppt_ files/images/test.jpg" top = left = Cm(3) width = Cm(20) height = Cm(10) picture = slide.shapes.add_picture(path,top,left,width,height) ppt.save("./ppt_ files/test.pptx") ``` ### 提取图片 如果想要把一个PPT文档里的图片都提取出来也是可以的,这里说一下大概思路。图片属于形状,所以我们肯定要遍历所有页面的所有形状,然后判断形状对象是否为图片对象。 要注意的是,我们插进来的图片是Picture对象,但别忘了占位符里也可能有图片,占位符里的图片是PlaceholderPicture对象,如果发现还有其他类型的图片,就用type()函数判断具体类型。一般来说图片都是Picture对象或者继承了Picture对象,从源码中可以看出它有一个image属性,访问它能得到一个Image对象,再访问Image对象的blob属性,就能得到图片的二进制数据了,然后通过open()函数将二进制数据写到硬盘上就行。 至于保存的文件名就不是重点了,我这里使用的是形状的name属性作为文件名,它是不会重复出现的,所以保存的图片不会相互覆盖。 有了上面的思路,我们就可以动手写代码了,但如果不看源码的话,这好像有些许难度。可以参考下方的代码,代码里写了注释,如果你想提高自己的编程水平就尽量把整个过程弄清楚吧: ```bash from pptx import Presentation from pptx.shapes.picture import Picture from pptx.shapes.placeholder import PlaceholderPicture ppt = Presentation("./ppt_ files/测试文档3_提取图片.pptx") for slide in ppt.slides: for shape in slide.shapes: pic_type = (Picture,PlaceholderPicture) # 如果不是Picture或Picture的子类,跳过 if not isinstance(shape,pic_type): continue # 图片格式,形如"image/jpeg" content_type = shape.image.content_type file_type = content_type.split("/")[-1] if content_type else "jpg" # 形状名,但有空格,形如"图片3",可以把空格全部替换掉 shape_name = shape.name shape_name = str(shape_name).replace(" ","") # 拼接保存路径,形如"./xxx/图片3.jpg" save_path = f"./ppt_ files/images/{shape_name}.{ file_type}" # # 获取图片二进制数据 blob = shape.image.blob # 保存图片 with open(save_path,"wb") as f: f.write(blob) ``` ### 页面保存为图片 不知道你有没有这种需求,就是把一个PPT文档的所有页面都保存为图片。pythonpptx并不能满足这个需求,但我们可以借鉴一下把doc转为docx的思路,PPT软件有将文档另存为图片的操作,所以我们可以使用win32com完成,查阅微软的官方文档,可以知道把全部幻灯片页面都保存为图片的格式类型是17,代码如下: ```bash from win32com import client app = client.Dispatch('PowerPoint.Application') app.DisplayAlerts = False ppt = app.Presentations.Open(r"E:\xxx\测试文档1.pptx", WithWindow=False) ppt.SaveAs(r"C:\xxx\ppt页面",17) ppt.Close() app.Quit() ``` 上面的代码是把“测试文档1.pptx”这个PPT文档里的全部页面都以jpg的格式保存到“ppt页面”这个文件夹里,文档的路径和保存的路径以实际情况为准,但别忘了要使用绝对路径。
上一篇:
拆分单元格
该分类下的相关小册推荐:
Python机器学习基础教程(下)
Python与办公-玩转PDF
Python数据分析与挖掘实战(下)
Python合辑9-判断和循环
Python面试指南
Python合辑3-字符串用法深度总结
Python合辑8-变量和运算符
Python机器学习基础教程(上)
Python与办公-玩转Excel
Python合辑5-格式化字符串
Python合辑12-面向对象
Python合辑7-集合、列表与元组