python+pptx:(一)占位符、文本框、段落操作
目录
创建PPT操作对象
幻灯片对象
添加幻灯片对象
获取幻灯片对象
占位符
获取标题占位符内容
文本框设置
添加文本框.add_textbox
文本内容、文本边框边距及对齐方式设置
文本框背景色设置
文本框边框样式设置
段落设置
文本框段落字体样式设置
安装三方库:pip install python-pptx
创建PPT操作对象
from pptx import Presentation
from pptx.util import Cm, Inches, Mm, Pt
from pptx.dml.color import RGBColor
from pptx.enum.text import MSO_ANCHOR, MSO_AUTO_SIZE, PP_PARAGRAPH_ALIGNMENT, MSO_VERTICAL_ANCHOR
# 创建一个新的幻灯片文档
file_path = r'C:\Users\Administrator\Desktop\testfile\测试文件\test.pptx'
prs = Presentation(file_path) # 创建PPT文件对象,没有参数为创建新的PPT,有参数表示打开已有PPT文件对象
幻灯片对象
添加一个幻灯片:add_slide新增幻灯片,slide_layouts表示新增PPT引用的母版对象,不同的母版有不同的布局,通过索引获取。
添加幻灯片对象
slide = prs.slides.add_slide(prs.slide_layouts[0])
# for i in range(10): # 测试添加母版
# prs.slides.add_slide(prs.slide_layouts[i])
# 设置页面宽高
# prs.slide_width = 15000000
# prs.slide_height = 30000000
获取幻灯片对象
通过PPT文件对象方法.slides方法可以获取所有幻灯片的迭代器对象(迭代器对象,支持通过索引获取对应的对象,如获取第二张幻灯片使用prs.slides[1]即可)。
print(len(prs.slides)) # 获取幻灯片数量
通过某个幻灯片对象的.shapes方法获取对应幻灯片的所有样式对象(同上获取指定样式对象也可使用索引直接获取,如获取第二张幻灯片的第一个样式对象prs.slides[1].shapes[0])。
# 下面代码可以用来读取幻灯片对象中的文本内容数据作其他操作,如配合docx库将PPT内容转为word内容
for sds in prs.slides:
# print(len(sds.shapes)) # 打印每个幻灯片片的样式数量
for sp in sds.shapes:
# print(sp.text) # 输出样式内容.text,文本内容不包含系统占位符(标题占位符、文本占位符、数字占位符、日期占位符、页脚占位符)
if sp.has_text_frame: # 判断是否有文本框
text_box = sp.text_frame # .text_frame获取文本框对象
for par in text_box.paragraphs:
if par.text != '':
print(par.text)
占位符
获取占位符的方法:placeholders,支持通过索引获取指定占位符,如获取第一张幻灯片的第一个占位符对象:prs.slides[0].placeholders[0]
for placeholder in prs.slides[0].placeholders:
placeholder.text = '设置占位符测试' # 设置占位符内容
print(placeholder.text) # 获取占位符内容
获取标题占位符内容
title = prs.slides[2].shapes.title # 获取标题占位符对象.title
title.text = '主题占位符'
文本框设置
添加文本框.add_textbox
add_textbox(self, left: Length, top: Length, width: Length, height: Length)
left, top, width, height = Cm(5), Cm(5), Cm(10), Cm(10) # 文本框左上角位置left, top,文本框宽高width, height
text_box = prs.slides[2].shapes.add_textbox(left, top, width, height)
文本内容、文本边框边距及对齐方式设置
tf = text_box.text_frame # 设置文本框文本内容样式对象
# 文本框添加文本内容
tf.text = '冯夷鸣鼓,女娲清歌。腾文鱼以警乘,鸣玉鸾以偕逝。六龙俨其齐首,载云车之容裔,鲸鲵踊而夹毂,水禽翔而为卫。'
# 设置文本内容边距及对齐方式
tf.margin_top = Cm(1) # 上边距
tf.margin_bottom = Cm(1) # 下边距,下边距根据文字内容自动变动,当文本内容过长时,通常设置无效
tf.margin_left = Cm(1) # 左边距
tf.margin_right = Cm(1) # 右边距
tf.vertical_anchor = MSO_ANCHOR.MIDDLE # 对齐文本方式:居中对齐
# tf.vertical_anchor = MSO_VERTICAL_ANCHOR.BOTTOM # 对齐文本方式:底端对齐
# tf.vertical_anchor = MSO_ANCHOR.BOTTOM # 对齐文本方式:底端对齐
# tf.vertical_anchor = MSO_VERTICAL_ANCHOR.TOP # 对齐文本方式:顶端对齐
# tf.vertical_anchor = MSO_ANCHOR.TOP # 对齐文本方式:顶端对齐
tf.word_wrap = True # 文本框的文字自动对齐(超出自动换行设置)
文本框背景色设置
ft = text_box.fill
ft.solid() # 设置纯色填充
ft.fore_color.rgb = RGBColor(247, 150, 70) # 设置背景颜色值,不设置时纯色填充的颜色为黑色
文本框边框样式设置
ln = text_box.line
ln.color.rgb = RGBColor(255, 100, 150) # 设置文本框边框颜色
ln.width = Cm(.2) # 设置文本框边框粗细值
段落设置
添加段落需要使用text_frame方法,可以对占位符对象,文本框对象等添加段落。(只有文本框中添加的段落才支持设置字体样式)
paragraph = prs.slides[3].placeholders[0] # 给占位符添加段落
text_frame = paragraph.text_frame
text_frame.add_paragraph() # 添加段落
text_frame.text = '冯夷鸣鼓,女娲清歌。腾文鱼以警乘,鸣玉鸾以偕逝。六龙俨其齐首,载云车之容裔,鲸鲵踊而夹毂,水禽翔而为卫。' # 添加段落文本内容
文本框段落字体样式设置
p = text_box.text_frame.add_paragraph() # 给文本框添加段落
p.text = '于是乎玄猨素雌,蜼玃飞鸓,蛭蜩蠼猱,獑胡豰蛫,栖息乎其间。' # 设置段落文本内容
p.alignment = PP_PARAGRAPH_ALIGNMENT.RIGHT # 对齐方式
p.font.size = Pt(30) # 字号
p.font.name = '楷体' # 字体
p.font.bold = True # 是否加粗
p.font.italic = True # 是否斜体
p.font.underline = True # 是否添加下划线
p.font.color.rgb = RGBColor(100, 200, 50) # 字体颜色
p.level = 1 # 段落等级