PDF ファイルから画像を取り出す
自炊した PDF ファイルは画像のみで構成されていますので、その画像を取り出します。
この例では、page-
連番.jpg という名前で取り出されます。
$ mkdir tmpdir $ cd tmpdir $ pdfimages -j fromdir/元文書.pdf page
表紙を編集
表紙を読み込む際際、可能であれば切断せず、長尺読み取り機能を利用して読み込んでいます。
自炊 PDF を作成する際に、ScanSnap 付属のソフトウェアで90度回転したりトリミングしたりして、
PDF ビュワーで表示させる分には問題ないように編集しています。
ところが pdfimages
はこれを処理できないようで、編集前の画像をそのまま出力します。
これでは困るので、gimp
で表紙などを編集します。
基本的に向きの変更とトリミングのみ。
この例は、カバーと帯の表裏を編集する場合です。
$ gimp page-00[0-3].jpg
画素数の変更と余白の切り落とし
ImageMagick の convert
で処理します。
Sony Reader の画素数は 600 x 800 らしいのですが、画像を表示する場合は 584 x 754 にあわせると、
劣化が発生しないそうです。
余白部分を多少削ると、文字の表示に使用できる面積が増えます。
削りすぎに注意。
$ mkdir a $ (for f in page-*.jpg; do convert -resize 654x824 -type GrayScale -shave 35x35 -normalize $f a/$f; done)
表紙やイラストなど、余白がない頁は別枠で変換します。
$ (for f in page-00[0-3].jpg; do convert -resize 584x754 -type GrayScale -normalize $f a/$f; done)
調整済み PDF ファイルの作成
ImageMagick の convert
で処理します。
$ convert a/*.jpg a.pdf
ただ、convert
は作成する PDF ファイルのタイトル属性に、
作成するファイル名を設定します。
Sony Reader は、ファイルの一覧で、この属性を表示するのですが、
日本語の名前だと文字化けします。
属性が設定されていなければファイル名が使用されるのですが、
ファイル名に日本語が使用されている場合は問題ありません。
私の使用している版の ImageMagick では、 この動作をしないようにするオプションが存在しませんので、 ソースコードを変更して対応しました。
--- coders/pdf.c.back Wed Apr 28 22:05:40 2010 +++ coders/pdf.c Tue Dec 28 15:33:26 2010 @@ -2459,9 +2459,11 @@ (void) FormatMagickString(buffer,MaxTextExtent,"%lu 0 obj\n",object); (void) WriteBlobString(image,buffer); (void) WriteBlobString(image,"<<\n"); +#if 0 (void) FormatMagickString(buffer,MaxTextExtent,"/Title (%s)\n", EscapeParenthesis(image->filename)); (void) WriteBlobString(image,buffer); +#endif seconds=time((time_t *) NULL); #if defined(MAGICKCORE_HAVE_LOCALTIME_R) (void) localtime_r(&seconds,&
これで、Sony Reader 上でそれなりに読める PDF の完成です。 画質の改善は、今後の課題ということで。
おまけ: Solaris 機から Sony Reader 用の SDHC カードに書き込む
Sony Reader 用に調整した PDF ファイルは、
/m/books0/00-Sony-Reader/
にまとめて置いています。
Sony Reader は直接接続せず、SDHC カードを介して、PDF を渡すようにしています。
ファイルを一つ一つコピーするのは面倒なので rsync
コマンドで一発。
--modify-window=1
を忘れると、毎回書き込みが発生するので要注意。
$ rsync -a --modify-window=1 -v /m/books0/00-Sony-Reader/ /media/NO\ NAME/books