python+pptx:(一)占位符、文本框、段落操作

目录

创建PPT操作对象

幻灯片对象

添加幻灯片对象

获取幻灯片对象

占位符

获取标题占位符内容

文本框设置

添加文本框.add_textbox

文本内容、文本边框边距及对齐方式设置

文本框背景色设置

文本框边框样式设置

段落设置

文本框段落字体样式设置


安装三方库:pip install python-pptx

创建PPT操作对象

python 复制代码
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引用的母版对象,不同的母版有不同的布局,通过索引获取。

添加幻灯片对象

python 复制代码
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]即可)。

python 复制代码
print(len(prs.slides))  # 获取幻灯片数量

通过某个幻灯片对象的.shapes方法获取对应幻灯片的所有样式对象(同上获取指定样式对象也可使用索引直接获取,如获取第二张幻灯片的第一个样式对象prs.slides[1].shapes[0])。

python 复制代码
# 下面代码可以用来读取幻灯片对象中的文本内容数据作其他操作,如配合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]

python 复制代码
for placeholder in prs.slides[0].placeholders:
    placeholder.text = '设置占位符测试'  # 设置占位符内容
    print(placeholder.text)  # 获取占位符内容
获取标题占位符内容
python 复制代码
title = prs.slides[2].shapes.title  # 获取标题占位符对象.title
title.text = '主题占位符'

文本框设置

添加文本框.add_textbox

add_textbox(self, left: Length, top: Length, width: Length, height: Length)

python 复制代码
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)
文本内容、文本边框边距及对齐方式设置
python 复制代码
tf = text_box.text_frame  # 设置文本框文本内容样式对象
python 复制代码
# 文本框添加文本内容
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  # 文本框的文字自动对齐(超出自动换行设置)
文本框背景色设置
python 复制代码
ft = text_box.fill
ft.solid()  # 设置纯色填充
ft.fore_color.rgb = RGBColor(247, 150, 70)  # 设置背景颜色值,不设置时纯色填充的颜色为黑色
文本框边框样式设置
python 复制代码
ln = text_box.line
ln.color.rgb = RGBColor(255, 100, 150)  # 设置文本框边框颜色
ln.width = Cm(.2)  # 设置文本框边框粗细值

段落设置

添加段落需要使用text_frame方法,可以对占位符对象,文本框对象等添加段落。(只有文本框中添加的段落才支持设置字体样式)

python 复制代码
paragraph = prs.slides[3].placeholders[0]  # 给占位符添加段落
text_frame = paragraph.text_frame
text_frame.add_paragraph()  # 添加段落
text_frame.text = '冯夷鸣鼓,女娲清歌。腾文鱼以警乘,鸣玉鸾以偕逝。六龙俨其齐首,载云车之容裔,鲸鲵踊而夹毂,水禽翔而为卫。'  # 添加段落文本内容
文本框段落字体样式设置
python 复制代码
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  # 段落等级
相关推荐
重生之我是数学王子几秒前
QT基础 编码问题 定时器 事件 绘图事件 keyPressEvent QT5.12.3环境 C++实现
开发语言·c++·qt
Ai 编码助手2 分钟前
使用php和Xunsearch提升音乐网站的歌曲搜索效果
开发语言·php
学习前端的小z6 分钟前
【前端】深入理解 JavaScript 逻辑运算符的优先级与短路求值机制
开发语言·前端·javascript
神仙别闹13 分钟前
基于C#和Sql Server 2008实现的(WinForm)订单生成系统
开发语言·c#
XINGTECODE14 分钟前
海盗王集成网关和商城服务端功能golang版
开发语言·后端·golang
zwjapple31 分钟前
typescript里面正则的使用
开发语言·javascript·正则表达式
小五Five32 分钟前
TypeScript项目中Axios的封装
开发语言·前端·javascript
前端每日三省34 分钟前
面试题-TS(八):什么是装饰器(decorators)?如何在 TypeScript 中使用它们?
开发语言·前端·javascript
好看资源平台44 分钟前
网络爬虫——综合实战项目:多平台房源信息采集与分析系统
爬虫·python
凡人的AI工具箱1 小时前
15分钟学 Go 第 60 天 :综合项目展示 - 构建微服务电商平台(完整示例25000字)
开发语言·后端·微服务·架构·golang