当前位置: 首页 > news >正文

python代码——批量将PPT转换成长图

语言:python 3

用法:点击运行后,弹出窗口,选择文件夹,程序运行会将文件夹内的所有PPT文件全部转换成PPT长图,图片名称与PPT文件名称相同,保存位置相同。

如运行中报错,需要自行根据报错内容按照缺失的库

共分享两种代码,可以尝试运行。

代码1,需安装库

#安装库
pip install pyautogui
#安装库
pip install  pillow


import os
import comtypes.client
from tkinter import Tk, filedialog
from PIL import Imagedef ppt_to_images(ppt_file):try:# 导入comtypes.client模块并创建PowerPoint应用程序对象powerpoint = comtypes.client.CreateObject("Powerpoint.Application")# 设置PowerPoint应用程序为可见状态,便于观察操作过程(可选),修改为0后报错#powerpoint.Visible = 1# 打开PPT文件,并返回Presentation对象presentation = powerpoint.Presentations.Open(ppt_file)for i, slide in enumerate(presentation.slides):      #slide是幻灯片序列slide.Export(f"slide_{i}.png", "PNG")# 关闭PPT文件presentation.Close()# 退出PowerPoint应用程序powerpoint.Quit()presentation = Noneprint(ppt_file+"分图完成!")except Exception as e:print("分图时发生错误:", str(e))
def merge_images(directory, png_file):try:Image.MAX_IMAGE_PIXELS = 2 ** 40images = []  # 存储图片对象for file in os.listdir(directory):file_path = os.path.join(directory, file)if os.path.isfile(file_path) and file.lower().endswith(".png"):image = Image.open(file_path)images.append(image)if len(images) == 0:print("未找到PNG格式的图片文件")return Nonemax_width = max(image.size[0] for image in images)  # 获取最大宽度total_height = sum(image.size[1] for image in images)  # 计算总高度final_image = Image.new("RGBA", (max_width, total_height), (0, 0, 0, 0))  # 创建最终图像# 逐个粘贴图片到最终图像中y_offset = 0for image in images:final_image.paste(image, (0, y_offset))y_offset += image.size[1]final_image.save(png_file)print("已生成图片"+png_file)if final_image:for file in os.listdir(directory):file_path = os.path.join(directory, file)if os.path.isfile(file_path) and file.lower().endswith(".png") and "slide" in file:os.remove(file_path)print("已删除图片"+file)except Exception as e:print("合并图片时发生错误:", str(e))def select_directory():try:root = Tk()root.withdraw()directory = filedialog.askdirectory(title="选择目录")ppt_files = [f for f in os.listdir(directory) if f.endswith('.pptx')or f.endswith('.ppt')]for ppt_file in ppt_files:try:#print("directory" + directory)if ppt_file.lower().endswith(".pptx"):png_file = os.path.join(directory, ppt_file[:-5] + ".png")ppt_to_images(ppt_file)  # PPT to imagemerge_images(directory, png_file)  # image to imageselif ppt_file.lower().endswith(".ppt"):png_file = os.path.join(directory, ppt_file[:-4] + ".png")ppt_to_images(ppt_file)  # PPT to imagemerge_images(directory, png_file)  # image to imagesexcept Exception as e:print("处理PPT文件时发生错误,跳过该文件:", str(e))print("转换完成!")except Exception as e:print("选择目录并转换PPT文件时发生错误:", str(e))# 选择目录并转换PPT到PDF格式,再将PDF转换为长图
select_directory()

代码2如下:

