python-pptx库处理ppt代码示例

news/2024/7/6 0:21:46 标签: python, powerpoint, ppt, jupyter, 开发语言

python-pptx模块是一个Python库,用于创建和更新Microsoft PowerPoint (.pptx)文件。

  • 官网地址:https://python-pptx.readthedocs.io/en/latest/
  • GITHUB: https://github.com/scanny/python-pptx
  • PYPI: https://pypi.org/project/python-pptx

安装python-pptx第三方扩展

python">pip install python-pptx

pptx_12">一、 读取pptx中的内容

1.1 PPT的结构说明

在使用python操作PPT之前,首先应该清楚PPT的结构,这个对于之后代码的编写很有帮助。

在这里插入图片描述

1.2 PPTX提取演示文稿内容

我们可以使用Presentation()函数获取一个PPTX文件:

python">from pptx import Presentation

prs = Presentation("CEMS架构和中间件.pptx")

Presentation.slides获取获取所有幻灯片,文档共有27页,有27个slide

python">
print(len(prs.slides))
for slide in prs.slides:
    print(slide)

在这里插入图片描述
获取形状shape

python"># 输出第2张幻灯片的shapes 共有3个shape,标题,左侧图片,右侧文本
shapes = prs.slides[1].shapes
len(shapes),shapes
python"># 输出结果
(3, <pptx.shapes.shapetree.SlideShapes at 0x20c08052390>)

文本内容提取,has_text进行判断,也可通过MSO_SHAPE_TYPE判断

python">
from pptx.enum.shapes import MSO_SHAPE_TYPE


for shape in shapes:
  if shape.has_text_frame:
      text_frame = shape.text_frame
      print(text_frame.text)
  
   # 也可以通过下面这种方式,更好判断每个shape的类型       
  if shape.shape_type ==  MSO_SHAPE_TYPE.TEXT_BOX:
      text_frame = shape.text_frame
      print(text_frame.text)

读取到ppt内容并输出
在这里插入图片描述

获取Shape中的某个Paragraph段落

python">text_frame = shape.text_frame

for paragraph in text_frame.paragraphs:
    print(paragraph.text)

在这里插入图片描述
显示第二张幻灯片的图片内容,这里用到了cv2,numpy,matplotlib

python">pip install numpy
pip install opencv-python
pip install matplotlib
python">import cv2
import numpy as np
import matplotlib.pyplot as plt

shape = shapes[1]

if shape.shape_type == MSO_SHAPE_TYPE.PICTURE:
    # shape.image.blob获取图片的blog信息
    # 通过numpy的frombuffer转化
    data = np.frombuffer(shape.image.blob,dtype=np.uint8)
    # 将blob转换为图像
    img = cv2.imdecode(data, cv2.IMREAD_COLOR)
    plt.imshow(img)     

在这里插入图片描述

pptx_104">二、 创建新pptx文件

2.1 PPT基本概念介绍

  • 幻灯片模板及占位符的概念
    在这里插入图片描述
  • 什么是版式
    我们在新增一页幻灯片的时候,会提示我们选择版式。pptx库中的slide_layouts列表数量和power point基础版式数量对应,格式对应。比如6为空模版,7为左侧图形,右侧文本的版式。
    在这里插入图片描述
    prs.slide_layouts[]传入0表示是第一个版式,传入1表示第二个版式,以此类推一直到结束48。

2.2 PPTX创建新的演示文稿代码

python">
from pptx import Presentation

prs = Presentation()

#布局样式0-47
layout = prs.slide_layouts[0]

# 添加第一页幻灯片
slide = prs.slides.add_slide(layout)

title = slide.shapes.title

title.text = "这是第一个幻灯片"

subtitle = slide.placeholders[1]
subtitle.text = "正文框"

# 添加第2个幻灯片
layout = prs.slide_layouts[1]
slide = prs.slides.add_slide(layout)

title = slide.shapes.title
title.text = "这是第二个幻灯片"

body = slide.placeholders
body[1].text = "第二行正文"


# 添加第3个幻灯片
layout = prs.slide_layouts[2]
slide = prs.slides.add_slide(layout)
body = slide.placeholders
body[0].text = "这是第三个幻灯片"
body[1].text = "第三行正文"

prs.save("new.pptx")

在这里插入图片描述

通过段落添加内容,并设置相应样式

python">
from pptx import Presentation
from pptx.util import Pt
from pptx.enum.text import PP_ALIGN


prs = Presentation()

#布局样式0-47
layout = prs.slide_layouts[0]
slide = prs.slides.add_slide(layout)
#每个layout中仅有2个占位符
body = slide.placeholders

body[0].text = "这是一个正文"
body[1].text = "第二行正文"

# 正文部分增加段落
paragraph = body[1].text_frame.add_paragraph()
paragraph.text ="要么做一个优秀的人,要么做一个懂事的人," \
                "要在这世上混,没一点本事和能力还真不行的。"
