某雑誌の総集編から特定の連載記事だけ抜き取りたい (その3)
スポンサーリンク
前回、前々回の続き。ようやく完成。
pdftkコマンドで目次(しおり)を追加
まずはpdftk
コマンドの、update_info_utf8
を使う方法。
コマンドの書式
$ pdftk input.pdf update_info_utf8 info.txt output output.pdf
- input.pdf: 目次を追加する元のファイル名
- output.pdf: 出力ファイル名
info.txt
は、dump_data_utf8
オプションの出力と同じ形式。試した範囲では目次(ブックマーク)に関する情報だけでも問題ない。
まずは、pdftkコマンドに与える情報を生成する必要がある。
各エントリにつき、下記の書式。
BookmarkBegin BookmarkTitle: 表示する項目名 BookmarkLevel: 1 BookmarkPageNumber: 1
BookmarkLevelは見出しのレベル、BookmarkPageNumberはページ番号(ゼロの場合は見出しをクリックしてもページ遷移しない)。
ページ番号の範囲がPDFのページの範囲を超えている場合、見出し項目をクリックしても何も起きない。
スクリプト
data
ディレクトリの下にpage_index
というサブディレクトリを作成し、そこに過去記事で作成したtsvファイルがあるという前提。
参考:pdftkコマンドのdump_data_utf8
オプションの出力ファイルから目次(Bookmark)の情報を抽出してページ範囲を出力するスクリプト · GitHub
別のスクリプトで生成したTSVファイルからpdftkコマンド用のBookmarkエントリを生成するス ...
ファイル名でソートするためにnatsortを使っていい感じにソートさせている。
実行する際は、
python3 find_and_generate_entries.py 連載記事名
出力を適当な名前で保存して、pdftk
コマンドの引数に指定すればOK。
その他の方法
リファレンスを見る限り、PyPDF2でもできそう。また、GhostScriptを使うスクリプトを公開されている方がいる。
- pdf-addbookmark/README-rb.ja.rdoc at master · kmuto/pdf-addbookmark · GitHub
- pdf-bookmark/README.rst at master · turky/pdf-bookmark · GitHub
あとはCPDF。以下のページによると「関連しおりを維持し、PDFファイルを分割」とあるのでページ範囲さえ指定すればこっちがラクかも。
CPDF:メッチャ多機能なPDFのコマンドライン・ツール | PDF
まとめ
めんどうなのでPyPDF2を使った方法は次回、かな。一部シェルスクリプトの部分のPython化とできればMakefileでいいかんじにやりたい。
まあでもこんなもんか。
なお、pdftk
コマンドの使い方は、PDF構造解説の9章に解説がある。

- 作者: John Whitington,村上雅章
- 出版社/メーカー: オライリージャパン
- 発売日: 2012/05/25
- メディア: 単行本(ソフトカバー)
- クリック: 166回
- この商品を含むブログ (9件) を見る

退屈なことはPythonにやらせよう ―ノンプログラマーにもできる自動化処理プログラミング
- 作者: Al Sweigart,相川愛三
- 出版社/メーカー: オライリージャパン
- 発売日: 2017/06/03
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (5件) を見る