訴訟案件を扱っていると、多数の書類を証拠として提出したい、という場面に遭遇することがあります。依頼者から書類をお預かりしてスキャナで取り込むのですが、最初は新しい日付から古い日付の順番で取り込んだところ、証拠として使うときには古い日付から新しい日付の順番で並べたい、ということが、あるかもしれません。

 これが数ページ程度であれば、頑張ってマウスを動かして並びかえるのですが、50ページにも及ぶような場合、人力で進めていては、いつ終わるか分かりません。

 そのような場合はGhostscriptとスクリプト言語(ここではRuby)を使って、簡単に並びかえることができます。

 特定のPDFをページごとに分割する方法は以下のとおりです。入力ファイルinput.pdfを前から順番に1ページずつ分割していき、output-001.pdf output-002.pdf ...に出力します。

gs -sDEVICE=pdfwrite -o output-%03d.pdf input.pdf

 入力に複数のファイルを指定すれば、指定したファイルを前から順番に結合して、ひとつのPDF文書として扱います。-oオプションに%形式のプレースホルダが含まれている場合、出力をページごとのファイルにしてくれるようです。詳しくはGhostscriptのホームページでドキュメントを参照してください。

 複数のPDFを結合する方法は以下のとおりです。3つの入力ファイルinput1.pdf input2.pdf input3.pdfを前から順番に結合し、出力ファイルoutput.pdfに出力します。

gs -sDEVICE=pdfwrite -o output.pdf input1.pdf input2.pdf input3.pdf

 正順にページが並んだPDFファイルから、逆順にページが並んだPDFファイルを作成する場合、まずは全ページを1ページずつのPDFファイルに分割し、次にそれらのファイルを逆順に並べて結合します。逆順に並べるのはスクリプト言語を使うと楽です。

# ページごとに分割されたファイルをpage-001.pdf page-002.pdf ...とする
a=Dir.glob("page*.pdf")
`gs -sDEVICE=pdfwrite -o output.pdf #{a.reverse.join(" ")}`

 ワンライナーで書いてしまってもよいですし、irbを使ってインタラクティブに実行してもよいと思います。

 Macを使っている場合、GhostscriptはHomebrewでインストールできます。Linuxなどの場合は、各環境が用意しているパッケージマネージャを使うことになるでしょう。Windowsを使っている場合、動作環境によって、コマンドがgsではなくgswin64cなど別の名前になります。

 コマンドでPDFのページ操作を行うことが多いならば、パスが通った場所に独自のコマンドを作っておくと便利です。(これが理解できる人は、自分で作ってしまうと思いますが。)

% cat ~/bin/gspdf
gs -sDEVICE=pdfwrite $*