忙しいSEが自炊した電子書籍(PDF)を効率よく読む方法

2011-12-15

忙しいSEが自炊した電子書籍(PDF)を効率よく読む方法

一応、それなりに頑張りたい年頃なので、所蔵する大量の未読技術書を自炊して電子化(PDF)したものの、電子化したまま所蔵するという、紙がデータに変わっただけで状況が変わってないです。( ,,゜Д゜)   少しだけ頑張って、dropboxにPDFをアップして、スマホとの共有を可能にしたもののそのまま所蔵してしまうのは変わらない。   やはり、いかに為になるとはいえ、つまらないことが分かりきっている作業には、人間は時間を使わない。 しかも、働いている身としては、PDFを読めるのは朝・晩の通勤時間 or 夜寝る前。 これでは、何百ページもある技術書を読むことはなかなか難しい。 これはイカンということで、電子技術書籍を読みまくって、イイSEになれるように、現段階での問題点を洗い出し、解決策を考えることにした。   【PDF電子書籍の問題点】 1. サイズがでかい。 スマホで読むには、ファイルサイズが大きくて、動きがもっさりする。   2. しおりがない 今のところ、しおり機能があるいい感じのPDFリーダーが無いので、読むのはいいのだけど、続きをサラッ読むことが出来ない。   3. ページ数が多いと萎える 紙の本だと、パラパラめくれるのだけど電子書籍だとページ数が多いとハンドリングが難しいというか、とにかく扱いにくい。それだけで、朝夕のテンションが低いSEにはハードルが高い。   【俺が思いついた解決策】 1. 電子書籍を小分けにして読む。 ページ数が多いから萎えるのだ。小分けにすれば、「次の電柱まで、次の電柱まで・・・」方式で読みつづける勇気が出そう。   2. 気軽に読みたいときに読めるようにする。 キーワードは「気軽」。まるで、傍らの漫画雑誌を拾って読むくらいの気軽さを演出すれば、疲れ切った私も読んでくれるはず。   以下で、それぞれの解決策を具現化してみた。

1. 電子書籍を小分けにする。

pdftkを利用。色々なpdf操作のライブラリーを見たけど、linuxでcuiで気軽に使えそうなのはpdftkだったので。 インストール方法は、Ubuntuであれば、下記コマンドを端末で実行するだけ。

1
$ sudo apt-get install pdftk

※ちなみにMeeGoでも頑張ったらインストール出来たよ。   でもって、pdfを指定したページ数で分割するシェルスクリプトがコレ。 引数チェックさえもしない、性善説に基づくスクリプト。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#!/bin/bash

pagenum=`pdftk $1 dump_data output | grep NumberOfPages | cut -d " " -f2`

index=1
offset=$2

while [ $index -lt $pagenum ]
do
if [ $pagenum -lt `expr $index + $offset` ] ; then
topage=$pagenum
else
topage=`expr $index + $offset - 1`
fi

filename=`basename ${1%\.pdf}`_${index}-${topage}.pdf;
pdftk $1 cat ${index}-${topage} output $filename
index=`expr $index + $offset`
done;

  こんな感じで実行すると、実効したディレクトリに指定したページ数で分割されたpdfが出来る。

1
$ pdfsplit hogehoge.pdf 20

 

2. 読みたい時に読めるようにする。

分割したpdfを持ち歩けよという意見は無視。分割したPDFがいっぱいディレクトリに並んでたら気持ちがひるみそうなので駄目。   20ページ程度にpdfを分割したら大体1~2MB程度の大きさだったので、mailに添付ファイルとして送信する。   問題は送信タイミング。cronなどで定期的に送信しても良いのだけど、体調によっては読みたくない時もある。 読みたくないときにpdfが自動送付されてきて、それを読む気になれなかったりすると「もう駄目だ・・・」となるので、体調も良くて「pdf読みたいっ!」って時にpdfが送られてくるようにしたい。   そこで、メールサーバのforwardを利用して、分割PDFを配置したサーバに対してメールが送られてきた時に、分割PDFをメール添付で送るようにする。   sendmail, postfix, qmailのどれでもhomeディレクトリ配下に.forwardというファイルをおくと転送先が指定できる。 転送先は、メールアドレスだけでなく、こちらが指定したプログラムにすることも出来る。 forwardファイルの中身は以下のように記述。  

1
2
\hogehoge
| "/home/hogehoge/bin/send_pdf"

解説すると、上の行は取得したメールを自分自身に送信しなおしている。 下の行は、受信したメールをプログラム[$HOME/bin/send_pdf(仮名)]にリダイレクト。   次に、自メールサーバのとあるメールアドレスに指定した文言のタイトルで空メールを送信すると、分割したpdfファイルが送られてくるようにしてみる。   pdf送信プログラムの中身が以下の通り ※hogehoge@hoge.xxというメールアドレスだとした場合。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#!/bin/bash

MAIL_ADDRESS="[email protected]" これが送信先のmailアドレス
PDF_FILE_PATH="/hoge/fuga/moga" このディレクトリに分割したPDFが入っている。

mail_content=""
while read IN_DATA
do
mail_content=${mail_content}"\n"${IN_DATA}
done

subject=`echo -e ${mail_content} | grep "Subject: " | sed -e "s/Subject: //g"`
from=`echo -e ${mail_content} | grep "From: " | sed -r "s/F.+<(.+)>/\1/g"`

#メアドが違ってたら、終了
if [ "${from}" != $MAIL_ADDRESS ]; then
exit
fi

if [ "${subject}" = "send me pdf" ]; then
cd $PDF_FILE_PATH
for file in `ls -tr`
do
echo $file
uuencode `pwd`/$file $file | mail -s $file $MAIL_ADDRESS
echo "remove"
rm $file
break
done
else
echo "send nothing"
fi

exit

  処理の概要は、 1. 標準入力で受け取ったメールデータから、タイトルと送信元メールアドレスを引っこ抜く。 2. 指定したメアド[hogehoge@hoge.xx]&タイトル[send me pdf]であることをチェック。 3. pdfを添付ファイルに指定して、送信元メールアドレスに返送する。

  その後・・・   PDF分割作戦をスタートして2ヶ月。今まで、どうしても読む気になれなかった眠くなる系の技術書を順調に読めている。細かく分割するというのは、なかなか悪くないアイデアだったなと我ながら感心した。   自分のサーバを持っていて、かつメールサーバ立ち上げてないと駄目なのでやれる人は限定していますが、最近は500円で借りれるサーバーもあるので、大量の自炊PDFを抱えるSEは是非、お試し下さい。   まあ、あれです。Kindle Fire買って、Perfect Viewer入れたら、PDFの読みかけの位置とか記録してくれるし、要するに分割とかしなくて良いんじゃね?というのは、内緒です。( ,,゜Д゜)