コマンドラインで自炊したPDFのページを並び替える

自炊した本を読んでいたら、ページの並びが間違っていることに気づきました。1〜160ページは正常、161〜270ページが逆順、271〜364ページは正常。つまり、160ページまで読み、270ページへ飛び、戻りながら161ページへ、そして271ページへ飛び、という順序の本になっていました。

実物の本は廃棄してしまったので、再スキャンはできません。そこで、PDFファイルのページ順序を並び替えることにしました。

pdftk

https://www.pdflabs.com/tools/pdftk-the-pdf-toolkit/
pdftkをインストールします。(筆者の実行環境はUbuntu16)
$ sudo apt install pdftk
(1) まず、input.pdfファイルを1〜160ページ、161〜270ページ、271〜364ページの3つに分解します。
$ pdftk input.pdf cat 1-160 output part1.pdf
$ pdftk input.pdf cat 161-270 output part2.pdf
$ pdftk input.pdf cat 271-364 output part3.pdf
(2) part2.pdfを1ページ1pdfに分解します。
# part2_old_split.sh
mkdir part2
for ((i=1; i <= 110; i +=1)); do
pdftk part2.pdf cat $i output part2/$i.pdf
done
$ bash part2_old_split.sh
(3) 各ページのpdfを希望の順序で指定して、part2_new.pdfを作ります。
# part2_new_join.sh
echo "pdftk \\"
for ((i=110; i >= 1; i -=1)); do
echo "part2/$i.pdf \\"
done
echo cat output part2_new.pdf
$ bash part2_new_join.sh | bash
(4) part1.pdf、part2_new.pdf、part3.pdfを結合して、output.pdfを作成します。
$ pdftk \
part1.pdf \
part2_new.pdf \
part3.pdf \
cat output output.pdf
(5) 必要に応じて、ScanSnapオーガナイザーで、OCR処理して、検索可能なテキストを追加します。

ボツになった方法 ImageMagick convert

まず、convertコマンドpdfファイルをjpg画像に分解します。(自炊したPDFなので、1ページ1画像)
$ convert input.pdf page.jpg
次に、convertコマンドで、jpg画像を希望の順序に指定して、pdfに結合します。
$ convert \
page-0.jpg \
page-1.jpg \
省略
page-159.jpg \
page-269.jpg \
省略
page-160.jpg \
page-270.jpg \
省略
page-363.jpg \
output.pdf
ページ数が多すぎたようで、処理が進みません。システムモニターを見ると、CPUの1コアが100%、32Gのメモリも使いきり、システムモニターの表示もカクカクしていました。コントロールCで中止しました。