import os
import comtypes.client
from tkinter import Tk, filedialog
from pptx import Presentation
from PIL import Image#PPT转换成图片def ppt_to_images(ppt_file, png_file):#presentation = powerpoint.Presentations.Open(ppt_file)presentation = Presentation(os.path.join(png_file, ppt_file))for i, slide in enumerate(presentation.slides):      #slide是幻灯片序列slide.export(f"{png_file}/slide_{i}.png")     #将PPT转换成图片并保存到目录下print("PPT转换为图像完成!")#将图片拼接成长图
def merge_images(ppt_path, output_file):images = [Image.open(f"{ppt_path}/{img}") for img in os.listdir(ppt_path) if img.endswith(".png")]widths, heights = zip(*(img.size for img in images))total_height = sum(heights)max_width = max(widths)merged_image = Image.new("RGB", (max_width, total_height))y_offset = 0for img in images:merged_image.paste(img, (0, y_offset))y_offset += img.size[1]merged_image.save(output_file)print("图像拼接完成!")def ppt_to_pdf(ppt_path, pdf_file):   #ppt路径和pdf的路径# 导入comtypes.client模块并创建PowerPoint应用程序对象powerpoint = comtypes.client.CreateObject("Powerpoint.Application")# 设置PowerPoint应用程序为可见状态,便于观察操作过程(可选),修改为0后报错powerpoint.Visible = 1# 打开PPT文件,并返回Presentation对象presentation = powerpoint.Presentations.Open(ppt_path)# 将打开的PPT文件导出为PDF文件(第二个参数2表示导出为PDF格式)presentation.ExportAsFixedFormat(pdf_file, 2)# 输出转换完成的信息print(ppt_path + "转PDF完成!")def select_directory():root = Tk()root.withdraw()directory = filedialog.askdirectory(title="选择目录")ppt_files = [f for f in os.listdir(directory) if f.endswith('.pptx')]for ppt_file in ppt_files:ppt_path = os.path.join(directory, ppt_file)       #ppt_path ppt的路径,拼接pptpdf_file = os.path.join(directory, ppt_file[:-4] + ".pdf")    #pdf文件png_file= os.path.join(directory, ppt_file[:-4] + ".png")ppt_to_pdf(ppt_path, pdf_file)print("转换完成!")# 选择目录并转换PPT到PDF格式,再将PDF转换为长图
select_directory()

相关文章:

python代码——批量将PPT转换成长图

语言:python 3 用法:点击运行后,弹出窗口,选择文件夹,程序运行会将文件夹内的所有PPT文件全部转换成PPT长图,图片名称与PPT文件名称相同,保存位置相同。 如运行中报错,需要自行根据…...

C++信息学奥赛2046:【例5.15】替换字母

这段代码的功能是对输入的字符串进行处理&#xff0c;将字符串中的字符 a 替换为字符 b 后输出结果。 #include<bits/stdc.h> using namespace std; int main() {string s; // 定义字符串变量s&#xff0c;用来存储输入的字符串char a, b; // 定义字符变量a和b&#xff…...

每天一道leetcode:1306. 跳跃游戏 III(图论中等广度优先遍历)

今日份题目&#xff1a; 这里有一个非负整数数组 arr&#xff0c;你最开始位于该数组的起始下标 start 处。当你位于下标 i 处时&#xff0c;你可以跳到 i arr[i] 或者 i - arr[i]。 请你判断自己是否能够跳到对应元素值为 0 的 **任一** 下标处。 注意&#xff0c;不管是什…...

76参考链接

