【简洁明快】使用python读取数据建立pptx (python-pptx图文调整案例)

news2024/12/29 9:00:46

使用python自动读取数据建立pptx

  • 前言
  • 如何使用 Python 自动生成 PPTX
    • 第一步:安装所需库
    • 第二步:创建一个新的 PPTX
    • 第三步:添加幻灯片
    • 第四步:添加内容
      • 添加文本
      • 添加图片
      • 第五步:保存 PPTX
  • 图文实操案例(自动读取数据建立python文档)

前言

以下是简洁明快的使用python自动读取数据建立pptx的过程。

如果需要更详细的,可以看一下这个帖子:Python自动化办公:ppt文件操作教程 。这里面有详细的python-pptx的内容讲解,包括怎么插入自选形状,怎么填充等等

若想要快速掌握知识同时应用,下面这些已经足够

如何使用 Python 自动生成 PPTX

当我们在处理批量数据时 ,可以通过Python高效的自动生成PPTX。这里我们将使用python-pptx库来作为讲解。

第一步:安装所需库

首先使用pip来安装 python-pptx 库:

pip install python-pptx

如果数据中涉及到图片数据,还可以安装 Pillow 库:

pip install Pillow

第二步:创建一个新的 PPTX

  1. 通过 Presentation 类来创建一个新的 PPTX 对象(这个对象最终可以保存成一个或多个文件):
from pptx import Presentation

# 创建一个新的PPTX对象
prs = Presentation()

第三步:添加幻灯片

PPTX 文件往往由多个幻灯片组成。我们可以使用不同的布局来添加幻灯片:

# 添加一张空白幻灯片
slide_layout = prs.slide_layouts[5]  # 选择一个空白布局
slide = prs.slides.add_slide(slide_layout)

python-pptx中,以下是prs.slide_layouts[0]prs.slide_layouts[8]的布局
在这里插入图片描述

第四步:添加内容

你可以在幻灯片上添加文本框、图片等内容。:

添加文本

添加标题文本框

from pptx.util import Inches, Pt
from pptx.enum.text import PP_ALIGN

# 添加标题文本框
title_box = slide.shapes.add_textbox(Inches(0), Inches(0), prs.slide_width, Inches(1))
title_frame = title_box.text_frame
title_frame.text = "这是一个标题"
title_frame.paragraphs[0].font.bold = True
title_frame.paragraphs[0].font.size = Pt(32)
title_frame.paragraphs[0].alignment = PP_ALIGN.CENTER

添加图片

from PIL import Image

# 打开图片以获取尺寸
image_path = 'path/to/your/image.jpg'
with Image.open(image_path) as img:
    width, height = img.size
    aspect_ratio = width / height

# 根据宽高比调整图片大小
pic_height = Inches(2)
pic_width = pic_height * aspect_ratio

# 添加图片到幻灯片
left = Inches(0.5)
top = Inches(1.5)
slide.shapes.add_picture(image_path, left, top, height=pic_height)

第五步:保存 PPTX

完成所有幻灯片的添加后,我们可以保存 PPTX 文件:

prs.save('your_presentation.pptx')
print("PPTX 文件已保存为 'your_presentation.pptx'")

图文实操案例(自动读取数据建立python文档)

以下是我自动读取scene graph generationVG150groundtruth三元组和predicate三元组文件,并建立pptx的过程代码。

代码写的很清晰,大家看完我下面的流程,基本就对python制作pptx很熟练了。

import json
from pptx import Presentation
from pptx.util import Inches, Pt
from pptx.enum.text import PP_ALIGN
from PIL import Image

# 定义一个函数来加载JSON文件
def load_results_from_json(file_name):
    with open(file_name, 'r') as f:
        data = json.load(f)
    return data

# 加载保存的结果
results_file = 'SGG_Data.json'
results_data = load_results_from_json(results_file)

# 创建一个PPT对象
prs = Presentation()

