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 の設定で。
こんな感じになる。って、いろいろ手を加えた後だけど。
A 列に Level、B 列に Title、C 列に Page。
タイトル行を Python スクリプトで付加してもよかったが、作ってから気づいたので、今回は手作業で書き足した。
余談だが、作った後で Level ごとにスタイルを変えた方が見やすいだろうと思い、元の PDF からコピーアンドペースト。そして、レベルでフィルター掛けて、同じレベルを同じスタイルで統一。
D 列には、日本語を書いてみた。
やはり日本語の方が内容をつかみやすい。
目次のテキストがゲットできたところで満足。もっといろいろ PDF をいじりそうな気がしていたが、これ以上の話はなさそうだ。
t.koba
この記事が気に入ったらサポートをしてみませんか?