# 左对齐
paragraph.alignment = PP_ALIGN.LEFT
# 粗体
paragraph.font.bold =  True
# 斜体
paragraph.font.itatic =  True
# 字体大小
paragraph.font.size =  Pt(15)
# 下划线
paragraph.font.underline = True

prs.save('shape.pptx')

在这里插入图片描述

2.3 通过母版批量生成

通过母版进行批量生成,新创建一个tpl.pptx的文件,格式如下:

在这里插入图片描述
这样我们通过爬虫,数据库等数据源获取数据,通过模版生成ppt格式,连同数据和格式写入最终ppt中了。

python">
from pptx import Presentation

prs = Presentation('tpl.pptx')

bzs = [
        {"title":"标题1","img":r"E:\美女照片\4K动态壁纸\4K动态壁纸 (1).png","content":"壁纸3"},
        {"title":"标题2","img":r"E:\美女照片\4K动态壁纸\4K动态壁纸 (2).png","content":"壁纸3"}
       ]

for bz in bzs:
    tpl_num = len(prs.slide_layouts)
    # 上面的板式是7
    slide = prs.slides.add_slide(prs.slide_layouts[7])
    body = slide.shapes.placeholders
    for index,shape in enumerate(body):
        if index == 0:
            shape.text = bz["title"]
        if index == 1:
            shape.insert_picture(bz['img'])
        if index == 2:
            shape.text = bz["content"]
            
# 保存壁纸的ppts            
prs.save("bz.pptx")

在这里插入图片描述
在这里插入图片描述


http://www.niftyadmin.cn/n/5229929.html

相关文章

chrome vue devTools安装

安装好后如下图所示&#xff1a; 一&#xff1a;下载vue devTools 下载链接https://download.csdn.net/download/weixin_44659458/13192207?spm1001.2101.3001.6661.1&utm_mediumdistribute.pc_relevant_t0.none-task-download-2%7Edefault%7ECTRLIST%7EPaid-1-13192207…

【Lustre相关】应用部署-03-Lustre集群部署实践(软raid方案)

文章目录 一、前言1、硬件配置2、组网拓扑3、总体方案 二、软件安装三、集群部署1、配置多路径2、配置高可用集群3、配置zpool4、部署lustre5、配置Lustre角色高可用6、配置Lustre状态监控6.1、Lustre网络状态监控6.2、Lustre集群状态监控6.3、配置优化6.3.1、设置故障恢复不回…

json序列化时Long类型转换为String类型

将java对象序列化为json对象返回数据给前端时&#xff0c;js处理Long类型数据时会丢失精度&#xff0c;为了解决这种问题&#xff0c;往往给前端返回的Long类型数据要序列化为String类型&#xff0c;前面文章介绍过在springboot中的配置方式 json对象中对Long类型和String类型相…

030 - STM32学习笔记 - ADC(四) 独立模式多通道DMA采集

030 - STM32学习笔记 - ADC&#xff08;四&#xff09; 独立模式多通道DMA采集 中断模式和DMA模式进行单通道模拟量采集&#xff0c;这节继续学习独立模式多通道DMA采集&#xff0c;使用到的引脚有之前使用的PC3&#xff08;电位器&#xff09;&#xff0c;PA4&#xff08;光敏…

open3d 显示人体面部区域

1.使用cv2读取彩色图像和深度图像 2.深度图像转点云 3.只保留面部区域的点云 4.显示 import cv2 import numpy as np import open3d def depth2xyz(depth_map,depth_cam_matrix,flattenFalse,depth_scale1000): fx,fy depth_cam_matrix[0,0],depth_cam_matrix[1,1] …

EsayExcel的使用

EsayExcel的使用 引入依赖 <dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>3.1.1</version> </dependency>类属性中的注解 # 默认下标从0开始&#xff0c;index可以不…

深眸科技加速进入深度学习赛道,以开创思维引领制造企业智慧升级

在工业4.0的浪潮下&#xff0c;工业企业亟需向高端化、自动化、智能化转型&#xff0c;以应对大批量精密产品的质量控制需求。这些产品对质量有着极高的要求&#xff0c;单凭传统机器视觉检测技术较难满足。 同时&#xff0c;随着大数据的不断涌现及计算机算力的稳步提升&…

(六)基于高尔夫优化算法GOA求解无人机三维路径规划研究(MATLAB代码)

一、无人机模型简介&#xff1a; 单个无人机三维路径规划问题及其建模_IT猿手的博客-CSDN博客 参考文献&#xff1a; [1]胡观凯,钟建华,李永正,黎万洪.基于IPSO-GA算法的无人机三维路径规划[J].现代电子技术,2023,46(07):115-120 二、高尔夫优化算法GOA简介 高尔夫优化算法…