Python實現(xiàn)批量將PPT轉(zhuǎn)換成長圖
語言:python 3
用法:點擊運行后,彈出窗口,選擇文件夾,程序運行會將文件夾內(nèi)的所有PPT文件全部轉(zhuǎn)換成PPT長圖,圖片名稱與PPT文件名稱相同,保存位置相同。
如運行中報錯,需要自行根據(jù)報錯內(nèi)容按照缺失的庫
共分享兩種代碼,可以嘗試運行。
代碼1
需安裝庫
#安裝庫 pip install pyautogui #安裝庫 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)用程序為可見狀態(tài),便于觀察操作過程(可選),修改為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") # 關(guān)閉PPT文件 presentation.Close() # 退出PowerPoint應(yīng)用程序 powerpoint.Quit() presentation = None print(ppt_file+"分圖完成!") except Exception as e: print("分圖時發(fā)生錯誤:", 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)) # 創(chuàng)建最終圖像 # 逐個粘貼圖片到最終圖像中 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("合并圖片時發(fā)生錯誤:", 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文件時發(fā)生錯誤,跳過該文件:", str(e)) print("轉(zhuǎn)換完成!") except Exception as e: print("選擇目錄并轉(zhuǎn)換PPT文件時發(fā)生錯誤:", str(e)) # 選擇目錄并轉(zhuǎn)換PPT到PDF格式,再將PDF轉(zhuǎn)換為長圖 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)換為圖像完成!") #將圖片拼接成長圖 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)用程序為可見狀態(tài),便于觀察操作過程(可選),修改為0后報錯 powerpoint.Visible = 1 # 打開PPT文件,并返回Presentation對象 presentation = powerpoint.Presentations.Open(ppt_path) # 將打開的PPT文件導(dǎo)出為PDF文件(第二個參數(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)換為長圖 select_directory()
到此這篇關(guān)于Python實現(xiàn)批量將PPT轉(zhuǎn)換成長圖的文章就介紹到這了,更多相關(guān)Python PPT轉(zhuǎn)長圖內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python學(xué)習(xí)筆記基本數(shù)據(jù)結(jié)構(gòu)之序列類型list tuple range用法分析
這篇文章主要介紹了Python學(xué)習(xí)筆記基本數(shù)據(jù)結(jié)構(gòu)之序列類型list tuple range用法,結(jié)合具體實例形式分析了Python序列類型list tuple range基本概念、定義與使用技巧,需要的朋友可以參考下2019-06-06Python中搜索和替換文件中的文本的實現(xiàn)(四種)
本文主要介紹了Python中搜索和替換文件中的文本的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-10-10Python并發(fā)編程隊列與多線程最快發(fā)送http請求方式
假如有一個文件,里面有10萬個url,需要對每個url發(fā)送http請求,并打印請求結(jié)果的狀態(tài)碼,如何編寫代碼盡可能快的完成這些任務(wù)呢2021-09-09Python基礎(chǔ)之函數(shù)嵌套知識總結(jié)
今天帶大家回顧python基礎(chǔ)知識,文中對Python函數(shù)嵌套作了非常詳細(xì)的知識總結(jié),對正在學(xué)習(xí)python基礎(chǔ)的小伙伴們很有幫助,需要的朋友可以參考下2021-05-05python將unicode和str互相轉(zhuǎn)化的實現(xiàn)
這篇文章主要介紹了python將unicode和str互相轉(zhuǎn)化的實現(xiàn),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-05-05打包FlaskAdmin程序時關(guān)于static路徑問題的解決
近期寫了個基于Flask-admin的數(shù)據(jù)庫管理程序,通過pyinstaller打包,給別人用,經(jīng)過幾次嘗試,打包的數(shù)據(jù)一直找不到static里面的樣式文件,查閱資料后,最總把問題搞定了。寫下處理流程,供后來人參考2021-09-09