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()

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

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

相关文章

如何在Ubuntu 22.04上安装PHP 8.1并设置本地开发环境

引言 PHP是一种流行的服务器脚本语言,用于创建动态和交互式web页面。开始使用你选择的语言是学习编程的第一步。 本教程将指导您在Ubuntu上安装PHP 8.1,并通过命令行设置本地编程环境。您还将安装依赖管理器Composer,并通过运行脚本来测试您…

8.4 【C语言】通过指针引用字符串

8.4.1 字符串的引用方式 在C程序中,字符串是存放在字符数组中的。想引用一个字符串,可以用以下两种方法。 (1)用字符数组存放一个字符串,可以通过数组名和下标引用字符串中一个字符,也可以通过数组名和格…

neo4j

UNWIND 将列表里的值展开 CREATE (N0:Person {name: Anders}) CREATE (N1:Person {name: Becky}) CREATE (N2:Person {name: Cesar}) CREATE (N3:Person {name: Dilshad}) CREATE (N4:Person {name: George}) CREATE (N5:Person {name: Filipa})CREATE (N0)-[:KNOWS]->(N3)…

spark基于HNSW向量检索

参考文档:https://talks.anghami.com/blazing-fast-approximate-nearest-neighbour-search-on-apache-spark-using-hnsw/ HNSW参数调优文档:https://github.com/nmslib/hnswlib/blob/master/ALGO_PARAMS.md spark 运行HNSW向量检索分为以下三步 1 创建H…

VUE初识

vue是一个用于构建用户界面的渐进是框架 优点,大大提高开发效率 缺点,需要记忆语法规则 构建用户界面 创建vue实例,初始化渲染 1:准备容启 2:引包,开发版本和生产版本 3.创建vue实例 new Vue&#x…

mybatis plus 控制台和日志文件中打印sql配置

1 控制台输出sql 配置mybatis-plus的日志实现类为StdOutImpl,该实现类中打印日志是通过System.out.println(s)的方式来打印日志的 mybatis-plus:configuration:log-impl: org.apache.imbatis.logging.stdout.StdOutImpl2 日志文件中写入sql 日志文件中输入sql需要…

分布式事务(4):两阶段提交协议与三阶段提交区别

1 两阶段提交协议 两阶段提交方案应用非常广泛,几乎所有商业OLTP数据库都支持XA协议。但是两阶段提交方案锁定资源时间长,对性能影响很大,基本不适合解决微服务事务问题。 缺点: 如果协调者宕机,参与者没有协调者指…

Solidity 合约安全,常见漏洞 (下篇)

Solidity 合约安全,常见漏洞 (下篇) Solidity 合约安全,常见漏洞 (上篇) 不安全的随机数 目前不可能用区块链上的单一交易安全地产生随机数。区块链需要是完全确定的,否则分布式节点将无法达…

Grafana 安装配置教程

Grafana 安装配置教程 一、介绍二、Grafana 安装及配置2.1 下载2.2 安装2.2.1 windows安装 - 图形界面2.2.2 linux安装 - 安装脚本 三、Grafana的基本配置3.1 登录3.2 Grafana设置中文 四、grafana基本使用 一、介绍 Grafana是一个通用的可视化工具。对于Grafana而言&#xff0…

华为OD-分积木/分苹果

题目描述 哥哥弟弟分一堆积木,每块积木重量不同。弟弟要求平分两组,每组数量可以不同但总重量必须相等。 然而弟弟只会二进制并且加法不进位。例如三块积木 3,5,6 分成两组 [3] 和 [5,6] 弟弟认为 5(二进制1001)加上6&#xff08…

Linux常用命令——dhcrelay命令

在线Linux命令查询工具 dhcrelay 使用dhcrelay命令可以提供中继DHCP和BOOTP请求 补充说明 dhcrelay命令使用dhcrelay命令可以提供中继DHCP和BOOTP请求,从一个没有DHCP服务器的子网直接连接到其它子网内的一个或多个DHCP服务器。该命令在DHCP中继服务器上使用&am…

Docker容器与虚拟化技术:Gitlab账户注册

目录 一、实验 1.gitlab 一、实验 1.gitlab (1) 概念 GitLab 是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的Web服务。 (2)官网 The DevSecOps Platform | GitLab (3&#…

基于swing的火车站订票系统java jsp车票购票管理mysql源代码

本项目为前几天收费帮学妹做的一个项目,Java EE JSP项目,在工作环境中基本使用不到,但是很多学校把这个当作编程入门的项目来做,故分享出本项目供初学者参考。 一、项目描述 基于swing的火车站订票系统 系统有2权限:…

软考高级系统架构设计师系列论文七十:论信息系统的安全体系

软考高级系统架构设计师系列论文七十:论信息系统的安全体系 一、信息系统相关知识点二、摘要三、正文四、总结一、信息系统相关知识点 软考高级信息系统项目管理师系列之四十三:信息系统安全管理

LeetCode算法递归类—二叉树的右视图

目录 199. 二叉树的右视图 题解: 目标: 思路: 过程: 代码: 运行结果: 给定一个二叉树的 根节点 root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所…

构建 NodeJS 影院预订微服务并使用 docker 部署(03/4)

一、说明 构建一个微服务的电影网站,需要Docker、NodeJS、MongoDB,这样的案例您见过吗?如果对此有兴趣,您就继续往下看吧。 你好社区,这是🏰“构建 NodeJS 影院微服务”系列的第三篇文章。本系列文章演示了…

MySql 环境搭建

目录 MySql 在 CentOS 7 环境下安装。 说明: 1.卸载不要的环境 2.配置 mysql 官方 yum 源 3.开始安装 4.启动 mysql 5.mysql 登录 6.配置 mysql 7. 设置开机启动 MySql 在 CentOS 7 环境下安装。 说明: 在安装与卸载中,用户切换成 r…

Java请求webservice踩过的坑

最近项目对接过程中,因为对方系统比较旧,我们和对方进行交互使用webservice方式进行,对方给出相关文档, 接口地址:http://ip:port/abc/def/xxxService?wsdl 接口名称:methodA 1-springboot配合CXF使用 …

PostgreSQL+SSL链路测试

SSL一个各种证书在此就不详细介绍了,PostgreSQL要支持SSL的前提需要打开openssl选项,包括客户端和服务器端。 测试过程。 1. 生成私钥 root用户: mkdir -p /opt/ssl/private mkdir -p /opt/ssl/share/ca-certificateschmod 755 -R /opt/ss…

java判断ip是否为指定网段

具体网络知识原理请看这个博文 /**** param address servletRequest.getRemoteAddr();* param host servletRequest.getRemoteHost();* return* Description 检验IP是否符合安全限定*/private boolean ipIsInNet(String address, String host){Set<String> iPset allow…