2015-8-19(Wed)
ここ数年で近代デジタルライブラリで公開される著作権保護期間満了の本の数が増えてうれしい。せっかくだからダウンロードして pdf 本にしたら幸せだろうと考えた。
試みに「新式日用字典 : 五十音いろは索引附」(黄鸝学人 編、朝野書店、大正2年、)を pdf 本にしてみた。
(作業メモだから、だらだら書いているのはご容赦)
http://dl.ndl.go.jp/info:ndljp/pid/904998 のページに「JPEG 表示」というボタンがあるので、これで表示される jpeg 画像をごっそりダウンロードすればよい。「JPEG 表示」を押すと、倍率選択のフォームが出るので、100%を選択する。画像の URL は
http://dl.ndl.go.jp/view/jpegOutput?itemId=info%3Andljp%2Fpid%2F904998&contentNo=1&outputScale=1
のようになっていて、No=1 というのが何枚目の画像かを示している。この URL を用いて、
for N in `seq 1 133` do wget "http://dl.ndl.go.jp/view/jpegOutput?itemId=info%3Andljp%2Fpid%2F904998&contentNo=${N}&outputScale=1" -O `printf "%03d" $N`.jpg sleep 35 done
のようにすると、001.jpg から 133.jpg までとして全ページをダウンロードできる。(ファイル名となる番号が 3 桁になるよう printf によって 0 でパディングしている)
ここで、sleep 35 としているのは、国会図書館のサーバからは 30 秒の間隔を置かないと次のファイルがダウンロードできないからだ。おかげでかなりダウンロードに時間がかかるが、これは何とも仕方がない。
ダウンロードした jpge ファイルは、かなりの余白つきである。最も簡単な余白の削除は機械的に同じ位置で切取ることだ。今回は、
for M in `seq 1 133` do N=`printf "%03d" $M` convert -crop 2190x1713+440+250 ${N}.jpg t_${N}.jpg done
のようにした。(余談ながら seq に -w オプションをつけると大きな数に合わせて 0 でパディングされるので、printf 云々のところは省略できる)
convert の crop オプションの引数は 2190x1713+440+250 となっているが、これは左上を原点とした (440,250) を始点とし、横2190,縦1713 の大きさだけ切り取れということ。一括してコントラストの調整をしたいような場合はこの段階で行う。今回はそうした調整は行わなかった。
なお、なぜか時々 convert がトチるページがあった(なぜかはわからないがもう一度やったらできた)。t_001.jpg 〜 t_133.jpg まで全て揃っているか確認したほがいいかも。
この切取り枠をはみ出す場合もあるから、GIMP などで手動修正が必要なこともある(これが結構面倒くさい本も少なからずあり)。
convert で各ページを pdf にして、それを pdftk で 1 つの pdf ファイルにまとめるという方針。
まず、
for M in `seq 1 133` do N=`printf "%03d" $M` convert ${N}.jpg t_${N}.pdf done
で、001.jpg〜133.jpg をそれぞれ t_001.pdf〜t_133.pdf に変換し、さらに
pdftk t_*pdf output jiten.pdf
によって、jiten.pdf にまとめる。pdftk は、- とか -- とかいうおなじみのオプションの書き方を使わないので、ちょっと見慣れない書き方になる。
今回の本は字引だから、50音の目次(ブックマーク)をつけたい。pdftk で jiten.pdf メタデータをテキストファイルに書き出し、これにブックマーク情報を付加して jiten.pdf に書き戻すという方針。
まず、
pdftk jiten.pdf dump_data_utf8 > metadata.txt
として、metadata.txt にメタデータを書き出す。このファイルの中身は
InfoBegin InfoKey: ModDate InfoValue: D:20150819120844+09'00' InfoBegin InfoKey: CreationDate InfoValue: D:20150819120844+09'00' InfoBegin InfoKey: Creator InfoValue: pdftk 2.01 - www.pdftk.com InfoBegin InfoKey: Producer InfoValue: itext-paulo-155 (itextpdf.sf.net-lowagie.com) PdfID0: e160f4566e7639388b9b41077e45d77a PdfID1: 85aa30aec5927114da4448aea4073cd6 NumberOfPages: 132 PageMediaBegin PageMediaNumber: 1 PageMediaRotation: 0 PageMediaRect: 0 0 453.129 354.434 PageMediaDimensions: 453.129 354.434 PageMediaBegin PageMediaNumber: 2 PageMediaRotation: 0 PageMediaRect: 0 0 453.129 354.434 PageMediaDimensions: 453.129 354.434 (中略) PageMediaBegin PageMediaNumber: 132 PageMediaRotation: 0 PageMediaRect: 0 0 453.129 354.434 PageMediaDimensions: 453.129 354.434
のようになっている。
次に、この書式に則った目次(ブックマーク)データを用意する。幸い、元画像をダウンロードしてきた http://dl.ndl.go.jp/info:ndljp/pid/904998 のサイドペインにある「書誌情報」で「詳細レコード表示にする」をクリックすると、いちばん下に国会図書館で作った目次データが現れるので、目次部分を contents.txt というファイルにコピペして利用することにする。
標題 / (0004.jp2) 目次 / (0005.jp2) あ / 1 (0006.jp2) い / 8 (0010.jp2) う / 15 (0013.jp2) え / 19 (0015.jp2) を / 23 (0017.jp2) か / 29 (0020.jp2) き / 37 (0024.jp2) く / 47 (0029.jp2) け / 51 (0031.jp2) こ / 59 (0035.jp2) (中略) わ / 246 (0129.jp2)
(これを見ると、国会図書館は jpeg ではなく jp2 でデータを保存しているような気がするが、どのみち我々の手に入るのは jpeg なので、それはおいておく)
さて、
これを awk で
$ cat contents.txt | awk '{gsub(/[()]|\.jp2/,"",$4); print "BookmarkBegin\nBookmarkTitle: "$1"\nBookmarkLevel: 1\nBookmarkPageNumber: "$4+0}' > contens_metadata.txt
とかやる(awk スクリプト中で $4+0 のように 0 をつけているのは、0001 のようなものを強制的にキャストして 1 にしてしまうため。ちょっと乱暴?)。すると、contents_metadata.txt に
BookmarkBegin BookmarkTitle: 標題 BookmarkLevel: 1 BookmarkPageNumber: BookmarkBegin BookmarkTitle: 目次 BookmarkLevel: 1 BookmarkPageNumber: BookmarkBegin BookmarkTitle: あ BookmarkLevel: 1 BookmarkPageNumber: 6 BookmarkBegin BookmarkTitle: い BookmarkLevel: 1 BookmarkPageNumber: 10 (中略) BookmarkBegin BookmarkTitle: わ BookmarkLevel: 1 BookmarkPageNumber: 129
なんてのが入る。表題と目次の項で BookmarkPageNumber: がカラになっているので手動で書きたしたり、「あいうえを」になっているのを「あいうえお」に直したりする。それから、さっきの metadata.txt の末尾にこれをつけて
cat metadata.txt contents_metadata.txt > new_metadata.txt
new_metadata.txt を作成する。そして、
pdftk jiten.pdf update_info_utf8 new_metadata.txt output jiten_with_contents.pdf
のようにして、目次つきの pdf を jiten_with_contents.pdf に書き出す。
これで、やっと当初の目的を達成。
おわり