【Python3】通过模板实现PPT的自动生成

您所在的位置:网站首页 如何增加ppt主题模板 【Python3】通过模板实现PPT的自动生成

【Python3】通过模板实现PPT的自动生成

2024-07-09 23:06| 来源: 网络整理| 查看: 265

去年第一次接触了pptx-python,大致看了一下,没有做深入的探索。直到最近朋友有一堆ppt要做,因为样式比较单一,量有很大,想起来这个python包正好派上用场,花了一天的时间看了官方文档,无奈这英语水平还要继续努力啊。现在将所看所理解的整理如下:

PPTX官方文档

建立和打开一个pptx

最新更新的文档包已经可以支持建立和打开pptx,形式如下

presentation的基本模块 from pptx import Presentation prs = Presentation() slide_1 = prs.slides.add_slide(prs.slide_layouts[0]) print(prs.slide_height)#高度 print(prs.slide_layouts)#布局 print(prs.slide_master)#主布局 print(prs.slide_width)#宽度 print(prs.slides)#幻灯片

layouts有默认有多种,可以自己预先定义,推荐还是自己做好,可以通过slide_height和silde_width来查看幻灯片大小。

获取presentation的信息

可以通过core_properties这个模块查看文档信息,对于文档最后的整理和分类有一定作用。

from pptx import Presentation prs = Presentation('Crew Drill 4.pptx') core = prs.core_properties print(core.author) print(core.category) print(core.comments) print(core.content_status) print(core.created) print(core.identifier) print(core.keywords) print(core.language) print(core.last_modified_by) print(core.last_printed) print(core.modified) print(core.revision) print(core.subject) print(core.title) print(core.version) slides模块

slides就是ppt里面的幻灯片,他是一个集合,可以通过循环等方式取到单个slide操作,也可以添加新的幻灯片和获取幻灯片的信息。

from pptx import Presentation #slides 是所有幻灯片的集合,可以用列表的形式表示 #slides功能有:get(slide_id),add_slide(slide_layout),index(slide) prs = Presentation('Crew Drill 4.pptx') print(prs.slides.get(1))#返回slide identified,搞不懂这是什么识别码在哪里 slide_1 = prs.slides.add_slide(prs.slide_layouts[0])#增加幻灯片 slide_3 = prs.slides[0]#列表分解 print(prs.slides.index(slide_3))#取index 单个slide和layouts操作 #slide模块 from pptx import Presentation prs = Presentation('Crew Drill 4.pptx') slide_1 = prs.slides[0] #background搞不懂 print(help(slide_1.background)) print(slide_1.background) print(slide_1.element) print(slide_1.follow_master_background) print(slide_1.has_notes_slide) print(slide_1.name) print(slide_1.notes_slide) print(slide_1.placeholders) print(slide_1.shapes) print(slide_1.slide_id) print(slide_1.slide_layout) #slidelayouts 模块 from pptx import Presentation prs = Presentation() slide_layout_4 = prs.slide_layouts[4] print(slide_layout_4.placeholders)#获取此布局中的占位符 print(slide_layout_4.shapes)#获取此布局中的形状 print(slide_layout_4.slide_master)#获取此布局中的master母板 print(slide_layout_4.used_by_slides)#这个不知道是啥

slide和layouts模块用的最多的主要还是获取slide的shape,然后进行操作,作者试了一下如果大量工作可以做循环,但是ppt中命名很混乱,建议自己先做母板调整后再获取会更高效。

shapes模块

shapes模块应该是最重要,使用最频繁的模块了 。slideshapes模块.shapes包含:

auto shape:预设的形状,各种图形,包括文本框 picture:图片一旦添加就是一种特殊的auto shape graphic frame:指一些table,chart和艺术画 group shape:组合图形 line/connector:连接符,例如直线,曲线,折现等等 content part:其他的内容,不知道什么意思

presentation提供了多种单位。presentation使用的是EMU 1 inche = 914400 EMU python提供了多种单位供使用,比如inches,Pt,Cm

