Python實(shí)現(xiàn)批量將PPT轉(zhuǎn)換成長(zhǎng)圖
語(yǔ)言:python 3
用法:點(diǎn)擊運(yùn)行后,彈出窗口,選擇文件夾,程序運(yùn)行會(huì)將文件夾內(nèi)的所有PPT文件全部轉(zhuǎn)換成PPT長(zhǎng)圖,圖片名稱(chēng)與PPT文件名稱(chēng)相同,保存位置相同。
如運(yùn)行中報(bào)錯(cuò),需要自行根據(jù)報(bào)錯(cuò)內(nèi)容按照缺失的庫(kù)
共分享兩種代碼,可以嘗試運(yùn)行。
代碼1
需安裝庫(kù)
#安裝庫(kù) pip install pyautogui #安裝庫(kù) pip install pillow
import os
import comtypes.client
from tkinter import Tk, filedialog
from PIL import Image
def ppt_to_images(ppt_file):
try:
# 導(dǎo)入comtypes.client模塊并創(chuàng)建PowerPoint應(yīng)用程序?qū)ο?
powerpoint = comtypes.client.CreateObject("Powerpoint.Application")
# 設(shè)置PowerPoint應(yīng)用程序?yàn)榭梢?jiàn)狀態(tài),便于觀察操作過(guò)程(可選),修改為0后報(bào)錯(cuò)
#powerpoint.Visible = 1
# 打開(kāi)PPT文件,并返回Presentation對(duì)象
presentation = powerpoint.Presentations.Open(ppt_file)
for i, slide in enumerate(presentation.slides): #slide是幻燈片序列
slide.Export(f"slide_{i}.png", "PNG")
# 關(guān)閉PPT文件
presentation.Close()
# 退出PowerPoint應(yīng)用程序
powerpoint.Quit()
presentation = None
print(ppt_file+"分圖完成!")
except Exception as e:
print("分圖時(shí)發(fā)生錯(cuò)誤:", str(e))
def merge_images(directory, png_file):
try:
Image.MAX_IMAGE_PIXELS = 2 ** 40
images = [] # 存儲(chǔ)圖片對(duì)象
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) # 計(jì)算總高度
final_image = Image.new("RGBA", (max_width, total_height), (0, 0, 0, 0)) # 創(chuàng)建最終圖像
# 逐個(gè)粘貼圖片到最終圖像中
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("合并圖片時(shí)發(fā)生錯(cuò)誤:", 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文件時(shí)發(fā)生錯(cuò)誤,跳過(guò)該文件:", str(e))
print("轉(zhuǎn)換完成!")
except Exception as e:
print("選擇目錄并轉(zhuǎn)換PPT文件時(shí)發(fā)生錯(cuò)誤:", str(e))
# 選擇目錄并轉(zhuǎn)換PPT到PDF格式,再將PDF轉(zhuǎn)換為長(zhǎng)圖
select_directory()
代碼2
import os
import comtypes.client
from tkinter import Tk, filedialog
from pptx import Presentation
from PIL import Image
#PPT轉(zhuǎn)換成圖片
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轉(zhuǎn)換成圖片并保存到目錄下
print("PPT轉(zhuǎn)換為圖像完成!")
#將圖片拼接成長(zhǎng)圖
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的路徑
# 導(dǎo)入comtypes.client模塊并創(chuàng)建PowerPoint應(yīng)用程序?qū)ο?
powerpoint = comtypes.client.CreateObject("Powerpoint.Application")
# 設(shè)置PowerPoint應(yīng)用程序?yàn)榭梢?jiàn)狀態(tài),便于觀察操作過(guò)程(可選),修改為0后報(bào)錯(cuò)
powerpoint.Visible = 1
# 打開(kāi)PPT文件,并返回Presentation對(duì)象
presentation = powerpoint.Presentations.Open(ppt_path)
# 將打開(kāi)的PPT文件導(dǎo)出為PDF文件(第二個(gè)參數(shù)2表示導(dǎo)出為PDF格式)
presentation.ExportAsFixedFormat(pdf_file, 2)
# 輸出轉(zhuǎn)換完成的信息
print(ppt_path + "轉(zhuǎn)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("轉(zhuǎn)換完成!")
# 選擇目錄并轉(zhuǎn)換PPT到PDF格式,再將PDF轉(zhuǎn)換為長(zhǎng)圖
select_directory()到此這篇關(guān)于Python實(shí)現(xiàn)批量將PPT轉(zhuǎn)換成長(zhǎng)圖的文章就介紹到這了,更多相關(guān)Python PPT轉(zhuǎn)長(zhǎng)圖內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python學(xué)習(xí)筆記基本數(shù)據(jù)結(jié)構(gòu)之序列類(lèi)型list tuple range用法分析
這篇文章主要介紹了Python學(xué)習(xí)筆記基本數(shù)據(jù)結(jié)構(gòu)之序列類(lèi)型list tuple range用法,結(jié)合具體實(shí)例形式分析了Python序列類(lèi)型list tuple range基本概念、定義與使用技巧,需要的朋友可以參考下2019-06-06
Python中搜索和替換文件中的文本的實(shí)現(xiàn)(四種)
本文主要介紹了Python中搜索和替換文件中的文本的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-10-10
Python并發(fā)編程隊(duì)列與多線(xiàn)程最快發(fā)送http請(qǐng)求方式
假如有一個(gè)文件,里面有10萬(wàn)個(gè)url,需要對(duì)每個(gè)url發(fā)送http請(qǐng)求,并打印請(qǐng)求結(jié)果的狀態(tài)碼,如何編寫(xiě)代碼盡可能快的完成這些任務(wù)呢2021-09-09
Ubuntu手動(dòng)編譯源碼安裝Python的詳細(xì)過(guò)程
這篇文章主要介紹了Ubuntu手動(dòng)編譯源碼安裝Python的詳細(xì)過(guò)程,在python官網(wǎng)找到所需版本的python安裝包,下載到Ubuntu系統(tǒng)中,需要的朋友可以參考下2006-08-08
Python基礎(chǔ)之函數(shù)嵌套知識(shí)總結(jié)
今天帶大家回顧python基礎(chǔ)知識(shí),文中對(duì)Python函數(shù)嵌套作了非常詳細(xì)的知識(shí)總結(jié),對(duì)正在學(xué)習(xí)python基礎(chǔ)的小伙伴們很有幫助,需要的朋友可以參考下2021-05-05
python將unicode和str互相轉(zhuǎn)化的實(shí)現(xiàn)
這篇文章主要介紹了python將unicode和str互相轉(zhuǎn)化的實(shí)現(xiàn),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-05-05
打包FlaskAdmin程序時(shí)關(guān)于static路徑問(wèn)題的解決
近期寫(xiě)了個(gè)基于Flask-admin的數(shù)據(jù)庫(kù)管理程序,通過(guò)pyinstaller打包,給別人用,經(jīng)過(guò)幾次嘗試,打包的數(shù)據(jù)一直找不到static里面的樣式文件,查閱資料后,最總把問(wèn)題搞定了。寫(xiě)下處理流程,供后來(lái)人參考2021-09-09
Python新手入門(mén)最容易犯的錯(cuò)誤總結(jié)
這篇文章主要總結(jié)了一些關(guān)于Python新手入門(mén)最容易犯的錯(cuò)誤,希望通過(guò)學(xué)習(xí)本文總結(jié)的十二點(diǎn)易犯錯(cuò)誤點(diǎn),能夠給新手們帶來(lái)一定的幫助,需要的朋友可以參考學(xué)習(xí),下面來(lái)一起看看吧。2017-04-04

