HOME

近代デジタルライブラリから pdf 本を作る(メモ)

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 などで手動修正が必要なこともある(これが結構面倒くさい本も少なからずあり)。

pdf にする

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 は、- とか -- とかいうおなじみのオプションの書き方を使わないので、ちょっと見慣れない書き方になる。

pdf に目次(ブックマーク)をつける

今回の本は字引だから、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 に書き出す。

これで、やっと当初の目的を達成。

おわり