2010年12月28日火曜日

Sony Reader 用に 自炊 PDF を調整する手順の防備録

自炊した PDF は、そのままでも Sony Reader で表示できますが、 文字がかすれたりして、かなり読みにくいものになります。 そこで、一手間かけて、Sony Reader 専用の PDF ファイルに変換することにしました。 以下は、その手順の防備録です。

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

0 件のコメント:

コメントを投稿