【作業効率化】PDFをPNG変換する方法
この記事は、ImageMagickを用いてPDFをPNGに変換するスクリプトを紹介しています。ImageMagickは、多様な画像処理タスクに利用可能ですが、セキュリティリスクも考慮しましょう。
前提条件
このコマンドを使用するための前提条件は以下の通りです:
-
Bashシェルの存在
Bashがインストールされていること。
※ 多くのLinuxディストリビューションおよびmacOSでは、Bashがデフォルトでインストールされています。 -
ImageMagickのインストール
スクリプトは、convert
コマンドを使用してPDFファイルをPNGに変換します。このコマンドはImageMagickソフトウェアパッケージの一部です。したがって、ImageMagickをインストールして設定する必要があります。ImageMagickをインストールするには、ほとんどのLinuxディストリビューションで以下のコマンドを使用できます:
sudo apt-get install imagemagick # Ubuntu/Debian系 sudo yum install ImageMagick # CentOS/RedHat系
macOSでは、Homebrewを使用してインストールできます
brew install imagemagick
-
適切な権限
指定されたディレクトリにアクセスし、ファイルを読み書き(および削除)する権限が必要です。 -
引数として有効なディレクトリの指定
スクリプトを実行する際には、コマンドライン引数として読み取り可能なディレクトリパスを指定すること。 -
PDFファイルが存在している
指定されたディレクトリ内に、変換するPDFファイルが存在すること。
Script
指定されたディレクトリ内の全てのPDFファイルをPNGファイルに変換するツールです。
ちなみに変換が成功すると、元のPDFファイルは削除されるようになっています。
#!/bin/bash
# コマンドライン引数からディレクトリパスを取得
DIR="$1"
# 引数が指定されていない、または無効な場合はエラーメッセージを表示
if [ -z "$DIR" ]; then
echo "Error: No directory specified."
exit 1
fi
if [ ! -d "$DIR" ]; then
echo "Error: Invalid directory specified."
exit 1
fi
# 指定されたディレクトリに移動
cd "$DIR"
# PDFファイルの数をカウント
total_files=$(ls *.pdf 2> /dev/null | wc -l)
current_file=0
if [ $total_files -eq 0 ]; then
echo "No PDF files found in the specified directory."
exit 0
fi
# PDFファイルを一つずつ処理
for pdf in *.pdf; do
# ファイル名から拡張子を除去
filename=$(basename -- "$pdf")
filename_noext="${filename%.*}"
# PNGに変換
convert -density 300 "$pdf" "$filename_noext.png"
# 変換に成功したら元のPDFを削除
if [ $? -eq 0 ]; then
rm "$pdf"
let current_file++
echo "Converted $pdf to $filename_noext.png ($current_file/$total_files)"
else
echo "Error converting $pdf"
fi
done
echo "Conversion completed."
コマンドライン引数
引数からディレクトリパスを取得します。
DIR="$1"
引数の検証
指定された引数が無効または指定されていない場合、エラーとなります。
if [ -z "$DIR" ]; then
echo "Error: No directory specified."
exit 1
fi
if [ ! -d "$DIR" ]; then
echo "Error: Invalid directory specified."
exit 1
fi
ファイルの変換
この処理により、ディレクトリ内の各PDFファイルをPNGに変換します。変換が成功した場合、元のPDFファイルは削除されます。
for pdf in *.pdf; do
filename=$(basename -- "$pdf")
filename_noext="${filename%.*}"
convert -density 300 "$pdf" "$filename_noext.png"
if [ $? -eq 0 ]; then
rm "$pdf"
let current_file++
echo "Converted $pdf to $filename_noext.png ($current_file/$total_files)"
else
echo "Error converting $pdf"
fi
done
convert
コマンドは、ImageMagick パッケージの一部で、多くの画像形式間での変換を行うことができます。このスクリプトでは、-density
オプションを使用して、変換された画像の解像度を300DPIに設定しています。
ImageMagick
システム開発ではよく目にするオープンソースの画像処理系ライブラリですが、使いこなせば非エンジニアでも活躍してくれる便利さんです。
JPEG to PNG
convert
コマンドを利用し、一つのフォーマットから別のフォーマットに画像を変換することができます。
※ 上記で紹介したサンプルコードでは pdf to png
です
$ convert input.jpg output.png
プロパティの表示
画像ファイルのプロパティ(サイズ、色、フォーマットなど)を表示します。
$ identify image.png
上書き
元の画像を直接変更することができます。convertコマンドは新しいファイルを作成しますが、mogrifyは元のファイルを上書きします。
mogrify -resize 800x600 image.png
合成
二つの画像を合成します。
composite overlay.png background.png output.png
※ この他にもいろいろあります。
共有
ImageMagickをがっつり活用すれば、有料サービスでやってくれるようなこともできちゃったりするので、画像処理系タスクの多い方は勉強してみてもいいかもしれません。
※ ただし、ちらほらと脆弱性も報告されているようです。
今回作成したツール: PDF to PNG