"""
概要:
    PDFファイルを画像に変換するスクリプトです。
詳細説明:
    コマンドライン引数から入力ファイル名、出力ディレクトリ、出力フォーマットを受け取り、
    PyMuPDFを利用してPDFの各ページを画像ファイルとして保存します。
関連リンク:
    pdf2img_usage
"""
import os
import sys
try:
    import fitz  # PyMuPDF
except:
    print("\npptx2pdf_recursive.py: Import error: fitz")
    input("Install: pip install pymupdf\n")


infile = 'output.pdf'
out_dir = 'images'
image_format = 'png'


nargv = len(sys.argv)
if nargv >= 2: infile = sys.argv[1]
if nargv >= 3: out_dir = sys.argv[2]
if nargv >= 4: image_format = sys.argv[3]


def convert_pdf_to_images(pdf_file, out_dir, image_format):
    """
    概要:
        指定されたPDFファイルを開き、各ページを画像ファイルとして保存します。
    詳細説明:
        出力先ディレクトリが存在しない場合は新規に作成します。
        PDFの全ページを順に読み込み、指定されたフォーマットの画像ファイルとして書き出します。
    引数:
        :param pdf_file: 読み込むPDFファイルのパス。
        :type pdf_file: str
        :param out_dir: 画像を保存する出力先ディレクトリのパス。
        :type out_dir: str
        :param image_format: 保存する画像ファイルの拡張子またはフォーマット名。
        :type image_format: str
    戻り値:
        :returns: なし。
        :rtype: None
    """
    print(f"Input file: [{pdf_file}]")
    print(f"Output dir: [{out_dir}]")
    print(f"Output format: [{image_format}]")
     
     
    if not os.path.exists(out_dir):
        print(f"Create [{out_dir}]")
        os.makedirs(out_dir)

    print(f"Open [{pdf_file}]")
    doc = fitz.open(pdf_file)
    print(f"Exporting as images [{image_format}] to [{out_dir}]")
    for page_num in range(len(doc)):
        page = doc.load_page(page_num)
        pix = page.get_pixmap()
        output_path = os.path.join(out_dir, f'page_{page_num + 1}.{image_format}')
        pix.save(output_path)

if __name__ == '__main__':
    current_dir = os.getcwd()
    pdf_path = os.path.join(current_dir, pdf_file)

    convert_pdf_to_images(pdf_path, out_dir, image_format)