Python|PyPDF2を使ったPDFの結合の方法【自動化プログラムつき】

  • Excel VBAでPDFの結合ができずにゲンナリしてる…
  • PythonでPDFの結合・分割がしたいなぁ

このような疑問をお持ちの方に、Pythonを使ったPDF操作の方法をお伝えします。

Excel VBAを使ってPDF操作を自動化しようとすると、どうしても有料版のAcrobatが必要になってしまいます。

ところが、今回紹介するPythonを使った方法なら費用をかけずにPDF操作が可能です。

今回は「PyPDF2」というライブラリを使います。

目次

Python|PyPDF2を使ったPDFの結合・分割の方法

結合する場合と分割する場合のそれぞれに分けて解説します。

PDFファイルを結合する方法

PDFファイルを結合するまでの流れは、次の通りです。

PDF結合までの流れ
  1. PyPDF2のインストール
  2. PDFを結合するためのコーディング

PyPDF2のインストール

「PyPDF2」は外部ライブラリなので、インストールが必要です。

$ pip install PyPDF2

まずは、上記を入力しましょう。

PDFを結合するためのコーディング

続いて、PDFを結合するコードを書きます。

まずはインストールした「PyPDF2」を呼び出しましょう。

import PyPDF2

続いてPDFを入れる箱のようなもの(merger)をつくります。

merger = PyPDF2.PdfFileMerger()

この「merger」に、結合したいPDFを順番に放り込んでいくというわけです。

merger = PyPDF2.PdfFileMerger(strict=False)
とすることで、エラーが出ても結果に表示されなくなります。

PDFを追加するためには、appendメソッドでを使います。
上から順番に1ページ目、2ページ目…といった具合です。

※ ちなみにappendとは追加の意味です。

merger.append('sample1.pdf')
merger.append('sample2.pdf')
merger.append('sample3.pdf')

パスの指定方法が不安な方は、次の記事もどうぞ。

» 参考:Pythonでパスの指定をする方法(準備中)

これでPDFの結合が終わりました。writeメソッドで書き出します。

merger.write('data/temp/sample_merge.pdf')

最後にmergerという箱を閉じるため、closeメソッドを使います。

merger.close()

以上でプログラムは完成です。

最後にコードをすべてくっつけて、コードの全体像を確認しましょう。

import PyPDF2
merger = PyPDF2.PdfFileMerger()
merger.append('sample1.pdf')
merger.append('sample2.pdf')
merger.append('sample3.pdf')
merger.write('data/temp/sample_merge.pdf')
merger.close()

結合を自動化する方法

「本文→付録」の順番に、先頭の番号ごとにPDFファイルを結合する自動化プログラムをつくりました。

完成イメージ
  • 「01本文.pdf」と「01付録.pdf」を合体して「01合体.pdf」
  • 「02本文.pdf」と「02付録.pdf」を合体して「02合体.pdf」

手作業だと面倒ですが、Excel VBAだと実装が困難なケースです。

PyPDF2のインストール

まずは「PyPDF」のインストールから始めます。

$ pip install PyPDF2

なお、すでにインストールが終わっていれば不要です。

PyPDFのインポート

使いそうなライブラリをインポートしておきます。

import PyPDF2
import glob

ちなみに、globはファイル名一覧を取得する際に使います。

自動化の開始処理

ここから自動化が始まるようにコーディングします。

for i in range(2):

上記のコードを書くことで、繰り返し処理ができます。「for 変数 in オブジェクト:」という構文になっています。

for文に自信がないかたは、次の記事もどうぞ。

» 参考:Python|繰り返し処理をするためのfor文を解説(準備中)

続いて繰り返し処理の中身を書いていきます。

Pythonの場合は、繰り返したい処理のコードにインデントをあけるのがルールになってます。(Excel VBAでいうところの「Next i」に当たる部分ですね)

    merger = PyPDF2.PdfFileMerger()
    merger.append(glob.glob(str(i+1).zfill(2) + '.本文*.pdf')[0])
    merger.append(glob.glob(str(i+1).zfill(2) + '.付録*.pdf')[0])

ここではまず、フォルダ内の「01.本文.pdf」と「01.付録」を「glob.glob()」で引っ張り出してきています。

で、globを使った場合にはリスト形式になってしまうので、リストの1件目を抽出するために[0]と置いています。

「str(i+1)」としているのは、数値のままだと文字列にくっつけることができないのでストリング型に変換しているということです。

さらに、「zfill(2)」と置くことで「01, 02…」などと頭に0をつけた文字列が作れます。

最後にPDFをはき出して完成です。

merger.write(str(i+1).zfill(2) + '合体.pdf')
merger.close

ここではき出されるファイル名は、「01合体.pdf」となりますね。

今回は「range(2)」としたので、2回これらの作業が繰り返されることになります。

最後に、ここまでのプログラムを合体させたものを確認しましょう。

$ pip install PyPDF2
import PyPDF2
import glob
for i in range(2):
    merger = PyPDF2.PdfFileMerger()
    merger.append(glob.glob(str(i+1).zfill(2) + '.本文*.pdf')[0])
    merger.append(glob.glob(str(i+1).zfill(2) + '.付録*.pdf')[0])

merger.write(str(i+1).zfill(2) + '合体.pdf')
merger.close

まとめ

ここまでPythonを使ったPDFの結合方法を解説しました。

基本的な知識が抜けているとかなり苦戦を強いられると思います。僕は4時間以上はやり続けてようやくプログラムが動いた…といった感じでした。

もしもご質問などがありましたら、コメント欄やお問い合わせフォームからどうぞ。

よかったらシェアしてね!
目次
閉じる