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

每天一道leetcode:1306. 跳跃游戏 III(图论中等广度优先遍历)
今日份题目: 这里有一个非负整数数组 arr,你最开始位于该数组的起始下标 start 处。当你位于下标 i 处时,你可以跳到 i arr[i] 或者 i - arr[i]。 请你判断自己是否能够跳到对应元素值为 0 的 **任一** 下标处。 注意,不管是什…...
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方式一:通过set_event接口方式二:通过enable 跟踪trace信息 相关参考 SCSI日志调试功能 SCSI子系统支持内核选项CONFIG_SCSI_LOGGING配置日志调试…...

【Unity3D】水面特效
1 前言 水波特效 中通过屏幕后处理实现了环形水波效果,本文通过 Shader Graph 实现了模拟水面特效,包含以下特效细节。 深水区和浅水区颜色差异;水面有波纹,并且在移动;水面起伏波动;水面边缘有水泡&#…...
CSS中的flex布局详细讲解
Flex 布局 Flex 布局是一种现代的 CSS 布局模型,用于实现灵活的盒子布局。它提供了强大的布局能力,使得元素可以自动调整大小、对齐和分布,适用于构建响应式和可伸缩的布局。 Flex 布局使用 flex 容器和 flex 项目的概念。容器是一个父元素…...

Python功能制作之简单的音乐播放器
需要导入的库: pip install PyQt5 源码: 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具体的代码及结果导入工具包设置超参数定义优化器,以及损失函数训练时的迭代过程训练结果的展示 1.项目介绍 通过用minist数据集进行训练,得到一个GAN模型,可以生成与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++实现
题目链接: 二叉树遍历_牛客题霸_牛客网二叉树的前序、中序、后序遍历的定义: 前序遍历:对任一子树,先访问根,然后遍历其左子树,最。题目来自【牛客题霸】https://www.nowcoder.com/share/jump/43719512169…...

CSS笔记
介绍 CSS导入方式 三种方法都将文字设置成了红色 CSS选择器 元素选择器 id选择器 图中div将颜色控制为红色,#name将颜色控制为蓝色,谁控制的范围最小,谁就生效,所以第二个div是蓝色的。id属性值要唯一,否则报错。 clas…...
链栈Link-Stack
0、节点结构体定义 typedef struct SNode{int data;struct SNode *next; } SNode, *LinkStack; 1、初始化 bool InitStack(LinkStack &S) //S为栈顶指针(存数据的头节点) {S NULL;return true; } 2、入栈 bool Push(LinkStack &S, int e) {…...
Ubuntu 20系统WIFI设置静态IP地址,以及断连问题
最近工作需要购置了一台GPU机器,然后搭建了深度学习的运行环境,在工作中将这台机器当做深度学习的服务器来使用,前期已经配置好多用户以及基础环境。但最近通过xshell连接总是不间断的出现断连现象。 补充一点,Ubuntu系统中与网…...

(一)idea连接GitHub的全部流程(注册GitHub、idea集成GitHub、增加合作伙伴、跨团队合作、分支操作)
(二)Git在公司中团队内合作和跨团队合作和分支操作的全部流程(一篇就够)https://blog.csdn.net/m0_65992672/article/details/132336481 4.1、简介 Git是一个免费的、开源的*分布式**版本控制**系统*,可以快速高效地…...
-bash: java: command not found笔记
文章目录 场景解决方案找java的方法find命令进行查找根据java进程找寻具体位置 场景 linux系统执行java命令时报错: -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制作一个签名版
先看效果图 我把这个做成了页面,没有做成组件,因为之前我是配合uview-plus的popup弹出层使用的,这种组件好像是没有生命周期的,第一次打开弹出层可以正常写字,但是关闭之后再打开就不会显示绘制的线条了,还…...

【大数据】Flink 详解(五):核心篇 Ⅳ
Flink 详解(五):核心篇 Ⅳ 45、Flink 广播机制了解吗? 从图中可以理解 广播 就是一个公共的共享变量,广播变量存于 TaskManager 的内存中,所以广播变量不应该太大,将一个数据集广播后࿰…...

设计模式-建造者模式
核心思想 抽取共同的行为,允许使用者指定复杂对象的类型和内容,不需要了解内部的构建细节使用多个简单的行为构建一个复杂的对象,将对象的构建过程和它的表示分离,同样的构建过程可以创建不同的表示 优缺点 优点 使用者不需要知…...
c++ 面试题(1)-----深度优先搜索(DFS)实现
操作系统:ubuntu22.04 IDE:Visual Studio Code 编程语言:C11 题目描述 地上有一个 m 行 n 列的方格,从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子,但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...

转转集团旗下首家二手多品类循环仓店“超级转转”开业
6月9日,国内领先的循环经济企业转转集团旗下首家二手多品类循环仓店“超级转转”正式开业。 转转集团创始人兼CEO黄炜、转转循环时尚发起人朱珠、转转集团COO兼红布林CEO胡伟琨、王府井集团副总裁祝捷等出席了开业剪彩仪式。 据「TMT星球」了解,“超级…...
leetcodeSQL解题:3564. 季节性销售分析
leetcodeSQL解题:3564. 季节性销售分析 题目: 表:sales ---------------------- | Column Name | Type | ---------------------- | sale_id | int | | product_id | int | | sale_date | date | | quantity | int | | price | decimal | -…...

pikachu靶场通关笔记22-1 SQL注入05-1-insert注入(报错法)
目录 一、SQL注入 二、insert注入 三、报错型注入 四、updatexml函数 五、源码审计 六、insert渗透实战 1、渗透准备 2、获取数据库名database 3、获取表名table 4、获取列名column 5、获取字段 本系列为通过《pikachu靶场通关笔记》的SQL注入关卡(共10关࿰…...
Spring AI与Spring Modulith核心技术解析
Spring AI核心架构解析 Spring AI(https://spring.io/projects/spring-ai)作为Spring生态中的AI集成框架,其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似,但特别为多语…...
DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”
目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...
Typeerror: cannot read properties of undefined (reading ‘XXX‘)
最近需要在离线机器上运行软件,所以得把软件用docker打包起来,大部分功能都没问题,出了一个奇怪的事情。同样的代码,在本机上用vscode可以运行起来,但是打包之后在docker里出现了问题。使用的是dialog组件,…...

浪潮交换机配置track检测实现高速公路收费网络主备切换NQA
浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求,本次涉及的主要是收费汇聚交换机的配置,浪潮网络设备在高速项目很少,通…...

算法:模拟
1.替换所有的问号 1576. 替换所有的问号 - 力扣(LeetCode) 遍历字符串:通过外层循环逐一检查每个字符。遇到 ? 时处理: 内层循环遍历小写字母(a 到 z)。对每个字母检查是否满足: 与…...
站群服务器的应用场景都有哪些?
站群服务器主要是为了多个网站的托管和管理所设计的,可以通过集中管理和高效资源的分配,来支持多个独立的网站同时运行,让每一个网站都可以分配到独立的IP地址,避免出现IP关联的风险,用户还可以通过控制面板进行管理功…...