python创建ppt_ppt自动化创建工具——python-pptx

news/2024/11/28 7:29:44/

上周,一朋友找我帮忙将他手里的练习题word文档做成ppt,要有动画效果,即按一下才显示答案那种,他要在课堂上讲。这不是简单的PPT编辑吗,我随口就答应了。等我打开他发过来的文档之后,我有点蒙了:都是些选择题,单选多选都有,数量太多,有几百题。。。所幸编排得挺好,比较规整,我马上去找下有没有ppt的自动生产工具,还好找到了python-pptx (https://github.com/scanny/python-pptx)。它支持以下一些功能(具体参见说明文档):读取/创建pptx文件,创建/编辑幻灯片(slide),文本框,表格,图片,图表等,但还未能支持动画(这个后面用别的方法)。需要注意的是模块只支持pptx为后缀的格式(Office2003之后的新格式)。模块安装:pip install python-pptx

一、用python创建ppt

复杂的我用不上,我需要的功能有:1、创建空slide;2、 在固定的几个位置插入固定大小的文本框,并填上相应的文本;3、文本的字体大小自适应以避免超出文本框。

pptx的文档结构是pptx->slide->shape(text frame)->paragraph->run(一段话中的任意部分),所以程序处理也差不多按着这个顺序来。举个例子:

from pptx import Presentation  #导入模块

from pptx.util Pt  # 导入字体大小转换函数

SW, SH = 9144000, 6858000  #幻灯片长和宽的参数,单位未知

prs = Presentation()  #初始化一个空pptx文档

blank_slide_layout = prs.slide_layouts[6]  #布局选用空页

slide = prs.slides.add_slide(blank_slide_layout)  #用空页布局创建一页幻灯片

left, top, width, height = 0.1*SW, 0.1*SH, 0.8*SW, 0.5*SH  # 待插入的文本框位置/大小参数

tf = slide.shapes.add_textbox(left=left,top=top,width=width,height=height).text_frame

tf.paragraphs[0].text = "第一段"  # 插入第一段文本

p = tf.add_paragraph()  # 插入第二段文本

p.text = "第二段"

tf.fit_text(max_size=Pt(40))  # 自动设置文本字体大小,原模块不支持中文,需要更改

prs.save()  # 保存文档

二、文本字体大小自适应(fit_text())

就这样,很方便的就能用python创建一个pptx。但模块作者偷懒,并不支持设置中文的文本大小自动适应,稍微长点的文字就会抛出异常。查看源代码,原因在于site-packages/pptx/text/layout.py文件中class _LineSource(object)的__iter__(self)函数,这个迭代器用于产生划分一行长度的各种可能,得到行长,行数和字体大小几个参数计算是否能在文本框中不越界(程序采用二叉树的算法确定最大字体)。它的划分方法如图1,仅用空字符(包括空格 \t \n)划分,就算用来划分英文,也不够科学。汉字不用空格分隔,所以不能处理

图1 原来的代码

所以我改成了如图2这样,即每个汉字是一个词,遇到换行符就必须结束当前行的划分。汉字就能正常自适应大小了。

图2 修改代码

三、批量产生动画

最后,如何在每页ppt中批量插入动画? 模块作者两年前就说以后会支持,但现在还不见影。只能找其他方法了。一个ppt文件其实是一个zip压缩包,改文件后缀解压出来是图3这样的文件结构,其中slideN.xml就是第N页幻灯片的描述文件。

图3 pptx的目录文件结构

我先在ppt的第一页加上需要的动画效果,保存然后改后缀解压,用beyond Compare看看第一页加了动画的页面和后面几页的区别。由于文件里没有空格没有换行符,肉眼比较难看,所以又用BeautifulSoup的prettify()方法重新整理一下格式,再比较。代码如下:

soup = BeautifulSoup(open('slide1.xml').read(), 'xml')

with open('p1.xml', 'w') as fw:

fw.write(soup.prettify())

图4

如图4,那段多出来的东西就是控制动画的。那后面就好办了,在每个slideN.xml末尾从开始都替换成控制动画的这部分内容就行了。更改后重新压缩回zip文件(注意是选择_rels, [Content_Types].xml, docProps, ppt一起右键压缩,根目录必须是这个,或者winrar窗口打开,把修改后的文件拖进去替换),用powerpoint打开,提示要修复,自动修复后另存为就是我想要的目标文件了。


http://www.ppmy.cn/news/842344.html

相关文章

PPT里面如何插入斜体文字

工作的时候经常会用到PPT文档,是一款非常强大的文本软件,如何设置文档文本文字界面为斜体,今天小编给大家介绍一下。 1,首先打开你所要操作的PPT文档。 2,点击菜单栏中的“主页”菜单里面的“ 斜体” 。 3,然后输入你…

文字内容自动生成PPT

第一次需求: 输入一段文字;识别文字标题;根据文字内容自动将文字分成段落;生成PPT文件;将文字标题放入PPT文件的第一页;将文字内容按段落内容放置在PPT 文件的不同页面上 ;将文字标题作为PPT文…

ppt怎么加注解文字_ppt幻灯片怎么给图片添加注释?

ppt幻灯片怎么给图片添加注释? 2018-03-16 21:34 责任编辑:砕月 导读 / 如果我们想要给一个图片添加相关的文档时,我们除了用专门的图片工具之外,我们也可以采用ppt软件对图片进行注释。 软件名称:PowerPoint 2013 官方完整版(32…

计算机ppt闪耀效果在哪里,ppt怎样制作文字闪烁效果

对于经常使用ppt的人来说,都知道怎样制作简单的文字闪烁动画效果,但对于初学者来说,可能就不知道怎样操作了,下面就让学习啦小编告诉你ppt怎样制作文字闪烁效果 的方法。 ppt制作文字闪烁效果的方法 1、在计算机桌面双击PowerPoin…

计算机ppt文字1是什么原因,ppt让答案一个个出现,ppt让文字一个个出现

在使用Windows 10工作时会遇到形形色色的问题,比如开机发现无法连接网络。那么如何进行故障排除呢?下面小编与你分享具体步骤和方法。 工具/材料 Windows 10操作系统 操作方法 01启动Windows 10操作系统,如图所示。点击任务栏搜索框&#xff…

# PPT进阶——文字环绕

#<center>作者&#xff1a;21级 郭锴</center> #<center>审核&#xff1a;20级 王圻铭</center> 1.首先&#xff0c;输入一行文字&#xff0c;在文本效果中找到【转换】&#xff0c;接着在【弯曲】中找到【逆时针】&#xff0c;然后调节控点位置&…

ppt文字提取转word

把PPT转Word有多种方法&#xff0c;一种为复制法&#xff0c;第二种为发送法&#xff0c;第三种为中间转换法&#xff0c;第四种为用宏VBA快速转换法。除发送法外&#xff0c;其它三种方法只能转换文字&#xff0c;不能转换背景图片&#xff1b;而第一四种方法不能保留原格式&a…

ppt竖排文字方向HTML 5,PPT文本框中文字方向的设置方法是什么

在PPT里面插入一个图形或者文本框&#xff0c;输入文字都是默认的自左向右&#xff0c;如要输入类似对联那种样式的文字&#xff0c;又该如何呢?以下是学习啦小编为您带来的关于PPT文本框中文字方向的设置&#xff0c;希望对您有所帮助。 PPT文本框中文字方向的设置 1 启动Pow…