使用python读取数据建立pptx (python-pptx图文调整案例)

news/2024/12/6 7:39:46/

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

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

前言

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

如果需要更详细的,可以看一下这个帖子:Python自动化办公:ppt文件操作教程

如何使用 Python 自动生成 PPTX

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

第一步:安装所需库

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

pip install python-pptx

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

pip install Pillow

第二步:创建一个新的 PPTX

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

第三步:添加幻灯片

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

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

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

第四步:添加内容

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

添加文本

添加标题文本框

python">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

添加图片

python">from PIL import Image# 打开图片以获取尺寸
image_path = 'path/to/your/image.jpg'
with Image.open(image_path) as img:width, height = img.sizeaspect_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 文件:

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

python_86">图文实操案例(自动读取数据建立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.sizeaspect_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_frametitle_frame.text = f"Image ID: {image_id}"title_frame.paragraphs[0].font.bold = Truetitle_frame.paragraphs[0].font.size = Pt(32)  # 调整字体大小title_frame.paragraphs[0].alignment = PP_ALIGN.CENTER# 添加 Groundtruth Tripletsleft = 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_frametext_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 Tripletsleft = 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_frametext_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:breakimage_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.sizeaspect_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 Tripletsleft = 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_frametext_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.ppmy.cn/news/1552488.html

相关文章

spark sql 环境安装,java 默认路径和 安装配置!

yum安装java 查看默认路径 update-alternatives --config java # Java 环境变量 export JAVA_HOME/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.412.b08-1.el7_9.x86_64/jreexport PATH$JAVA_HOME/bin:$PATH# Spark 环境变量 export SPARK_HOME/home/vagrant/soft/sparkexport PATH…

开源C代码之路:一、Gitee

开源c代码之路:一,Gitee 前言1、开源项目2、从哪里找?3、举个例子4、总结: 本系列回顾清单开源代码示例 前言 从开源开发的角度,由浅入深,一步步初探C语言编程的入门之路。 本篇讲解:Gitee 1…

困扰解决:mfc140u.dll丢失的解决方法,多种有效解决方法全解析

当电脑提示“mfc140u.dll丢失”时,这可能会导致某些程序无法正常运行,给用户带来不便。不过,有多种方法可以尝试解决这个问题。这篇文章将以“mfc140u.dll丢失的解决方法”为主题,教大家有效解决mfc140u.dll丢失。 判断是否是“mf…

【机器学习】—Transformers的扩展应用:从NLP到多领域突破

好久不见!喜欢就关注吧~ 云边有个稻草人-CSDN博客 目录 引言 一、Transformer架构解析 (一)、核心组件 (二)、架构图 二、领域扩展:从NLP到更多场景 1. 自然语言处理(NLP) 2…

深入探讨Go语言中的双向链表

简介 双向链表是链表家族中的一种高级结构,每个节点不仅指向下一个节点,还指向上一个节点。今天,我们将学习如何在Go语言中实现和操作这种灵活的数据结构。 双向链表的优缺点 优点: 可以从任一方向遍历链表,灵活性高…

【Linux篇】权限管理 - 用户与组权限详解

一. 什么是权限? 首先权限是限制人的。人 真实的人 身份角色 权限 角色 事物属性 二. 认识人–用户 Linux下的用户分为超级用户和普通用户 root :超级管理员,几乎不受权限的约束普通用户 :受权限的约束超级用户的命令提示符是#,普通用…

AUTOSAR AP 汽车API知识点总结(Automotive API )R24-11

汽车API知识点总结 一、背景与目标 背景:智能互联汽车正逐步依赖远程诊断、软件更新等功能以确保行驶安全,并且用户已习惯于通过智能设备中的应用程序控制连接设备。虽然AUTOSAR标准支持车辆软件的可更新性,但尚未提供将AUTOSAR应用产生的数据和功能安全可靠地暴露给非AUTO…

Milvus python库 pymilvus 常用操作详解之Collection(下)

上篇博客 Milvus python库 pymilvus 常用操作详解之Collection(上) 主要介绍了 pymilvus 库中Collection集合的相关概念以及创建过程的代码实现,现在我们要在该基础上实现对于collection中插入数据的混合检索(基于dense vector 和…