ちょっとネットでこんなツールがラクスさんから月5000円で販売されているのに気づき、これなら似たことがpypdf2ですぐできるなと思い実装してみました。
元ネタとなったものは以下のリンクと画像でご確認ください。別にこのツールをディスっているわけではないので、悪しからず。。


ただ、今回実装しているのはあくまでPDFの分割部分だけで、楽々明細にuploadする部分および請求書押印ロボットは対象外としています。
後ほどstampを押す機能も実装自体は難しくないので、後日紹介したいなと思います。
実際のスクリプト
まずは何はともあれ、実際のコードをペタッと貼っていきます。
import PyPDF2
file_path = "pdfのPathを入れる"
#ライターを事前に作成しておく
writer = PyPDF2.PdfFileWriter()
#リーダーを作ってページ数を読み込む
reader = PyPDF2.PdfFileReader(file_path)
page_num = reader.getNumPages()
print(page_num)
#ページを1つづつ読み取って、pdf形式にして保存する
for num in range(page_num):
file_obj = reader.getPage(num)
new_file_name = "output" + "-" + str(num+1) + ".pdf"
with open(new_file_name, "wb") as f:
writer.addPage(file_obj)
writer.write(f)
特段難しいところはないと思いますが、pypdf2という懐かしツール(この頃リリースやpullreqが止まってる気もするので、そのうちpythonのバージョンに追いつかなくなるかもしれませんが。。)を利用しています。
実行結果
実行前の状態
ディレクトリに保存したtest.pdfというものを分割していきます。まず以下が実行前の状態。
ディレクトリ内にtest.pdfというものが1つ存在していることがわかると思います。

実行結果(PDFが分割された結果)
スクリプトを実行すると以下のように、output-1.pdfみたいな感じで、output pdfファイルが3つできているのがわかります。元のpdfのページ数が3つだったので、3つにちゃんと分割されています。もちろん中身も元のを各ページに分割されています。

pypdf2でpdfを分割する時の補足解説
pypdf2でのpdfファイルの分割
pypdf2は基本pdfをマージ・書き込み・読み込み等するためのツールなので、pypdf2自体に分割(split)メソッドは含まれていません。
ではどうするか?
今回作ったように、pdfwriterを使って1ページづつpdfファイルをopen(バイナリー書き込み方式)で作成していくことで、実質的に分割するのと同じようになります。
ファイルネームを元ファイルから移植したい場合
今回は元ファイルと別の名前を利用していますが、元ファイルの名前を継続したい場合はosモジュールを利用して、globなどでpathからファイルネームを取得すればいけます。
ディレクトリを分けたい場合
今回は同一ディレクトリに保存していますが、ディレクトリを分けたい場合は、openの引数にdirecotryをつけていただければ可能です。例えば、outputディレクトリをrootディレクトリの下に作成した場合は以下のような感じです。
for num in range(page_num):
file_obj = reader.getPage(num)
new_file_name = "output" + "-" + str(num+1) + ".pdf"
with open("output/" + new_file_name, "wb") as f:
writer.addPage(file_obj)
writer.write(f)
これで、以下のようにoutputディレクトリに保存されます。

まとめ
色々なRPAツールが市場に出回っていますが、実は簡単なpython知識があれば類似機能を実装することもできますよ、という紹介でした。
何もかも自分で実装するのが正しいとは個人的には思っていませんが、実装工数とrunningコストを比較して実は自分で簡単にできてしまう機能であれば、作ってみることを検討するのも1つの手段だと思います。
実際サービスとしてリリースされているものはより深くユースケースを検証しているでしょうから、実は自分で作ると痒いところに最初は手が届かないこともままあります。他方で、自分で実装しないと痒いところに手が届かないケースもままあります。
色々なツールは使ってみてよりよくできる方法が自分で考えられるなら、自前実装も一つの手段だと頭の片隅に入れておいていただければと思います。