jpdfbookmarks
を使用して、自炊したPDFに目次データを付与する方法を説明する。
MacであればHomebrewでインストール可能。
% brew install jpdfbookmarks
Javaで動作するプログラムなので、この際openjdk
もインストールされる。
(例は野矢茂樹(2006)『新版 論理トレーニング(哲学教科書シリーズ)』産業図書より)
OCR処理されている場合、テキスト選択すると大体以下のような状態で文字データが抽出できる:
はじめに
序論論理とは何か
目次
0.1 論 理 力 と 思 考 力 l
0.2 狭い意味での「論理J=演鐸 3
0 .3 広 い 意 味 で の 「 論 理 J = 言 葉 と 言 葉 の 関 係 7
I 接続の論理 ......................15
第 1章 さまざまな接続関係 l.1 解説と根拠
l. 2 付 加 と 転 換
練習問題 1 27 課題問題1 28
17
17 2 2
第2章接続の構造 31
2.1 指示関係をつかむ 31
2.2 接続構造の分析 34 練 習 問 題 2 39
課 題 問 題 2 41
第3章議論の組み立て 43 3.1 主 張 を つ な ぐ 43
これぐらい読み取れていればまだかなり良い方。これを人力で以下のような形に整える。
序論 論理とは何か/1
0.1 論理力と思考力/1
0.2 狭い意味での「論理」=演繹/3
0.3 広い意味での「論理」=言葉と言葉の関係/7
Ⅰ 接続の論理/15
第1章 さまざまな接続関係/17
1.1 解説と根拠/17
1.2 付加と転換/22
練習問題1/27
課題問題1/28
第2章 接続の構造/31
2.1 指示関係をつかむ/31
2.2 接続構造の分析/34
練習問題2/39
課題問題2/41
第3章 議論の組み立て/43
3.1 主張をつなぐ/43
上の例のように各行が「見出し
/
ページ番号
」となるよう書く。見出し文字列の中には/
を含めないこと。
TAB
でインデントすることで、目次の階層構造を記述することができる。
この目次テキストデータをいったんtoc1.txtなど適当な名前で保存する。
通常の本では表紙、扉などはページ数にカウントせず本文の始まりを1ページ目としているため、PDFのページ番号と本のページ番号は表紙や扉のページ数分だけずれている。
このずれを修正するために、上で作成した目次テキストデータのページ番号をずらして、PDFのページ番号に一致させる処理が必要になる。例えば、本の1ページ目がPDFデータの17ページ目に登場する場合、ページ番号にすべて16を追加する必要がある。
この処理を行うワンライナーを作った。offset=X
の部分にずらすページ数を入れる。
% awk -v offset=16 -F'/' '{print $1"/"$NF+offset}' toc1.txt >toc2.txt
これを実行すると、以下のようにページ数が修正されたtoc2.txtが出力される。
序論 論理とは何か/17
0.1 論理力と思考力/17
0.2 狭い意味での「論理」=演繹/19
0.3 広い意味での「論理」=言葉と言葉の関係/23
Ⅰ 接続の論理/31
第1章 さまざまな接続関係/33
1.1 解説と根拠/33
1.2 付加と転換/38
練習問題1/43
課題問題1/44
第2章 接続の構造/47
2.1 指示関係をつかむ/47
2.2 接続構造の分析/50
練習問題2/55
課題問題2/57
第3章 議論の組み立て/59
3.1 主張をつなぐ/59
以下のコマンドで、input.pdfに目次データ(toc2.txt)を付与したoutput.pdfが作成される。
% jpdfbookmarks input.pdf -a toc2.txt -o output.pdf
プレビュー.appで完成したPDFファイルを確認する。
jpdfbookmarks -d input.pdf
で目次データを取り出せる。