语言:python 3
用法:点击运行后,弹出窗口,选择文件夹,程序运行会将文件夹内的所有PPT文件全部转换成PPT长图,图片名称与PPT文件名称相同,保存位置相同。
如运行中报错,需要自行根据报错内容按照缺失的库
共分享两种代码,可以尝试运行。
代码1,需安装库
#安装库
pip install pyautogui
#安装库
pip install pillow
python
import os
import comtypes.client
from tkinter import Tk, filedialog
from PIL import Image
def 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 = None
print(ppt_file+"分图完成!")
except Exception as e:
print("分图时发生错误:", str(e))
def merge_images(directory, png_file):
try:
Image.MAX_IMAGE_PIXELS = 2 ** 40
images = [] # 存储图片对象
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 None
max_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 = 0
for 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 image
merge_images(directory, png_file) # image to images
elif ppt_file.lower().endswith(".ppt"):
png_file = os.path.join(directory, ppt_file[:-4] + ".png")
ppt_to_images(ppt_file) # PPT to image
merge_images(directory, png_file) # image to images
except Exception as e:
print("处理PPT文件时发生错误,跳过该文件:", str(e))
print("转换完成!")
except Exception as e:
print("选择目录并转换PPT文件时发生错误:", str(e))
# 选择目录并转换PPT到PDF格式,再将PDF转换为长图
select_directory()
代码2如下:
python
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 = 0
for 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的路径,拼接ppt
pdf_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()