# 定义一个函数来添加幻灯片
def add_slide(prs, image_id, gt_triplets, pred_triplets, image_path):
    slide_layout = prs.slide_layouts[5]  
    slide = prs.slides.add_slide(slide_layout)

    # 读取图片大小
    with Image.open(image_path) as img:
        width, height = img.size
        aspect_ratio = width / height

    # 根据图片的宽高比调整图片大小
    pic_height = Inches(2)  # 你可以根据需要调整这个值
    pic_width = pic_height * aspect_ratio

    # 添加图片
    left = Inches(0.5)
    top = Inches(1)
    pic = slide.shapes.add_picture(image_path, left, top, height=pic_height)

    # 添加标题
    title_box = slide.shapes.add_textbox(Inches(0), Inches(0), prs.slide_width, Inches(1))
    title_frame = title_box.text_frame
    title_frame.text = f"Image ID: {image_id}"
    title_frame.paragraphs[0].font.bold = True
    title_frame.paragraphs[0].font.size = Pt(32)  # 调整字体大小
    title_frame.paragraphs[0].alignment = PP_ALIGN.CENTER

    # 添加 Groundtruth Triplets
    left = Inches(0.5)
    top = Inches(3.5)
    width = Inches(4.5)
    height = Inches(4.5)
    textbox = slide.shapes.add_textbox(left, top, width, height)
    text_frame = textbox.text_frame
    text_frame.text = "Groundtruth data:"
    for triplet in gt_triplets:
        p = text_frame.add_paragraph()
        p.text = f"{triplet[0]} - {triplet[1]} - {triplet[2]}"
        p.font.size = Pt(12)  # 调整字体大小

    # 添加 Predicted Triplets
    left = Inches(5.5)
    top = Inches(3.5)
    width = Inches(4.5)
    height = Inches(4.5)
    textbox = slide.shapes.add_textbox(left, top, width, height)
    text_frame = textbox.text_frame
    text_frame.text = "Predicted data:"
    for triplet in pred_triplets:
        p = text_frame.add_paragraph()
        p.text = f"{triplet['triplets'][0]} - {triplet['triplets'][1]} - {triplet['triplets'][2]} "
        p.font.size = Pt(12)  # 调整字体大小

# 设置生成幻灯片的最大数量
max_slides = 10

# 遍历数据并添加幻灯片
for i, res in enumerate(results_data):
    if i >= max_slides:
        break
    image_id = res['Image ID']
    gt_triplets = res['Groundtruth data']
    pred_triplets = res['Predicted data']
    image_path = f"C:/我的文件/数据集/VG_100K/{image_id}"  # 假设图片存储在images目录下
    add_slide(prs, image_id, gt_triplets, pred_triplets, image_path)

# 保存PPT文件
prs.save('test_demo.pptx')
print("PPT file has been saved as 'test_demo.pptx'")

生成结果:
在这里插入图片描述

  1. 根据上面我提供的知识。我现在希望每页空白页面上,没有【单击此处添加标题】框。
    所以我把代码中的slide_layout = prs.slide_layouts[5] 改成slide_layout = prs.slide_layouts[6]
    在这里插入图片描述
    得到下面结果
    在这里插入图片描述
  2. 根据上面的知识,现在我希望pptx中的图片放大一点,所以我把下述代码进行如下修改:
    # 读取图片大小
    with Image.open(image_path) as img:
        width, height = img.size
        aspect_ratio = width / height

    # 根据图片的宽高比调整图片大小
    pic_height = Inches(2)  # 你可以根据需要调整这个值
    pic_width = pic_height * aspect_ratio

    # 添加图片
    left = Inches(0.5)
    top = Inches(1)
    pic = slide.shapes.add_picture(image_path, left, top, height=pic_height)

首先修改图片的大小,原来是高度为2Inch,现在修改为3Inch,然后通过ratio比例, 图片自动会放大。

    # 根据图片的宽高比调整图片大小
    pic_height = Inches(3)  # 你可以根据需要调整这个值
    pic_width = pic_height * aspect_ratio

在这里插入图片描述
之后我觉得图片大了,把图片往左边和上边挪一挪,所以对下述代码:

    # 添加图片
    left = Inches(0.5)
    top = Inches(1)
    pic = slide.shapes.add_picture(image_path, left, top, height=pic_height)

