先日、PDFが太ってしまうというエントリで、InkscapeでPDFファイルを編集するとおそらくは画像を圧縮できないせいでファイルサイズが大きくなってしまうことを書いた。そして、そのエントリでは、解決方法としてInkscapeで編集するのではなく(あるいは画像の抜き出しまでをInkscapeで処理するだけで)、最終的なPDF書き出しをOpenOfficeで行うという回避方法を採用したことを報告した。

その流れの業務はその後もありそうなのだけれど、そちらの方はそれでいい。ところが、今日、またPDFで原稿が届いた。こちらの方は、1冊の小冊子なのだけれど、ページごとにPDFとして出力されている。これを1枚のPDFにまとめるのはPDF Shufflerで一発。けれど、このページの数枚に差し替えがあり、それが先方のミスでページサイズが他と違う。こういうときは、Inkscapeで処理してサイズを揃えればいい。そして、その結果としてファイルサイズが大きくなる。それだけではない。どうやらこの原稿PDF、もともと画像が圧縮されていない。いや、小冊子の仕上げにはその方が品質が良好なのはわかるけれど、こっちはテキストさえ読めればいい翻訳商売。なので、圧縮して軽くしておきたい。

ということで、いちいちOpenOfficeにもっていかずにPDFの画像を圧縮したい。その方法は、前回のときに見つけてあって、あのPDF万能ツールのGhostScriptで一発とわかっている。こちらのブログに詳しい解説があって、

gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -dAutoFilterColorImages=false -dColorImageFilter=/FlateEncode -sOutputFile=output.pdf -c .setpdfwrite -f input.pdf

ということになるらしい。これは非損失のzip圧縮を行うということ。JPEG圧縮なら、FlateEncodeのところをDCTEncodeに変えればOK。もちろん、後者の方が劇的にサイズは小さくなる。

まあ、このコマンドを走らせればそれで用は済むのだけれど、もちろんGUI派の私としては、これで満足というわけにはいかない。そこで、何か方法がないかと考えた。GhostscriptのGUIなら、以前にかおりんさんにPDF→画像変換のツールを作成していただいている。同じgsだから、これをちょっと書き換えればどうにかなるのではないだろうか。

プログラミングなんてまったく知らない私だけれど、要はコマンドの部分だけ、入れ替えればいいのではないか。そこで、やってみたのがこれ。

pygsconp.zip

かおりんさんのpygsconvのvをpに変えたんだけれど、よく考えたらcompressはmだった。英語商売が顔を赤らめて逃げ出してしまう名前のつけ方。笑うしかないが、それはそれとして、もっと恥ずかしいのはUIの変え方がわからずに無効なオプションが残っていること。そのくせ、本当は上記のzip圧縮とJPEG圧縮をオプションに入れたかったのはできず。もちろん、いっぱいゴミも残っているし、これで動くのが奇跡なぐらい。それでもやってみたら、ちゃんと太ったPDFがスリムになった。ものによっては20%ぐらい。ただし、すでに圧縮済みのものを処理したら、逆にサイズが2倍にもなってしまった。そのあたりも、ツールとしては信じられないほどいい加減。

とまあ、プログラマの方から見たらお笑いにすらならないツールだけれど、これで結構役に立ちそうな気がする。かおりんさんにつくっていただいたものと一緒のフォルダに入れて、便利に使わせてもらおうと思う。