赣州网站制作,中国采购网官方网站,wordpress折腾,企业网站源码简约简介
python-pptx是一个用于创建、读取和更新PowerPoint#xff08;.pptx#xff09;文件的python库。 典型的用途是根据动态内容#xff08;如数据库查询、分析数据等#xff09;#xff0c;将这些内容自动化生成PowerPoint演示文稿#xff0c;将数据可视化#xff0c…简介
python-pptx是一个用于创建、读取和更新PowerPoint.pptx文件的python库。 典型的用途是根据动态内容如数据库查询、分析数据等将这些内容自动化生成PowerPoint演示文稿将数据可视化方便查看 我们也可以用它做办公自动化定义一套模板然后根据给出的内容批量生成PPT文件大大提高我们的办公效率
Python-pptx的Github地址 https://github.com/scanny/python-pptx 开发文档 https://python-pptx.readthedocs.io/en/latest/ 安装python-pptx pip install python-pptx 本文使用的版本为0.6.21
使用python-pptx创建新的PPT
生成一个全新的PPT文件这种方式适用于所有样式都是由代码来控制的场景 幻灯片效果 实现以上效果的代码
from pptx import Presentation# 创建一个新的 Presentation 对象
prs Presentation()
# 获取一个包含主标题和副标题的幻灯片版式
title_slide_layout prs.slide_layouts[0]
# 将幻灯片加入到PPT中
slide prs.slides.add_slide(title_slide_layout)
# 获取主标题
title slide.placeholders[0]
# 获取副标题
subtitle slide.placeholders[1]title.text Hello, World!
subtitle.text python-pptx create it
# 保存创建的PPT文件
prs.save(G:/simple_ppt/test/test1.pptx)上例中的prs.slide_layouts[0] 获取幻灯片的版式幻灯片的版式共有11个如下所示 从左到右依次是slide_layouts[0]、slide_layouts[1] 一直到 slide_layouts[10]通过对应的下标即可获取对应的幻灯片版式 Tips 上面代码中的slide prs.slides.add_slide(title_slide_layout) 即prs.slides 代表的是当前PPT中所有幻灯片的集合通过add_slide 添加一张幻灯片后拿到的slide 后续针对这个slide 的各种操作也就是单张幻灯片的操作 修改幻灯片大小
1、直接通过slide_width和slide_height指定
from pptx.util import Cmprs Presentation()
prs.slide_width Cm(33.85)
prs.slide_height Cm(19.02)2、通过模板指定 可以先自定义一个指定了宽高的空白页PPT模板创建Presentation对象时引用它后续创建的幻灯片就能继承到对应的宽高大小
prs Presentation(G:/simple_ppt/test/template.pptx)创建文本
段落创建
想要在幻灯片中添加文本先要通过add_textbox创建一个文本框然后取得text_frame来进行操作
from pptx import Presentation
from pptx.util import Cmdef test_blog_text_add():prs Presentation()prs.slide_width Cm(33.85)prs.slide_height Cm(19.02)bullet_slide_layout prs.slide_layouts[6] # 空白版式slide prs.slides.add_slide(bullet_slide_layout)# 添加文本框tx_box slide.shapes.add_textbox(leftCm(2.58), topCm(1.16), widthCm(28), heightCm(2.36))tf tx_box.text_framep0 tf.paragraphs[0]p0.text 这是第一行段落p1 tf.add_paragraph()p1.text 这是新增的第二行段落run p1.add_run()run.text 。第二行结尾直接添加文字prs.save(G:/simple_ppt/test/blog_test.pptx)生成效果如下 Tips: 上面代码中的tx_box slide.shapes.add_textbox(… slide.shapes代表的是当前幻灯片中所有元素的集合如文本框、图片、图标、视频等等可框选的东西都是shapes所以若要添加什么东西也是通过shapes.add_xxx的方式来实现 文本样式添加
一、自动换行
如果我们输入的文本大于文本框的长度时默认是不会换行的可以使用tf.word_wrap来指定自动换行
tf tx_box.text_frame
tf.word_wrap True二、文本布局样式
文本框中的文本默认是上方对齐可以使用tfvertical_anchor来指定文本的布局方式
from pptx.enum.text import MSO_ANCHORtf tx_box.text_frame
tf.vertical_anchor MSO_ANCHOR.MIDDLETOP将文本与文本框顶部对齐MIDDLE垂直居中文本BOTTOM将文本与文本框底部对齐
参考https://python-pptx.readthedocs.io/en/latest/api/enum/MsoVerticalAnchor.html 注意这个只是指定了文本垂直方向上的移动如想文本基于整个文本框居中需要指定段落的布局方式 设置文本段落布局可以通过设置p.alignment 的方式
from pptx.enum.text import MSO_ANCHOR, PP_ALIGNtf tx_box.text_frame
tf.vertical_anchor MSO_ANCHOR.MIDDLE
p0 tf.paragraphs[0]
p0.text 这是第一行段落
p0.alignment PP_ALIGN.CENTER效果如图 PP_ALIGN的参数有以下几个
CENTER居中对齐DISTRIBUTE在一行中从左到右均匀分布JUSTIFY每行都在页边空白处开始和结束并调整单词之间的间距使该行正好填满段落的宽度JUSTIFY_LOW在单词之间使用少量空格进行对齐LEFT默认的左对齐RIGHT右对齐THAI_DISTRIBUTE泰语分散对齐输入泰语时候指定
以上效果就不一一演示了自己尝试下选择合适的就行
参考 https://python-pptx.readthedocs.io/en/latest/api/enum/PpParagraphAlignment.html 三、文字样式修改
文字的字体、字号、加粗、斜体、下划线、颜色、超链接等这些样式通过font 来设置 参数较多直接上代码
from pptx import Presentation
from pptx.util import Cm, Pt
from pptx.dml.color import RGBColor
from pptx.enum.text import MSO_ANCHOR, PP_ALIGNdef test_blog_text_add():prs Presentation()prs.slide_width Cm(33.85)prs.slide_height Cm(19.02)bullet_slide_layout prs.slide_layouts[6]slide prs.slides.add_slide(bullet_slide_layout)# 添加文本框tx_box slide.shapes.add_textbox(leftCm(2.58), topCm(1.16), widthCm(28.47), heightCm(5))tf tx_box.text_frametf.word_wrap True # 自动换行tf.vertical_anchor MSO_ANCHOR.MIDDLE # 垂直居中p0 tf.paragraphs[0] # 第一行段落p0.alignment PP_ALIGN.CENTER # 设置段落文字居中p0.line_spacing 1.3 # 间距p0.font.name Arial Black # 字体p0.font.size Pt(40) # 字号p0.font.italic True # 斜体p0.font.bold True # 粗体p0.font.underline True # 显示下划线p0.font.color.rgb RGBColor(255, 0, 0) # 设置红色p0.text Hello World!p1 tf.add_paragraph() # 添加新段落p1.text 这是第二行段落run p1.add_run()run.text 。第二行结尾直接添加文字run.hyperlink.address https://www.baidu.com # 添加超链接prs.save(G:/simple_ppt/test/blog_test.pptx)生成的效果 注意当给一个文本添加了超链接后文字的颜色就无法指定了会变成图中这种蓝色加下划线的样式
段落间距设置
可通过line_spacing指定
p0.line_spacing 1.3文字大小自动改变
有时候我们要输入的文本太长而文本框区域有限此时可以指定文字的大小根据文本框的大小自动调整文字的大小
from pptx.enum.text import MSO_AUTO_SIZEtf tx_box.text_frame
tf.auto_size MSO_AUTO_SIZE.TEXT_TO_FIT_SHAPEMSO_AUTO_SIZE还有其它三个参数
NONE不进行任何自动调整文字可以超出文本框的边界SHAPE_TO_FIT_TEXT根据文字的内容自动调整文本框的宽度和高度这样可以保持文字的大小不变TEXT_TO_FIT_SHAPE根据文本框的大小自动调整文字的大小这样可以让文字完全填充文本框
参考 https://python-pptx.readthedocs.io/en/latest/api/enum/MsoAutoSize.html 文本层级设置
文字层级一般用来处理段落的缩进对内容进行层级管理通过level 来指定每个paragraph的level默认就是0
p2 tf.add_paragraph()
p2.text 第一层
p2.level 0p3 tf.add_paragraph()
p3.text 第二层
p3.level 1p4 tf.add_paragraph()
p4.text 第三层
p4.level 2效果如下
创建图片
使用add_picture 可以添加图片指定对应的坐标即可
img_path G:/simple_ppt/res/picture.png
slide.shapes.add_picture(img_path, leftCm(2.58), topCm(6.16), widthCm(8.3), heightCm(5.13))left和top表示图片左上角顶点分别距离幻灯片左边框和上边框的距离width和height表示图片的宽和高
创建视频或音频
添加视频使用add_movie
video_path G:/simple_ppt/res/movie.mp4
slide.shapes.add_movie(video_path, Cm(11.66), Cm(6.22), Cm(8.11), Cm(5.07), mime_typevideo/mp4)视频显示的时候不会自动获取视频里的画面作为预览图只会显示一个默认的喇叭图标若想要根据视频的画面来生成预览图可以借助OpenCV工具来获取视频帧存为图片然后通过poster_frame_image参数来指定
import cv2video_path G:/simple_ppt/res/movie.mp4
cap cv2.VideoCapture(video_path)
cap.set(cv2.CAP_PROP_POS_FRAMES, 0) # 设置要获取的帧
ret, frame cap.read()
cv2.imwrite(save_poster_temp, frame)
cap.release()slide.shapes.add_movie(video_path, Cm(11.66), Cm(6.22), Cm(8.11), Cm(5.07), mime_typevideo/mp4, poster_frame_imagesave_poster_temp)Python-pptx中并没有直接提供添加音频的方法不过其实音频也可以通过add_movie来指定只需要修改ime_type参数为audio/mp3
audio_path G:/simple_ppt/res/audio.mp3
slide.shapes.add_movie(audio_path, Cm(19.77), Cm(6.22), Cm(8.11), Cm(5.07), mime_typeaudio/mp3)效果如下
创建形状图形
Python-pptx中支持添加形状图形也就是下面这些 可通过add_shape来添加
from pptx.enum.shapes import MSO_SHAPEslide.shapes.add_shape(MSO_SHAPE.STAR_5_POINT, leftCm(28.83), topCm(6.87), widthCm(3.7), heightCm(3.7))STAR_5_POINT表示一个五角星更多形状参数可查看以下链接 https://python-pptx.readthedocs.io/en/latest/api/enum/MsoAutoShapeType.html#msoautoshapetype 形状图形的一些属性设置
shape slide.shapes.add_shape(MSO_SHAPE.STAR_5_POINT, leftCm(28.83), topCm(6.87), widthCm(3.7), heightCm(3.7))
shape.rotation 45 # 旋转图标45°
shape.shadow.inherit True # 是否取消倒影显示
shape.fill.solid() # 设置这个后才能通过下面的fore_color来设置颜色
shape.fill.fore_color.rgb RGBColor(255, 255, 0) # 修改填充颜色
shape.line.color.rgb RGBColor(255, 0, 0) # 修改边框颜色
shape.line.width Cm(0.1) # 修改边框宽度还可以通过dash_style来指定边框的线条样式
from pptx.enum.dml import MSO_LINEshape.line.dash_style MSO_LINE.DASH # 设置边框为虚线MSO_LINE其它参数
MSO_LINE.SOLID实线MSO_LINE.DASH短划线MSO_LINE.DASH_DOT点划线MSO_LINE.DASH_DOT_DOT双点划线MSO_LINE.LONG_DASH长划线MSO_LINE.LONG_DASH_DOT长点划线MSO_LINE.ROUND_DOT圆点线MSO_LINE.SQUARE_DOT方点线
五角星显示的效果 如果不想要图形的边框可以使用以下方法将边框指定为透明
shape.line.fill.background()创建幻灯片背景
可以通过slide的background来指定纯色背景
bg slide.background
bg.fill.solid()
bg.fill.fore_color.rgb RGBColor(219, 238, 244)python-pptx库并没有直接提供设置图片作为幻灯片背景的方法但可以通过将图片设置为铺满整个幻灯片来达到同样的效果
img_path G:/bg_image.png
slide.shapes.add_picture(img_path, Cm(0), Cm(0), widthprs.slide_width, heightprs.slide_height)slide_width和slide_height获取的分别是整张幻灯片的宽和高
这里要注意图片的层级问题由于没有提供设置图片层级的方法所以作为背景的图片应该放在构建幻灯片的第一位
纯色背景效果
创建幻灯片备注信息
幻灯片底部的备注信息在分屏预览时可用于提示演讲人更详细的幻灯片内容细节 通过has_notes_slide来判断幻灯片是否有备注通过以下代码可以获得幻灯片的备注信息
if slide.has_notes_slide:text_frame slide.notes_slide.notes_text_frameprint(备注文本, text_frame.text)若想修改备注信息直接通过text指定即可
text_frame slide.notes_slide.notes_text_frame
text_frame.text 被修改的备注信息备注修改效果
总结
本篇文章介绍了如何使用python-pptx框架生成PPTX文件的方法通过以上学习可以掌握如何通过Python-pptx框架控制幻灯片大小、创建各种样式的文本、在幻灯片中添加图片、视频和音频添加形状图形及如何修改它的样式如何设置幻灯片的背景和备注信息等技能
下一篇将会介绍如何针对已有的PPT模板进行修改