做如下修改:
left就是图片的左边距,我改成0.2Inch,往左边挪挪,top是上边距,我改成0.6Inch,往上边挪挪。)
在这里插入图片描述
之后我觉得字体小了,我把字体试着调大,那就需要调节下述代码:

    # 添加 Groundtruth Triplets
    left = Inches(0.5)
    top = Inches(3.5)
    width = Inches(4.5)
    height = Inches(4.5)
    textbox = slide.shapes.add_textbox(left, top, width, height)
    text_frame = textbox.text_frame
    text_frame.text = "Groundtruth data:"
    for triplet in gt_triplets:
        p = text_frame.add_paragraph()
        p.text = f"{triplet[0]} - {triplet[1]} - {triplet[2]}"
        p.font.size = Pt(12)  # 调整字体大小

下面这部分是Groundtruth data文本的左边距上边距,还有文本的。我们暂时不用调节(我把上边距往下调了一点点)

    left = Inches(0.5)
    top = Inches(3.8)
    width = Inches(4.5)
    height = Inches(4.5)

我们只需要调节字体即可(我将字体从12调节到14):

p.font.size = Pt(14)  # 调整字体大小

得到如下PPT
在这里插入图片描述
字体也调节成功。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2255317.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

三维扫描检测在汽车制造中的应用

三维扫描,通过先进三维扫描技术获取产品和物体的形面三维数据,建立实物的三维图档,满足各种实物3D模型数据获取、三维数字化展示、3D多媒体开发、三维数字化存档、逆向设计、产品开发、直接3D打印制造或辅助加工制造等一系列的应用。 三维扫描…

flyway执行sql遇到变量执行报错解决

前两天在公司使用flyway工具执行sql时,开发写的sql里面有变量,于是这个flyway工具不识别这个变量直接报错,不接着往下执行了。报错信息如下: flyway工具执行sql报错 information: No value provided for placeholder: ${ep1} 于是…

go语言的sdk项目搭建与git 操作标签tag并推送至远程仓库

在搭建 SDK 项目并结合 Git 操作标签(Tag)时,通常会涉及项目初始化、版本管理、Git 标签的创建与管理等内容。以下是一个完整的步骤指南,帮助您搭建 SDK 项目并学习如何使用 Git 标签。 ### 1. **搭建 SDK 项目** 首先&#xff…

机器学习算法的核心理论小总结

机器学习算法的核心在于利用数据构建模型以解决实际问题,而理解其理论基础是高效应用的关键。本文从机器学习的基本概念出发,详细解析监督学习中的几种经典算法,如逻辑回归、决策树和支持向量机(SVM)。同时&#xff0c…

3.STM32通信接口之SPI通信---SPI实战(W25Q64存储模块介绍)《精讲》

上一节介绍了SPI的通信过程和方法,接下来就要进行STM32与外围模块通信了,这个模块是一块非易失型存储芯片,能够提供8MB的存储空间。接下来跟着Whappy脚步,进行探索新大陆吧!【免费】W25Q64(中英文数据手册)资源-CSDN文…

第七节(1)、T型加减速转动【51单片机-TB6600驱动器-步进电机教程】

摘要:本节介绍步进电机T型加减速的控制方法,分2个小节,本小节主要内容为该控制方法的推导与计算,第二节对T型加减速进行了简化计算 一.加速阶段计算 1.1 计算时间与步数关系 根据位移公式可得: a n g l e 0 n ∗ s…

Python123_Python程序语言设计基础_Python基本图形绘制

turtle八边形绘制 ‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬ 描述 使用tur…

刘铁猛p3 C# 控制台程序引用System.Windows.Forms报错,无法引用程序集 解决方法

学习刘铁猛老师c#入门详解第三集 引用System.Windows.Forms时报错了 错误图例 为什么控制台应用添加项目引用里面为什么找不到任何项目,同时从com里面加的引用会出现警告? 其实是创建控制台程序的时候出错了 解决方法 重新创建控制台程序 选控制台应…

Linux下,用ufw实现端口关闭、流量控制(二)

本文是 网安小白的端口关闭实践 的续篇。 海量报文,一手掌握,你值得拥有,让我们开始吧~ ufw 与 iptables的关系 理论介绍: ufw(Uncomplicated Firewall)是一个基于iptables的前端工具&#xf…

Leetcode 每日一题 290.单词规律

