トップ 最新

ただのにっき

2010-12-17(金) [長年日記]

自炊PDF制作をrake化してみた(途中)

目的と手段が入れ替わってる自炊本シリーズ第N段。

自炊本制作はこないだベストプラクティスとか書いた以上、セッティングはだいたい詰められたんだけど、まだ作業が最適化されてないのが気に食わない。具体的には余白をきれいに除去するためにpdf2kindleを何度も実行してパラメタを詰めるところね。PGM→PNG化の処理を繰り返すために、スクリプトの特定の関数だけを実行したいわけだ。

そのためにいちいちスクリプトをいじるのはアホらしいし、そもそも複数の工程が含まれているんだからここはRakeの出番だろ。というわけでRake化してみているのだが、白状すると自分でRakefile書くの始めてなんだよな、今ごろ何言ってんだという話だけど*1。まぁ、いい練習台を見つけたということで。

で、それっぽく動くようなものはできたものの、依存関係がまだうまく解決できないんだよなぁ。ソースが1個しかないけど、途中の生成物が複数できる(しかも個数未定)場合のうまい指定方法がわからん。

Kindle最適化PDF生成の工程がどうなってるかというと、こんな感じ:

  1. ScanSnapでスキャンしたPDFから、1ページ単位の画像(pgmフォーマット)を切り出す。スクリプト実行前には何個のpgmファイルができるかわからない。
  2. pgmファイルから余白を削除したpngファイルを作る。ここは1対1の関係なのでまさにRakeの面目躍如。ちなみに何度も実行してチューニングしたいのはこの工程。
  3. 元PDFのメタデータを別途抽出する。
  4. pngファイル群を結合し、メタデータを設定して、最終的なPDFファイルを生成する。

問題は途中の工程で生成される画像ファイルの数がわからないことで、ファイルリストが作れない。結果として最初のタスクの依存関係がうまく書けない。たぶんRakeマスターなら知ってるうまい技があると思うんだけどなー。

なお、工程1をやめて、最初から(PDFではなく)画像としてスキャンするというソリューションもあるにはある。これは最終手段。

Tags: ebook

*1 コンパイル不要な言語で簡単なスクリプトを書く程度の日常だと、Make/Rakeが必要になる機会はあんまりない。もちろん探せばいくらでもあるんだけど。