PDFを大量に結合する - ImageMagick(convert)編

macOS上でPDFを結合するには「プレビュー」や、「Automator」などを使用する方法がありますが、今回はコマンドラインでサクッと実行する方法についてメモしておきます。

ImageMagickの導入

PDFtkなど専用ツールもありますが、ここではいにしえから伝わりし、コマンドラインで画像編集が行えるImageMagickconvertコマンドを利用します。

インストール

brewで一発です。PDFを編集するためにはImageMagickの他にghostscriptが必要となりますが、こちらもbrewで入れることができます。

$ brew install gs
$ brew install imagemagick

PDFを結合する

基本的な実行方法

convertコマンドの実行は非常に簡単。連結したいファイルを列挙していき、最後に出力ファイル名を記述するだけです。以下の例だと a.pdf と c.pdf を結合し、output.pdfを新規に作成してくれます。

$ convert a.pdf b.pdf output.pdf

もちろんワイルドカードなどの使用もOK。

$ convert *.pdf output.pdf

なお、ImageMagickは拡張子(.pdf)で最終的な出力フォーマットを決定していますので、出力ファイル名の拡張子のつけ忘れにご注意を。

もっとキレイに出力したい

入力ファイルにもよるのかもしれませんがデフォルだと汚い状態で出力されます。困った、困った。というわけで実行時にオプションを追加します。

$ convert -density 400 -colorspace RGB *.pdf output.pdf
オプション 意味
-density 解像度です。デフォルトは72。
-colorspace 色空間の指定を行います。RGBかCMYKを指定。

実際に見比べると一目瞭然ですね。サンプル画像がAWSの請求書なのは確定申告の作業をしているからですw

これでかなりキレイになってくれますが、残念ながら実行時間がそれなりにかかってしまいます。オプション未指定のときと比べると有に数倍はかかります。大量にファイルがある場合は注意が必要です。

実際に計測してみると、約1.3秒で終わっていた処理が25.25秒まで激増しています。単純計算で18倍の差!

### デフォルト
$ time convert a.pdf b.pdf c.pdf
convert a.pdf b.pdf c.pdf  0.75s user 0.16s system 65% cpu 1.394 total

### オプションあり
$ time convert -density 400 -colorspace RGB a.pdf b.pdf c.pdf
convert -density 400 -colorspace RGB a.pdf b.pdf c.pdf  18.55s user 4.36s system 90% cpu 25.250 total

処理時間とキレイさはトレードオフなので、解像度の数値を多少減らすなどして、調整を行っていただければと。

ファイル容量を軽くしたい

ちなみに今回の方法だと、時間がかかるだけならまだ良いのですが、解像度をアップしたツケ以上にムダにファイルサイズが大きくなります。

メールで送信する場合や、印刷する際などに容量制限で弾かれてしまうことも考えられます。色々と方法はあるようですが、macOS付属の「プレビュー」で開いた後に保存し直すと良い感じに容量を削ってくれます。手元のファイルだと100M以上あった物が20M程度まで落ちました。まぁここらへんはファイルにもよるので何ともですが、ファイル数が少ない場合はお試しくださいませ。

参考サイト