Skip to content

Instantly share code, notes, and snippets.

@metasta
Last active May 4, 2024 19:13
Show Gist options
  • Save metasta/e56dfb9aba3b7f35c31bc15072d0ebe7 to your computer and use it in GitHub Desktop.
Save metasta/e56dfb9aba3b7f35c31bc15072d0ebe7 to your computer and use it in GitHub Desktop.
自炊PDFに目次をつける

自炊PDFに目次をつける

jpdfbookmarksを使用して、自炊したPDFに目次データを付与する方法を説明する。

準備:jpdfbookmarksのインストール

MacであればHomebrewでインストール可能。

% brew install jpdfbookmarks

Javaで動作するプログラムなので、この際openjdkもインストールされる。

1. 作成したい目次を確認

Sample TOC Image

(例は野矢茂樹(2006)『新版 論理トレーニング(哲学教科書シリーズ)』産業図書より)

2. 目次のテキストデータを作成

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など適当な名前で保存する。

3. ページ番号のずれを修正

通常の本では表紙、扉などはページ数にカウントせず本文の始まりを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

4. jpdfbookmarksを実行

以下のコマンドで、input.pdfに目次データ(toc2.txt)を付与したoutput.pdfが作成される。

% jpdfbookmarks input.pdf -a toc2.txt -o output.pdf

プレビュー.appで完成したPDFファイルを確認する。

Output

目次データを修正したい時

jpdfbookmarks -d input.pdfで目次データを取り出せる。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment