某雑誌の総集編から特定の連載記事だけ抜き取りたい (その3)


スポンサーリンク

前回、前々回の続き。ようやく完成。

a244.hateblo.jp

a244.hateblo.jp

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。

f:id:atuyosi:20180507212122j:plain:w320

その他の方法

リファレンスを見る限り、PyPDF2でもできそう。また、GhostScriptを使うスクリプトを公開されている方がいる。

あとはCPDF。以下のページによると「関連しおりを維持し、PDFファイルを分割」とあるのでページ範囲さえ指定すればこっちがラクかも。

CPDF:メッチャ多機能なPDFのコマンドライン・ツール | PDF

まとめ

めんどうなのでPyPDF2を使った方法は次回、かな。一部シェルスクリプトの部分のPython化とできればMakefileでいいかんじにやりたい。

まあでもこんなもんか。

なお、pdftkコマンドの使い方は、PDF構造解説の9章に解説がある。

PDF構造解説

PDF構造解説

退屈なことはPythonにやらせよう ―ノンプログラマーにもできる自動化処理プログラミング

退屈なことはPythonにやらせよう ―ノンプログラマーにもできる自動化処理プログラミング

参考にしたURL

広告