jpdfbookmarksを使用して、自炊したPDFに目次データを付与する方法を説明する。
MacであればHomebrewでインストール可能。
% brew install jpdfbookmarks
Javaで動作するプログラムなので、この際openjdkもインストールされる。
(例は野矢茂樹(2006)『新版 論理トレーニング(哲学教科書シリーズ)』産業図書より)
この目次から、次のような目次テキストファイルを作成する。
toc1.txt (ファイル名は何でも良い):
序論 論理とは何か/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
(※macOS 12 Monterey 以降「テキスト認識表示」の機能により、目次のスクリーンショットを撮って文字認識することでこの作業がかなり楽になった)
上の例のように各行が「見出し / ページ番号」となるよう書く。見出し文字列の中には/を含めないこと。
TABでインデントすることで、目次の階層構造を記述することができる。
通常の本では表紙、扉などはページ数にカウントせず本文の始まりを1ページ目としているため、PDFのページ番号と本のページ番号は表紙や扉のページ数分だけずれている。
このずれを修正するために、上で作成した目次テキストデータのページ番号をずらして、PDFのページ番号に一致させる処理が必要になる。例えば、本の1ページ目がPDFデータの17ページ目に登場する場合、ページ番号にすべて16を追加する必要がある。
この処理を行うワンライナーを作った。offset=Xの部分にずらすページ数を入れる。
% awk -v offset=16 -F'/' '{print $1"/"$NF+offset}' toc1.txt > toc2.txt
これを実行すると、以下のようにページ番号が修正(+16)された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で目次データを取り出せるので、これをテキストエディタで編集して上記作業で上書きする。