業務効率化・自動化の事例として、Powerpoint(パワーポイント)ファイルをPDFに変換する方法を解説します。Pythonスクリプトを動作させるPCにPowerpointアプリケーションがインストールされている必要があります。
使用ライブラリ・モジュール
PythonでWindowsアプリケーションを扱うにはWindowsAPIへアクセスするためのライブラリpywin32
を使用します。またpywin32ではファイルパスをWindowsPath型で指定する必要があるため、pathlib
モジュールを使用します。
Powerpointファイルのページ削除などの操作を行うためにpython-pptx
使用します。
インストール:必要
インストール:不要
インストール:必要(一部ページのみをPDF変換する場合)
インストール
pip
コマンドで pywin32
と python-pptx
ライブラリをインストールします。
・関連記事:Pythonライブラリのインストール(pipの使い方)
Successfully installed ・・・・と表示されればインストールは成功です。(依存関係のある他のライブラリも同時にインストールされます。)
※Python-pptx
, pywin32
は Python3.9.*以下でしか動作しないようです。(2022年1月1日時点)
PowerpointファイルをPDFに変換する
Powerpointファイル全てのページをPDFに変換する方法を解説します。
PythonでPowerpointファイルを扱うためのライブラリPython-pptx
は、PDFを出力する機能を持っていないため、pywin32
でPowerpointアプリケーションを操作することで実現します。
以下のコードはsample.pptx をsample.pdfに変換するサンプルです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | import win32com.client from pathlib import Path #Powerpointアプリケーションの準備 application = win32com.client.Dispatch('Powerpoint.Application') #ファイルパス指定(絶対パスをPathメソッドでWindowsPath型に変換要) pptx = Path('C:/test/sample.pptx') pdf = Path('C:/test/sample.pdf') #プロパティを指定 read_only = True # 読み取り専用 title = False # タイトルの設定 window = False # ウィンドウの表示 # Powerpointファイルを開きPDF形式で保存 presentation = application.Presentations.Open(pptx, read_only, title, window) presentation.SaveAs(pdf, 32) #32=filetype # アプリケーション終了処理 presentation.close() application.quit() presentation = None application = None |
SaveAs()
の第二引数で指定するfiletypeは定数で32=ppSaveAsPDF
を意味しています。
filetypeの詳細はMicrosoft公式ドキュメント(PpSaveAsFileType 列挙 (PowerPoint))のページを参照してください。
ファイルパス指定で使用しているpathlibモジュールの使い方については、以下の記事を参考にしてください。
参考記事:【Python入門】pathlibの使い方(パス操作)
Powerpointの1ページのみをPDFに変換する
スライドの1ページ目のみを抽出してPDFに変換する方法を解説します。以下のようなファイルを例とします。
├── p1
├── p2 –>削除
├── p3 –>削除
└── p4 –>削除
1ページ目のみを変換したい場合は、1ページ以外のページを削除してPDFとして保存します。ページを削除する際にPythonでPowerpointファイルの操作をするためのライブラリpython-pptx
を使用します。
スライドのページを指定するインデックス番号は0から始まるため、スライド1ページ目がインデックス番号0となります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | import win32com.client from pptx import Presentation from pathlib import Path # ファイルパス指定 pptx = 'C:/test/sample.pptx' pptx_p1 = 'C:/test/sample_p1.pptx' pdf = 'C:/test/sample.pdf' # スライド読み込み prs = Presentation(pptx) xml_slides = prs.slides._sldIdLst slides = list(xml_slides) pages = len(slides) #ページ数取得 #1ページ目以外を削除して中間ファイルを別名で保存 for p in range(pages-1, 0, -1): # ページの後ろからインデックス1(2ページ目)までを繰り返す xml_slides.remove(slides[p]) prs.save(pptx_p1) #プロパティを指定 read_only = True # 読み取り専用 title = False # タイトルの設定 window = False # ウィンドウの表示 # Powerpointファイルを開きPDF形式で保存 application = win32com.client.Dispatch('Powerpoint.Application') presentation = application.Presentations.Open(Path(pptx_p1), read_only, title, window) presentation.SaveAs(Path(pdf), 32) # 中間ファイルを削除 os.remove(pptx_p1) # アプリケーション終了処理 presentation.close() application.quit() presentation = None application = None |
フォルダ内の全てのPowerpointファイルをPDFに変換する
以下のディレクトリ構成を例として、特定のディレクトリ内の全てのPowerpointファイルをPDFに変換する方法を解説します。
├── sample1.pptx
├── sample2.pptx
└── sample3.pptx
glob.glob関数を使用し指定ディレクトリ内の対象ファイルリストを取得して、そのリストをfor文でループして1ページ目のみを変換する処理を繰り返します。
・関連記事:Pythonでディレクトリ名(フォルダ名)・ファイル名の一覧取得(os, glob)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | import win32com.client from pptx import Presentation from pathlib import Path import os import glob # PDF変換関数(1ページ目のみ) def export_pdf(pptx, pdf): prs = Presentation(pptx) xml_slides = prs.slides._sldIdLst slides = list(xml_slides) pages = len(slides) #ページ数を取得 #1ページ目以外を削除して中間ファイルを保存 for p in range(pages-1, 0, -1): # 後ろからインデックス1(2ページ目)までを繰り返す xml_slides.remove(slides[p]) prs.save(temp_file) # Powerpointファイルを開きPDF形式で保存 application = win32com.client.Dispatch('Powerpoint.Application') presentation = application.Presentations.Open(Path(temp_file), read_only, title, window) presentation.SaveAs(Path(pdf), 32) #32=filetype # 中間ファイルを削除 os.remove(temp_file) # アプリケーション終了処理 presentation.close() application.quit() presentation = None application = None # パス設定 target_path = 'C:/test/' filelist = glob.glob(target_path + '*.pptx') # 中間ファイルパス設定 temp_file = target_path + 'temp.pptx' # プロパティを指定 read_only = True # 読み取り専用 title = False # タイトルの設定 window = False # ウィンドウの表示 # 対象pptxファイルリストを使いPDF変換を繰り返し処理 for pptx_path in filelist: pdf_path = target_path + Path(pptx_path).stem + '.pdf' # PDF保存先パスを指定 export_pdf(pptx_path, pdf_path) # PDF変換関数を呼び出し |
PythonでPowerpointファイルをPDFに変換する方法を解説しました。
PDFファイルの操作については以下の記事も参考にしてみてください。
・関連記事:PythonでPowerpointファイル(pptx)を画像に変換する
・関連記事:PythonでPDFファイルを結合する(PyPDF2)
・関連記事:PythonでPDFファイルを分割する(PyPDF2)
・関連記事:PythonでPDFのページサイズを取得(PyPDF2)