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

PythonでPDFの結合をする方法をご紹介します。

Excel VBA(以下「VBA」)でPDF操作をしようとすると有償版のAcrbatが必要になります。一方で、Pythonを使えばお金をかけずに、かなり自由にPDFの結合ができるのでオススメです。

今回は、以下のような事例でプログラムを組んでみました。

  • フォルダ内にはたくさんの案件のPDFファイルがある
  • PDFは「本文」「付録」のPDFファイルがある
  • 案件ごとに、「本文」の後に「付録」がくるようにPDFを結合する
  • 結合したPDFファイルは、「結合ずみ」フォルダに格納する

まぁ…手作業でやろうとすると日が暮れるレベルの面倒な作業です(笑)

このような単純反復作業は、Pythonで一気にやっつけてしまいましょう

Pythonの環境構築が済んでいる方が対象の記事です。ご不明な点はコメント欄からどうぞ。
有償になりますが、プログラム作成サービスも承っております。

目次

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

まずは結論のコードからご紹介します。

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

それでは、結論のコードを順に解説していきます!

「PyPDF2」のインストール

PyPDF2はPythonに標準でインストールされていません。そのため、PyPDF2は新たにインストールする必要があります

ターミナルなどから、以下のコマンドを入力してください。

$ pip install PyPDF2

このpipコマンドを入力することで、お使いのパソコンにPDFをプログラムで動かすための「PyPDF2」がインストールできます。

使用するライブラリのインポート

import PyPDF2
import glob

まずは、今回使用するライブラリをインポートします。

先ほどインストールしたPyPDFは、PDFの操作をするために使うライブラリです。これをインポートしておくことで、プログラム内でPDF操作ができるようになります。

2番目のglobは、ファイルのパスを取得するライブラリです。「結合したいPDFがパソコンのどこにあるのか?」がわからないと何を結合していいのかわかりませんよね。PDFファイルがある場所をプログラム上で伝えてくれるのがglobです。

なお、globはPythonに標準でインストールされているため、PyPDFのように新たにpipインストールする必要がありません。

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

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

PyPDF2のインストール

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

$ pip install PyPDF2

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

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

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

まずはインストールした「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時間以上はやり続けてようやくプログラムが動いた…といった感じでした。

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

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