目录 一、问题分析 二、解题思路 三、代码实现 四、复杂度分析 五、总结 在编程的世界里,我们常常会遇到各种有趣的字符串匹配问题。今天要探讨的就是这样一个问题:给定一种规律 pattern 和一个字符串 s,判断 s 是否遵循与 pattern 相同…

Java项目实战II基于微信小程序的旅游社交平台(开发文档+数据库+源码)

目录 一、前言 二、技术介绍 三、系统实现 四、核心代码 五、源码获取 全栈码农以及毕业设计实战开发,CSDN平台Java领域新星创作者,专注于大学生项目实战开发、讲解和毕业答疑辅导。 一、前言 随着移动互联网的迅猛发展,旅游已经成为人…

Mybatis-Plus的主要API

一、实体类操作相关API BaseMapper<T>接口 功能&#xff1a;这是 MyBatis - Plus 为每个实体类对应的 Mapper 接口提供的基础接口。它提供了一系列基本的 CRUD&#xff08;增删改查&#xff09;操作方法。例如insert(T entity)方法用于插入一条记录&#xff0c;d…

第一个 JSP 程序

一个简单的 JSP 程序&#xff1a; 使用 IDEA 开发工具新建一个 maven 项目&#xff0c;具体操作如图所示&#xff1a; 配置 Tomcat 服务器 项目结构如下图所示&#xff1a; 3. 修改 index.jsp 页面的代码&#xff1a; <% page language"java" contentType&q…

使用android studio写一个Android的远程通信软件(APP),有通讯的发送和接收消息界面

以下是使用 Android Studio 基于 Java 语言编写一个简单的 Android APP 实现远程通信&#xff08;这里以 TCP 通信为例&#xff09;的代码示例&#xff0c;包含基本的通信界面以及发送和接收消息功能。 1. 创建项目 打开 Android Studio&#xff0c;新建一个 Empty Activity …

记录下nginx接口代理配置问题

其中api和api1是前面定义的upstream&#xff0c;ip相同只是端口不同。 一开始/api1/直接 像api一样 proxy_pass http://api1这样是不行的&#xff0c;因为会代理到 后端的 /api1/...接口&#xff0c;而后端实际接口地址是 /api/..... 所以必须像上面写法才能将外网的 /api…

【项目】基于PaddleOCR的文字检测识别项目

【项目】基于PaddleOCR的文字检测识别项目 简介安装与使用&#xff08;1&#xff09;Paddle环境安装&#xff08;2&#xff09;模型预测&#xff08;文本检测文本识别&#xff09;&#xff08;3&#xff09;文本检测识别模型训练&#xff08;4&#xff09;本地模型训练与预测&a…

mock.js介绍

mock.js http://mockjs.com/ 1、mock的介绍 *** 生成随机数据&#xff0c;拦截 Ajax 请求。** 通过随机数据&#xff0c;模拟各种场景&#xff1b;不需要修改既有代码&#xff0c;就可以拦截 Ajax 请求&#xff0c;返回模拟的响应数据&#xff1b;支持生成随机的文本、数字…

重磅升级:OpenAI o1模型上手实测,从芯片架构分析到象棋残局判断的全能表现

引言 昨日&#xff0c;在圣诞节系列发布会的第一天&#xff0c;OpenAI终于给我们带来了令人振奋的更新&#xff0c;这些更新有望塑造AI互动的未来。备受期待的OpenAI o1正式版的推出&#xff0c;标志着ChatGPT体验的重大进化&#xff0c;宣告了AI驱动应用新时代的开始。o1现已可…

DataSophon集成CMAK KafkaManager

本次集成基于DDP1.2.1 集成CMAK-3.0.0.6 设计的json和tar包我放网盘了. 通过网盘分享的文件&#xff1a;DDP集成CMAK 链接: https://pan.baidu.com/s/1BR70Ajj9FxvjBlsOX4Ivhw?pwdcpmc 提取码: cpmc CMAK github上提供了zip压缩包.将压缩包解压之后 在根目录下加入启动脚本…

【vivado】时序报告--best时序和worst时序

利用vivado进行开发时&#xff0c;生成best时序报告和worst时序报告。 best时序报告 slow选择min_max&#xff0c;fast选择none。 worst时序报告 fast选择min_max&#xff0c;slow选择none。