ぼんやりDTP

DTPに関係したりしなかったりするぼんやりとした話をなんとなく。

cpdf でPDFをマージする

自炊したPDFをコマンドラインでマージしたい。

pdftk でやるかと思って、あらためて入れようとぐぐったら、El Capitan 以降の動作は怪しいとのこと。

ついでなので他にないかとぐぐったら cpdf なるツールがあったので試す。

↑からバイナリをダウンロードして、パスの通ったディレクトリ(/usr/local/bin等)に置く。

あるいはソースからビルドしてインストール。

マージするコマンドは下記のような感じ。

例)

input_1.pdf の1-2ページと input_2.pdf の3-4ページをマージして out.pdf に出力する場合。

cpdf input_1.pdf 1-2 input_2.pdf 3-4 -o out.pdf

自分がスキャニングしたばかりのPDFは紙質などの関係で大体以下のような感じでファイル名を付けている。

  1. hoge_jacket.pdf(カバー1-4、カバーは無くしたりスキャニングして無い場合がある)
  2. hoge_cover.pdf(本体の表紙1-4、ハードカバーの場合はスキャニングして無い場合がある)
  3. hoge_body.pdf(本体の本文)
    • あるいは、hoge_body-1.pdf、hoge_body-2.pdf…

それを踏まえてif文も付けた以下のようなスクリプトを考えた。

PDFがあるディレクトリで下記のスクリプトを実行すると、マージしてディレクトリの名称のPDFに出力する。

if [ -e *_jacket.pdf ] && [ -e *_cover.pdf ]; then
cpdf *_jacket.pdf 1-2 *_cover.pdf 1-2 *_body*pdf *_cover.pdf 3-4 *_jacket.pdf 3-4 -o "${PWD##*/}.pdf"
elif [ ! -e *_jacket.pdf ] && [ -e *_cover.pdf ]; then
cpdf *_cover.pdf 1-2 *_body*pdf *_cover.pdf 3-4 -o "${PWD##*/}.pdf"
elif [ -e *_jacket.pdf ] && [ ! -e *_cover.pdf ]; then
cpdf *_jacket.pdf 1-2 *_body*pdf *_jacket.pdf 3-4 -o "${PWD##*/}.pdf"
fi

jacket.pdfを分割してスキャニングしたPDFの結合

cpdf *_jacket-1.pdf *_jacket-2.pdf -o "${PWD##*/}_jacket.pdf"

cover.pdfを分割してスキャニングしたPDFの結合

cpdf *_cover-1.pdf *_cover-2.pdf -o "${PWD##*/}_cover.pdf"