📄

macOSのCLIでpdfの全ページを画像(png)に変換するシェルスクリプト

2024/07/05に公開

ただの個人メモです。
ググってると、複数ページのPDFに対応してるものがなかった気がしたので作りました。

カレントディレクトリに存在する全てのpdfファイルの全ページをpng画像に変換し、pdfファイルごとにディレクトリを作成して格納するスクリプトです。

ImageMagickをCLIで使えればいいので、たぶんmacOSでなくても使えると思います。

手順

1. ImageMagickをインストール

brewImageMagickをインストールしてください。後述するシェルスクリプトで呼び出して、pdfをpngに変換するために利用します。

brew install imagemagick

2. シェルスクリプトのファイルを作成

実行権限を与えてシェルスクリプトを作ります。
今回は、例としてファイル名をconvert_all_pdf_to_png.shとし、viで起動することを想定しています。この辺りは自由にして大丈夫です。

touch convert_all_pdf_to_png.sh
chmod +x convert_all_pdf_to_png.sh
vi convert_all_pdf_to_png.sh

3. シェルスクリプトを書く

以下のスクリプトをconvert_all_pdf_to_png.shに書いて保存する。
記載の通り-densitymagick コマンドの解像度を300以上にすると、pdfの文字が画像になっても視認性が下がらずに済みます。

#!/bin/bash

# カレントディレクトリ内のすべてのpdfファイルを検索
find . -name "*.pdf" -print0 | while IFS= read -r -d '' file; do
    # ファイルのディレクトリと拡張子以外のファイル名を取得
    dir_name=$(dirname "$file")
    base_name=$(basename "$file" .pdf)

    # 画像ファイルを格納するディレクトリを作成
    mkdir -p "$dir_name/$base_name"

    # 各pdfファイルのすべてのページをpng画像に変換し、作成したディレクトリに保存
    magick -density 300 "$file" "$dir_name/$base_name/${base_name}_page.png"
done

4. シェルスクリプトを実行

./convert_all_pdf_to_png.shとしスクリプトを実行すると、以下の通りpdfファイル名と同じディレクトリが作られて、その中に各ページごとのpngファイルが作られています。

pdfファイルの数やページ数によっては時間がかかるので、実行してから完了するまで少し待って下さい。

$ ls 
convert_all_pdf_to_png.sh sample1.pdf sample2.pdf

$ ./convert_all_pdf_to_png.sh

$  ls
convert_all_pdf_to_png.sh sample1 sample1.pdf sample2  sample2.pdf # ディレクトリができてる

$ ls sample1
sample1_page-0.png sample1_page-1.png sample1_page-2.png sample1_page-3.png sample1_page-4.png # pngファイルがページごとにある

以上、お疲れ様でした!

Discussion