📄
macOSのCLIでpdfの全ページを画像(png)に変換するシェルスクリプト
ただの個人メモです。
ググってると、複数ページのPDFに対応してるものがなかった気がしたので作りました。
カレントディレクトリに存在する全てのpdfファイルの全ページをpng画像に変換し、pdfファイルごとにディレクトリを作成して格納するスクリプトです。
ImageMagickをCLIで使えればいいので、たぶんmacOSでなくても使えると思います。
手順
1. ImageMagickをインストール
brew
でImageMagickをインストールしてください。後述するシェルスクリプトで呼び出して、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
に書いて保存する。
記載の通り-density
で magick
コマンドの解像度を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