当前位置: 首页 > article >正文

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  # 段落等级

http://www.kler.cn/a/379024.html

相关文章:

  • andrular输入框input监听值传递
  • SpringCloud Alibaba-05 Seata分布式事务处理
  • 基于深度学习的数据安全与可追溯性增强
  • axios竟态问题
  • Docker使用复习(11.3)
  • Windows的MySQL开机自动启动问题
  • 【python】OpenCV—findContours(4.5)
  • 【原创分享】JVM服务调优实战
  • Vue+element-ui实现网页右侧快捷导航栏 Vue实现全局右侧快捷菜单功能组件
  • selenium自动搭建
  • 数字化装配助力柔性制造与快速换型,驱动效率飞跃
  • chrome编辑替换js文件的图文教程
  • STL--哈希
  • BeanDefinition体系架构(待...)
  • 大数据挖掘和数据挖掘有什么不一样?
  • (C#面向初学者的 .NET 的生成 AI) 第 2 部分-什么是 AI 和 ML?
  • Nginx 实现动态封禁IP,详细教程来了
  • Linux特种文件系统--tmpfs文件系统
  • yarn : 无法加载文件,未对文件 进行数字签名。无法在当前系统上运行该脚本。
  • [Android]从FLAG_SECURE禁止截屏看surface
  • 雷电模拟器ls内部操作adb官方方法
  • VScode + PlatformIO 了解
  • WMV怎么转MP4?五个简单好用的视频格式转换方法!
  • Faces in Things数据集: 由麻省理工学院、微软等联合发布,探索人类视觉错觉的新里程碑
  • 每日OJ题_牛客_最长上升子序列(二)_贪心+二分_C++_Java
  • 做一个能适配「手机」的网站需要注意什么