参考链接 官方文件综合介绍[let 和 const](https://es6.ruanyifeng.com/#docs/reference#let 和 const)解构赋值字符串正则数值数组函数对象Symbol[Set 和 Map](https://es6.ruanyifeng.com/#docs/reference#Set 和 Map)[Proxy 和 Reflect](https://es6.ruanyifeng.com/#docs/…...

浅析Linux SCSI子系统:调试方法

文章目录 SCSI日志调试功能scsi_logging_level调整SCSI日志等级 SCSI trace events使能SCSI trace events方式一&#xff1a;通过set_event接口方式二&#xff1a;通过enable 跟踪trace信息 相关参考 SCSI日志调试功能 SCSI子系统支持内核选项CONFIG_SCSI_LOGGING配置日志调试…...

【Unity3D】水面特效

1 前言 水波特效 中通过屏幕后处理实现了环形水波效果&#xff0c;本文通过 Shader Graph 实现了模拟水面特效&#xff0c;包含以下特效细节。 深水区和浅水区颜色差异&#xff1b;水面有波纹&#xff0c;并且在移动&#xff1b;水面起伏波动&#xff1b;水面边缘有水泡&#…...

CSS中的flex布局详细讲解

Flex 布局 Flex 布局是一种现代的 CSS 布局模型&#xff0c;用于实现灵活的盒子布局。它提供了强大的布局能力&#xff0c;使得元素可以自动调整大小、对齐和分布&#xff0c;适用于构建响应式和可伸缩的布局。 Flex 布局使用 flex 容器和 flex 项目的概念。容器是一个父元素…...

Python功能制作之简单的音乐播放器

需要导入的库&#xff1a; pip install PyQt5 源码&#xff1a; import os from PyQt5.QtCore import Qt, QUrl from PyQt5.QtGui import QIcon, QPixmap from PyQt5.QtMultimedia import QMediaPlayer, QMediaContent from PyQt5.QtWidgets import QApplication, QMainWind…...

GAN生成对抗模型根据minist数据集生成手写数字图片

文章目录 1.项目介绍2相关网站3具体的代码及结果导入工具包设置超参数定义优化器&#xff0c;以及损失函数训练时的迭代过程训练结果的展示 1.项目介绍 通过用minist数据集进行训练&#xff0c;得到一个GAN模型&#xff0c;可以生成与minist数据集类似的图片。 GAN是一种生成模…...

【K8S源码之Pod漂移】整体概况分析 controller-manager 中的 nodelifecycle controller(Pod的驱逐)

参考 k8s 污点驱逐详解-源码分析 - 掘金 k8s驱逐篇(5)-kube-controller-manager驱逐 - 良凯尔 - 博客园 k8s驱逐篇(6)-kube-controller-manager驱逐-NodeLifecycleController源码分析 - 良凯尔 - 博客园 k8s驱逐篇(7)-kube-controller-manager驱逐-taintManager源码分析 - 良…...

[保研/考研机试] KY212 二叉树遍历 华中科技大学复试上机题 C++实现

题目链接&#xff1a; 二叉树遍历_牛客题霸_牛客网二叉树的前序、中序、后序遍历的定义&#xff1a; 前序遍历&#xff1a;对任一子树&#xff0c;先访问根&#xff0c;然后遍历其左子树&#xff0c;最。题目来自【牛客题霸】https://www.nowcoder.com/share/jump/43719512169…...

CSS笔记

介绍 CSS导入方式 三种方法都将文字设置成了红色 CSS选择器 元素选择器 id选择器 图中div将颜色控制为红色&#xff0c;#name将颜色控制为蓝色&#xff0c;谁控制的范围最小&#xff0c;谁就生效&#xff0c;所以第二个div是蓝色的。id属性值要唯一&#xff0c;否则报错。 clas…...

链栈Link-Stack

0、节点结构体定义 typedef struct SNode{int data;struct SNode *next; } SNode, *LinkStack; 1、初始化 bool InitStack(LinkStack &S) //S为栈顶指针&#xff08;存数据的头节点&#xff09; {S NULL;return true; } 2、入栈 bool Push(LinkStack &S, int e) {…...

Ubuntu 20系统WIFI设置静态IP地址,以及断连问题

​最近工作需要购置了一台GPU机器&#xff0c;然后搭建了深度学习的运行环境&#xff0c;在工作中将这台机器当做深度学习的服务器来使用&#xff0c;前期已经配置好多用户以及基础环境。但最近通过xshell连接总是不间断的出现断连现象。 补充一点&#xff0c;Ubuntu系统中与网…...

(一)idea连接GitHub的全部流程(注册GitHub、idea集成GitHub、增加合作伙伴、跨团队合作、分支操作)

&#xff08;二&#xff09;Git在公司中团队内合作和跨团队合作和分支操作的全部流程&#xff08;一篇就够&#xff09;https://blog.csdn.net/m0_65992672/article/details/132336481 4.1、简介 Git是一个免费的、开源的*分布式**版本控制**系统*&#xff0c;可以快速高效地…...

-bash: java: command not found笔记

文章目录 场景解决方案找java的方法find命令进行查找根据java进程找寻具体位置 场景 linux系统执行java命令时报错&#xff1a; -bash: java: command not found。 解决方案 可能是没有安装java(这种情况比较少)或者安装了java但是没有设置环境变量(一般是这种情况)。 找ja…...

C++ typename and .template

https://makecleanandmake.com/2015/07/20/leading-typename-dot-template-and-why-they-are-necessary/ typename Obj<T>::type var;v.template m<int>();...

uniapp,使用canvas制作一个签名版

先看效果图 我把这个做成了页面&#xff0c;没有做成组件&#xff0c;因为之前我是配合uview-plus的popup弹出层使用的&#xff0c;这种组件好像是没有生命周期的&#xff0c;第一次打开弹出层可以正常写字&#xff0c;但是关闭之后再打开就不会显示绘制的线条了&#xff0c;还…...

【大数据】Flink 详解(五):核心篇 Ⅳ

Flink 详解&#xff08;五&#xff09;&#xff1a;核心篇 Ⅳ 45、Flink 广播机制了解吗&#xff1f; 从图中可以理解 广播 就是一个公共的共享变量&#xff0c;广播变量存于 TaskManager 的内存中&#xff0c;所以广播变量不应该太大&#xff0c;将一个数据集广播后&#xff0…...

设计模式-建造者模式

核心思想 抽取共同的行为&#xff0c;允许使用者指定复杂对象的类型和内容&#xff0c;不需要了解内部的构建细节使用多个简单的行为构建一个复杂的对象&#xff0c;将对象的构建过程和它的表示分离&#xff0c;同样的构建过程可以创建不同的表示 优缺点 优点 使用者不需要知…...

Andi活码,最简单好用!

上链接&#xff1a; https://app.andi.cn/qr/ 试用过这么多群聊二维码的活码工具。 真正好用的是我推荐的这款Andi活码。 免登录、打开即用。单屏管理&#xff0c;超简单好用。 优威科技有限公司出品。 承诺永久免费长期支持。 稳定可靠好用&#xff01; 不信我来用一下…...

JEECG Boot项目实战:如何优雅地移除登录验证码(前后端完整操作指南)

JEECG Boot项目实战&#xff1a;如何优雅地移除登录验证码&#xff08;前后端完整操作指南&#xff09; 在JEECG Boot的开发过程中&#xff0c;验证码功能虽然能有效防止恶意登录&#xff0c;但在某些特定场景下反而会成为效率瓶颈。想象一下这样的场景&#xff1a;开发团队正在…...

从‘它好慢’到‘真香’:Vite + Vue 3项目实战中那些让你开发效率翻倍的配置技巧

从‘它好慢’到‘真香’&#xff1a;Vite Vue 3项目实战中那些让你开发效率翻倍的配置技巧 如果你正在使用Vite和Vue 3进行开发&#xff0c;却总觉得构建速度不够快、开发体验不够流畅&#xff0c;或者在某些特定功能配置上卡壳&#xff0c;那么这篇文章就是为你准备的。我们将…...

别再为长文档发愁了!用DeepSeek-OCR + 单块A100,5步搞定古籍/财报批量识别

单块A100实战指南&#xff1a;用DeepSeek-OCR高效处理古籍与财报的5个关键步骤 当某省级图书馆需要数字化10万页明清古籍时&#xff0c;技术团队发现传统OCR方案需要3个月才能完成&#xff0c;而采用DeepSeek-OCR配合单块A100的方案&#xff0c;仅用11天就交付了准确率92%的数…...

逆向工程实战:从V8引擎角度破解JavaScript无限debugger(保姆级教程)

V8引擎深度解析&#xff1a;JavaScript调试机制与安全实践 在JavaScript开发领域&#xff0c;调试器(debugger)是开发者日常工作中不可或缺的工具。作为Chrome浏览器和Node.js的核心引擎&#xff0c;V8对debugger关键字的处理机制直接影响着开发者的调试体验。本文将深入探讨V8…...

Revolut警告支持高耗能AI和加密货币业务可能面临声誉风险

英国银行应用Revolut表示&#xff0c;由于支持加密货币和AI等高耗能行业&#xff0c;公司可能面临声誉风险&#xff0c;同时该公司公布去年利润增长57%。这家金融科技公司在等待监管批准五年后&#xff0c;现在终于可以作为正式的英国银行启动业务。Revolut在其2025年年报中警告…...

终极免费逆向神器Ghidra:3分钟极速安装与新手入门指南

终极免费逆向神器Ghidra&#xff1a;3分钟极速安装与新手入门指南 【免费下载链接】ghidra_installer Helper scripts to set up OpenJDK 11 and scale Ghidra for 4K on Ubuntu 18.04 / 18.10 项目地址: https://gitcode.com/gh_mirrors/gh/ghidra_installer 还在为复杂…...

SleeperX:Mac电源管理的智能守护者,让每一次工作都不被打断

SleeperX&#xff1a;Mac电源管理的智能守护者&#xff0c;让每一次工作都不被打断 【免费下载链接】SleeperX MacBook prevent idle/lid sleep! Hackintosh sleep on low battery capacity. 项目地址: https://gitcode.com/gh_mirrors/sl/SleeperX 您是否经历过这样的时…...

什么是绿色软件?免安装版就是绿色软件吗?

什么是绿色软件&#xff1f;免安装版就是绿色软件吗&#xff1f;古有流氓软件耍流氓&#xff0c;今有绿色软件未必真绿色。 --马彪一、什么是绿色软件&#xff1f; 绿色软件&#xff08;Portable Software&#xff09;就是指无需安装&#xff0c;且运行过程中不向运行目录之…...

多维尺度变换(MDS)实战指南:从原理到Python实现

1. 多维尺度变换&#xff08;MDS&#xff09;是什么&#xff1f; 多维尺度变换&#xff08;Multidimensional Scaling&#xff0c;简称MDS&#xff09;是一种经典的降维算法&#xff0c;它的核心思想是通过保持数据点之间的距离关系&#xff0c;将高维数据映射到低维空间。想象…...