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  # 段落等级
相关推荐
言、雲8 分钟前
从tryLock()源码来出发,解析Redisson的重试机制和看门狗机制
java·开发语言·数据库
汪洪墩37 分钟前
【Mars3d】设置backgroundImage、map.scene.skyBox、backgroundImage来回切换
开发语言·javascript·python·ecmascript·webgl·cesium
云空42 分钟前
《QT 5.14.1 搭建 opencv 环境全攻略》
开发语言·qt·opencv
Anna。。1 小时前
Java入门2-idea 第五章:IO流(java.io包中)
java·开发语言·intellij-idea
我曾经是个程序员1 小时前
鸿蒙学习记录
开发语言·前端·javascript
爱上语文1 小时前
宠物管理系统:Dao层
java·开发语言·宠物
程序员shen1616112 小时前
抖音短视频saas矩阵源码系统开发所需掌握的技术
java·前端·数据库·python·算法
小老鼠不吃猫2 小时前
力学笃行(二)Qt 示例程序运行
开发语言·qt
长潇若雪2 小时前
《类和对象:基础原理全解析(上篇)》
开发语言·c++·经验分享·类和对象