"""
PowerPoint (.pptx) ファイルをPDF形式に変換するスクリプトです。
このスクリプトはWindows環境にインストールされたMicrosoft PowerPointアプリケーションと
comtypesライブラリを使用して、PowerPointプレゼンテーションをPDFファイルとして保存します。
スクリプトを直接実行する場合、コマンドライン引数として入力PowerPointファイルのパスを渡すことで、
そのファイルをPDFに変換します。出力パスが指定されない場合、入力ファイル名から自動的に決定されます。
:doc:`pptx2pdf_usage`
"""
import os
try:
import comtypes.client
except Exception:
print("\npptx2pdf.py: Import error: comtypes.client")
input("Install: pip install comtypes\n")
[ドキュメント]
def pptx_to_pdf(input_path, output_path=None):
"""
指定されたPowerPointファイルをPDF形式に変換します。
この関数はMicrosoft PowerPointアプリケーションをCOMオートメーション経由で操作し、
指定されたPowerPointプレゼンテーションを開き、PDF形式で保存します。
変換が成功した場合は出力PDFファイルのパスを返し、失敗した場合はNoneを返します。
PowerPointアプリケーションは処理完了後、またはエラー発生時に終了されます。
出力パスが指定されない場合、入力ファイルと同じディレクトリに同じファイル名(拡張子のみ.pdf)で
PDFファイルが作成されます。
:param input_path: 変換するPowerPointファイルのパス(例: "C:/path/to/document.pptx")。
:type input_path: str
:param output_path: 出力するPDFファイルのパス(例: "C:/path/to/output.pdf")。
指定しない場合、入力パスの拡張子を.pdfに変更したパスが自動的に使用されます。
:type output_path: str, optional
:returns: 変換が成功した場合、出力されたPDFファイルの絶対パス。失敗した場合はNone。
:rtype: str or None
"""
powerpoint = comtypes.client.CreateObject("PowerPoint.Application")
powerpoint.Visible = 1
input_path = os.path.abspath(input_path)
if output_path is None:
output_path = os.path.splitext(input_path)[0] + ".pdf"
else:
output_path = os.path.abspath(output_path)
print(f" Attempting to open PowerPoint file: '{input_path}'")
presentation = None
try:
presentation = powerpoint.Presentations.Open(input_path, WithWindow=False)
presentation.SaveAs(output_path, 32)
presentation.Close()
print(f" Successfully converted to PDF: '{output_path}'")
return output_path
except Exception as e:
print(f" Error converting '{input_path}' to PDF: {e}")
if presentation is not None:
try:
presentation.Close()
except Exception:
pass
return None
finally:
powerpoint.Quit()
if __name__ == "__main__":
import sys
input_path = sys.argv[1] if len(sys.argv) > 1 else None
output_path = sys.argv[2] if len(sys.argv) > 2 else None
if not input_path:
print("Usage: python pptx2pdf.py input.pptx [output.pdf]")
input("\nPress ENTER to terminate>>\n")
raise SystemExit(1)
pptx_to_pdf(input_path, output_path)
print("\nProgram execution completed.")
input("\nPress ENTER to terminate>>\n")