見出し画像

Python PDF のしおりを CSV ファイルに書き出す

PDFの目次をコピーアンドペーストしたらぐちゃぐちゃになってしまって LibreOffice のプログラムで処理したという先日の話の続き。

実は、目次ではなく「しおり」を利用すれば良いのだった。

目次と言っているのは、ページに表示される目次。しおりとは、クリックするとそこにジャンプするという PDF のあれのこと。

しおりは Python を使えば簡単にゲットできるのだった。

note に書くほどのことでもないが、やったことを書いておきたい。

やったこと

PyMuPDF をインストール

sudo pip install pymupdf

pip が古いと言われたので、ついでに、アップグレード

sudo pip install --upgrade pip

PyMuPDF の Tutorial

コード

import fitz
import csv
def main():
   doc = fitz.open('./CG70-CalcGuide.pdf')
   # 総ページ数
   page_count = doc.page_count
   print('Page count: ', page_count)
   toc_list = doc.get_toc()
   print('TOC: ', toc_list)
   with open('./toc.csv', 'w') as f:
       writer = csv.writer(f)
       writer.writerows(toc_list)
if __name__ == "__main__":
   main()

↓これはゴミだった(わざと残している?)。

   # 総ページ数
   page_count = doc.page_count
   print('Page count: ', page_count)

↓これもゴミ。必要ない。

print('TOC: ', toc_list)

それから

def main():

if __name__ == "__main__":
   main()

も、いらないか。

PyMuPDF を使えば、get_toc() だけで、しおりのレベルとタイトルとページをゲットできる。簡単。

リストでゲットできるので、そのまま csv モジュールで簡単に csv ファイル化できる。

このスクリプトとPDF を同じフォルダーに置いて実行する。

対象のファイルは決め打ち。

LibreOffice Calc Guide "CG70-CalcGuide.pdf"

できあがった csv ファイルを、LibreOffice Calc で開く。utf-8 の設定で。

こんな感じになる。って、いろいろ手を加えた後だけど。

画像1

A 列に Level、B 列に Title、C 列に Page。

タイトル行を Python スクリプトで付加してもよかったが、作ってから気づいたので、今回は手作業で書き足した。

余談だが、作った後で Level ごとにスタイルを変えた方が見やすいだろうと思い、元の PDF からコピーアンドペースト。そして、レベルでフィルター掛けて、同じレベルを同じスタイルで統一。

D 列には、日本語を書いてみた。

やはり日本語の方が内容をつかみやすい。

目次のテキストがゲットできたところで満足。もっといろいろ PDF をいじりそうな気がしていたが、これ以上の話はなさそうだ。

t.koba

この記事が気に入ったらサポートをしてみませんか?