使用Python實現批次PPT轉圖片,格式支援PNG、JPG,轉後圖片後批次重新命名

赤三禾發表於2022-09-08

一、指令碼功能

PPT批次轉換圖片,格式支援png、jpg(手動指令碼中改引數)

二、環境說明

使用Windows環境,必須安裝【Microsoft PowerPoint】

三、使用說明

建議新建一個資料夾,將python指令碼和待轉換的PPT(檔名建議不包含中文),放到一個資料夾中

四、實現步驟

  1. 先建立和PPT檔案同名的空資料夾
  2. 將PPT轉換為圖片,放到該資料夾中(圖片預設名稱是幻燈片1.PNG,幻燈片2.PNG。。。)
  3. 將轉換後的圖片批次重新命名,轉換後的名稱是1.png、2.png。。。

五、程式碼

git:github.com/chisanhe/ppt_to_img.git

import os
import win32com.client

'''
   支援轉換為PNG、JPG,搜尋後替換即可
'''
#JPG是17
ppSaveAsJPG = 17
#PNG是18
ppSaveAsPNG = 18

'''將PPT另存為圖片格式
  arguments:
      pptFullName: 要轉換的ppt檔案,
      pptName:轉換後的存放JPG檔案的目錄
      imgType: 圖片型別
'''
def pptToImg(pptFullName, pptName, imgType):
    # 啟動PPT
    pptClient = win32com.client.Dispatch('PowerPoint.Application')
    # 設定為0表示後臺執行,不顯示,1則顯示
    pptClient.Visible = 1
    # 開啟PPT檔案
    ppt = pptClient.Presentations.Open(pptFullName)
    # 另存為圖片
    ppt.SaveAs(pptName, imgType)
    # 退出
    pptClient.Quit()

'''
    多資料夾多圖片檔案重新命名
'''
def renameImg(currentDir):
    #當前目錄下,只獲取所有的資料夾
    folders = [dI for dI in os.listdir(currentDir) if os.path.isdir(os.path.join(currentDir, dI))]
    i = 0;
    for folder in folders:
        #開啟單個資料夾,獲取檔案列表
        fileList = os.listdir(folder)

        #重新命名檔案,規則1、2、3,開發時讀取檔案利於遍歷
        i = 0;
        #遍歷單個檔案
        for file in fileList:
            #為了避免修改其他檔案,只判斷等於PNG、JPG的圖
            fileFix = os.path.splitext(file)[-1]
            if fileFix.lower() == '.png' or fileFix == '.jpg':
                i += 1
                #完整路徑img檔名 + 字尾,F:\my\projects\python\ppt2img\01_single_img/1.png
                imgFullName = os.path.join(currentDir, folder + '/' +  file)
                #完整路徑img檔名不含字尾 F:\my\projects\python\ppt2img\01_single_img
                imgName = os.path.join(currentDir, folder)
                #重新命名
                os.rename(imgFullName, imgName + '/' + (str(i) + fileFix.lower()))


if __name__ == '__main__':
    print("PPT轉圖片開始")
    # #獲取當前路徑
    currentDir = os.sys.path[0]
    #獲取當前檔案列表
    currentDirAllFiles = os.listdir(currentDir)
    #獲取當前目錄下所有字尾是ppt、pptx的檔案,返回值是生成器物件(可迭代)
    currentDirPptFiles = (fns for fns in currentDirAllFiles if fns.endswith(('.ppt', '.pptx')))
    # 當前目錄下所有的PPT檔名,和上述區別在於有無字尾名,返回值是生成器物件(可迭代)
    currentDirPptNames = (os.path.splitext(fns)[0] for fns in currentDirAllFiles if fns.endswith(('.ppt', '.pptx')))
    #fullFileName是檔名稱 + 字尾01_single_img.pptx,fileName是檔名稱不含字尾01_single_img
    for fullFileName, fileName in zip(currentDirPptFiles, currentDirPptNames):
        #完整路徑ppt檔名 + 字尾,F:\my\projects\python\ppt2img\01_single_img.pptx
        pptFullName = os.path.join(currentDir, fullFileName)
        #完整路徑PPT檔名 F:\my\projects\python\ppt2img\01_single_img
        pptName = os.path.join(currentDir, fileName)
        #需要建立一個與PPT同名的資料夾,判斷下,如果不存在則建立,已存在忽略
        if not os.path.exists(pptName):
            os.mkdir(pptName)
           #PPT轉PNG
           pptToImg(pptFullName, pptName, ppSaveAsPNG)

           #PPT轉JPEG
           # pptToImg(pptFullName, pptName, ppSaveAsJPG)

    print("PPT轉圖片完成")

    print("圖片重新命名開始")
    renameImg(currentDir)
    print("圖片重新命名完成,指令碼執行結束")
本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章