Pythonで複数ページあるPDFファイルを任意の数で分割

Python

scansnapでレシートを一気に読み込むと1つのPDFに複数のレシートが連結された状態で出力されることがよくあります。今まではScan snap Homeで1つずつ開いて編集していたのですが、時間がかかりめんどうだったのでPythonを使って分割するツールを作りました。

全貌

コマンドプロンプトから以下のように実行することで、対象のPDFファイルと同じ場所に分割したファイルが[元のファイル名_x.pdf]の形式で出力されます。

python pdf_spliter.py [PDFファイルの絶対パス] [分割ページ数]

コード解説

引数

コマンドプロンプトで実行するので引数を扱いたいです。実行する対象のファイルパスと何ページずつ分割するかを取得できれば処理ができます。

pythonではsysで引数を扱うことができます。

import sys
sys.argv

argv[0]は実行したpythonのファイル名が入ります。コマンドプロンプトで引数を取る場合は[1]以降を取得します。

PDF

PDFファイルを扱うライブラリは様々あるようですが、僕が「python pdf」で検索して上位に出てきたpypdf2を使うことにします。

python -m pip install --upgrade pip
pip install pypdf2

1行目はpipの更新なので不要な場合は2行目のpypdf2のインストールのみ実行で大丈夫です。

PDFファイルの読み込みです。

reader = PyPDF2.PdfFileReader(target_pdf)

for文で1ファイルの指定したページずつ分割していきます。

for page in range(0, page_num, page_sep):
merger = PyPDF2.PdfFileMerger()
start = page
end = start + page_sep
merger.append(target_pdf, pages=(start, end))
file_name = root_dir + '\\' + base_filename + '_' + str(start) + '.pdf'
merger.write(file_name)
merger.close

あとがき

pythonのコード書くよりも、このブログを書く方が時間が掛かるくらいコード書くのは簡単でした。