python实现pptx批量向PPT中插⼊图⽚
⽬录
项⽬背景
基础
加亿点点细节
最终代码
项⽬结果图
总结
项⽬背景
实验结果拍摄了⼀组图⽚,数量较⼤,想要按顺序组合排版,⽐较简单的⽅式是在PPT中插⼊图⽚进⾏排版。但是PPT批量插⼊图⽚后,顺序打乱且不显⽰图⽚名称,每个图⽚单独调整位置和⼤⼩费时费⼒,于是想到使⽤⼯具批量操作。过去了解过python⾃动化办公模块,相对来说python也是简单易⽤的语⾔,项
⽬预计不会耗费太⼤精⼒,故尝试学习实践⼀番。(⾮专业学习笔记分享,望各位⼤佬不吝指导!)
数据为16组实验,每组实验重复两次,共32个图⽚,所有图⽚为正⽅形,
命名⽅式为:
1.png,1-5.png,
2.png,2-5.png … … … … 16.png,16-5.png
需严格按照顺序排列
基础
安装
pip install python-pptx
依赖
Python 2.6, 2.7, 3.3, 3.4, or 3.6
lxml
Pillow
XlsxWriter (to use charting features)
基础操作代码概览:
import collections.abc
from pptx import Presentation, util
prs = Presentation() # 实例化⼀个ppt演⽰⽂稿对象
blank_slide_layout = prs.slide_layouts[6] # 实例化空⽩模板
slide = prs.slides.add_slide(blank_slide_layout) # 向⽂件中添加空⽩页⾯
img_path = './1.png' # 图⽚路径
# 设置图⽚的位置和⼤⼩
left = util.Cm(0)
top = util.Cm(0)
width = util.Cm(4)
height = util.Cm(4)
# 在页⾯中插⼊图⽚
pic = slide.shapes.add_picture(img_path, left, top, width, height)
prs.save('⾃动⽣成的ppt.pptx') # 保存为⽂件
第⼀步:建⽴⼀个PPT⽂件
from pptx import Presentation
prs = Presentation()  # 实例化⼀个ppt演⽰⽂稿对象
# 中间补充具体操作添加内容
prs.save('⾃动⽣成的ppt.pptx') # 保存为⽂件
此时踩了第⼀个坑,执⾏结果报错:
AttributeError: module 'collections' has no attribute 'Container'
原因是python 3.10版本⽀持问题,此时在开头多导⼊⼀个依赖包collections.abc即可解决。
import collections.abc
第⼆步:新建页⾯
prs.slide_layouts是Presentation对象的默认页⾯模板,是⼀个数组,共11个,可通过循环查看所有默认页⾯模板。prs.slides.add_slide( )⽅法可向⽂件中添加模板页⾯。默认第7个模板为空⽩页⾯。
n = len(prs.slide_layouts)
print("页⾯模板数量:", n)
for i in range(n):
python正则表达式爬虫slide_layout = prs.slide_layouts[i] # 实例化模板页⾯
slide = prs.slides.add_slide(slide_layout) # 向⽂件中添加模板页⾯
单独添加⼀个空⽩页⾯仅需如下代码:
blank_slide_layout = prs.slide_layouts[6] # 实例化空⽩模板页⾯
slide = prs.slides.add_slide(blank_slide_layout) # 向⽂件中添加空⽩页⾯
第三步:添加图⽚
添加图⽚可使⽤如下⽅法,
pic = slide.shapes.add_picture(img_path, left, top, width, height)
位置和⼤⼩属性默认为英制单位EMU,可转化为厘⽶,⽤如下⽅法定义:
from pptx import util
img_path = './1.png' # 图⽚路径
left = util.Cm(0)
top = util.Cm(0)
width = util.Cm(4)
height = util.Cm(4)
此时便可得到⼀个在左上⾓插⼊图⽚的页⾯。
加亿点点细节
1. 改变幻灯⽚页⾯⼤⼩
默认⽣成的页⾯⼤⼩为 4 : 3 ⼤⼩的页⾯画布,可通过修改Presentation对象的属性改变⼤⼩,如下:
prs.slide_width = util.Cm(32)
prs.slide_height = util.Cm(18)
2. 根据需要排列图⽚位置
# 读取图⽚列表
pic_list = []
for i in listdir():
if  '.png'  in i:
pic_list.append(i)
print('图⽚列表:\n', pic_list)
# 设置图⽚的⼤⼩
width = util.Cm(4)
height = util.Cm(4)
for p in pic_list:
# 图⽚路径
img_path = './' + p
# 设置图⽚位置
n = pic_list.index(p)
if n < 16:
if  '-'  not  in p:
top = util.Cm(0)
left = util.Cm((n - 1) * 2)
else:
top = util.Cm(5)
left = util.Cm(n * 2)
else:
if  '-'  not  in p:
top = util.Cm(10)
left = util.Cm((n - 17) * 2)
else:
top = util.Cm(15)
left = util.Cm((n - 16) * 2)
# 在页⾯中插⼊图⽚
pic = slide.shapes.add_picture(img_path, left, top, width, height)最终代码
import collections.abc
from pptx import Presentation, util
from os import listdir
# 实例化⼀个ppt演⽰⽂稿对象
prs = Presentation()
# 调整页⾯⼤⼩
prs.slide_width = util.Cm(32)
prs.slide_height = util.Cm(19)
# 实例化空⽩模板
blank_slide_layout = prs.slide_layouts[6]
# 向⽂件中添加空⽩页⾯
slide = prs.slides.add_slide(blank_slide_layout)
# 读取图⽚列表
pic_list = []
for i in listdir():
if  '.png'  in i:
pic_list.append(i)
print('图⽚列表:\n', pic_list)
# 设置图⽚的⼤⼩
width = util.Cm(4)
height = util.Cm(4)
for p in pic_list:
# 图⽚路径
img_path = './' + p
# 设置图⽚位置
n = pic_list.index(p)
if n < 16:
if  '-'  not  in p:
top = util.Cm(0)
left = util.Cm((n - 1) * 2)
else:
top = util.Cm(5)
left = util.Cm(n * 2)
else:
if  '-'  not  in p:
top = util.Cm(10)
left = util.Cm((n - 17) * 2)
else:
top = util.Cm(15)
left = util.Cm((n - 16) * 2)
# 在页⾯中插⼊图⽚
pic = slide.shapes.add_picture(img_path, left, top, width, height)
# 保存为⽂件
prs.save('⾃动⽣成的ppt.pptx')
项⽬结果图
总结
到此这篇关于python实现pptx批量向PPT中插⼊图⽚的⽂章就介绍到这了,更多相关python pptx向PPT插图⽚内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!