PDF to JPEG

Python

とあるweb申請サイトで書類のアップロードをする際にPDF不可、JPEGのみ指定があったので、簡単に変換できるアプリを作ってみました。


本ツールは、PDFファイルをJPEG画像に変換するシンプルなPythonスクリプトです。
外部の変換ソフトを使用せず、Python環境のみで動作します。

必要なもの

Python がインストールされた環境で、以下のライブラリが必要です。

pip install pypdfium2 pillow

使い方

PDFファイルを指定すると、全ページをJPEG画像として出力します。
出力された画像は、PDFと同じフォルダに保存されます。

python pdf2jpg.py sample.pdf

引数を指定しない場合は、起動後に表示されるファイル選択画面からPDFを選択できます。

サポートについて

本ツールは参考実装として無償で公開しています。
個別のサポートや動作保証は行っておりませんので、あらかじめご了承ください。

# ==================================================
# PDF to JPG Converter
#
# Copyright (c) 2025 Sketlab LLC
# Released under the MIT License.
# https://opensource.org/licenses/MIT
#
# This software is provided "as is", without warranty
# of any kind. No support or maintenance is provided.
# ==================================================

import sys
from pathlib import Path
import tkinter as tk
from tkinter import filedialog
import pypdfium2 as pdfium


# ===== 起動時表示 =====
def show_banner():
    print("=" * 50)
    print("PDF to JPG Converter (C) 2025 Sketlab LLC")
    print("=" * 50)

def select_pdf():
    root = tk.Tk()
    root.withdraw()
    file_path = filedialog.askopenfilename(
        title="PDFファイルを選択してください",
        filetypes=[("PDF files", "*.pdf")]
    )
    
    root.destroy()
    return file_path

def pdf_to_jpg_all_pages(pdf_file: str):
    pdf_path = Path(pdf_file)
    if not pdf_path.exists():
        raise FileNotFoundError("PDFファイルが見つかりません")

    pdf = pdfium.PdfDocument(str(pdf_path))
    page_count = len(pdf)

    scale = 300 / 72  # 300dpi相当

    for i in range(page_count):
        page = pdf.get_page(i)
        bitmap = page.render(scale=scale)
        pil_image = bitmap.to_pil()

        # [元のファイル名.pdf]_p000.jpg
        output_path = pdf_path.with_name(
            f"{pdf_path.name}_p{i+1:03}.jpg"
        )

        pil_image.save(output_path, "JPEG", quality=95)
        print(f"[{i+1:03}/{page_count:03}] 作成: {output_path}")

def main():
    show_banner()

    pdf_file = sys.argv[1] if len(sys.argv) >= 2 else select_pdf()
    if not pdf_file:
        print("PDFが選択されませんでした")
        return

    pdf_to_jpg_all_pages(pdf_file)

main()