from pptx import Presentation from pptx.chart.data import CategoryChartData from pptx.enum.shapes import MSO_AUTO_SHAPE_TYPE from pptx.enum.shapes import MSO_CONNECTOR_TYPE from pptx.enum.chart import XL_CHART_TYPE from pptx.util import Inches,Cm,Pt from pptx.enum.text import PP_PARAGRAPH_ALIGNMENT

shape添加一个图表,需要导入pptx.chart.data和pptx.enum.chart模块 shape添加一个auto-shape,导入 MSO_AUTO_SHAPE_TYPE shape添加connector,导入MSO_CONNECTOR_TYPE shape使用单位,导入pptx.util模块 shape文本对齐,是使用PP_PARAGRAPH_ALIGNMENT

prs = Presentation('hello_ppt.pptx') slide_1 = prs.slides[0] from pptx.dml.color import RGBColor #add_chart添加图表功能 type = XL_CHART_TYPE.COLUMN_CLUSTERED x,y,cx,cy = Inches(2),Inches(2),Inches(6),Inches(4.5) chart_data = CategoryChartData() chart_data.categories = ['East','West','Midwest'] chart_data.add_series('Series 1',(19.2,21.4,16.7)) slide_1.shapes.add_chart(type,x,y,cx,cy,chart_data)

添加一个图表

#add_connector添加连接线功能 connector_type = MSO_CONNECTOR_TYPE.ELBOW connector = slide_1.shapes.add_connector( connector_type,Cm(2),Cm(2),Cm(10),Cm(10) )

添加一个连接线

#add_picture插入图片功能 image_file = 'picture_1.jpg' left,top = Cm(0),Cm(0) width,height = Cm(25.4),Cm(19.0) picture = slide_1.shapes.add_picture(image_file,left,top,width,height) #增加一个auto shape slide_1.shapes.add_shape( MSO_AUTO_SHAPE_TYPE.ROUNDED_RECTANGLE, Cm(2),Cm(2),Cm(2),Cm(2) ) # 长度单位换算 length = Inches(1) print(length) print(length.inches,length.cm,length.pt) fill = slide_1.shapes[2].fill fill.solid()#实心填充 fill.fore_color.rgb = RGBColor(255,0,0)

shape的填充现在貌似还不是很完善,填充之前要选择填充的类型

for shape in slide_1.shapes: print(shape.is_placeholder) print(slide_1.placeholders[0].name) print(slide_1.shapes.title) subtitle = slide_1.placeholders[1].placeholder_format.type # 添加文本 text_frame = slide_1.shapes[0].text_frame text_frame.clear() text_frame.paragraphs[0].text = 'hello_world'#paragraphs是一个truple,现在没有元素,填写第一个元素,所有要用0 text_frame.add_paragraph().text = 'hello_hangzhou'#add_paragraph是text_frame的,填完就是paragraph的第2个元素 text_frame.paragraphs[0].add_run().text = 'fuck the world' print(text_frame.paragraphs[1].text) print(text_frame.paragraphs[0].text) ppt_title = slide_1.shapes[0].text_frame sub_title = slide_1.shapes[1].text_frame ppt_title.clear() sub_title.clear() ppt_title.paragraphs[0].text = '办公自动化' sub_title.paragraphs[0].text = 'python-pptx使用详解' #段落编辑 ppt_title.paragraphs[0].alignment = PP_PARAGRAPH_ALIGNMENT.LEFT sub_title.paragraphs[0].alignment = PP_PARAGRAPH_ALIGNMENT.CENTER #字体编辑 ppt_title.paragraphs[0].font.name = '微软雅黑' ppt_title.paragraphs[0].font.size = Pt(70) ppt_title.paragraphs[0].font.bold = True ppt_title.paragraphs[0].font.italic = True ppt_title.paragraphs[0].font.color.rgb = RGBColor(255,0,0) sub_title.paragraphs[0].font.name = '微软雅黑' sub_title.paragraphs[0].font.size = Pt(40) sub_title.paragraphs[0].font.bold = False sub_title.paragraphs[0].font.italic = False sub_title.paragraphs[0].font.color.rgb = RGBColor(255,255,0) #保存ppt prs.save('hello_ppt.pptx')


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3