PDFを結合したい場合にどのような方法で行っていますか?

Adobe AcrobatやいきなりPDFなど有料のソフトを利用している人、無料ソフトをインストールして使用している人、SmallPDFやiLovePDFなどオンラインで行っている人などさまざまだと思います。

有料ソフトを買う余裕もない、無料ソフトやオンラインサイトでの結合ではセキュリティに不安だと思っている人にぜひ試してもらいたいのがPythonのPDF結合です。一度プログラムを作成すると簡単にPDFの結合を行うことができます。

Pythonを使って業務を自動化し効率的にする第一歩としてハードルが低い非常にいい題材だと思います。特にPythonでの自動化に興味がある人におすすめです。

PyPDF2パッケージのインストール

Windows10を動作確認を行っています。

PythonでPDFの結合を行うためには、Pythonの標準ライブラリには含まれていないPyPDF2パッケージをインストールする必要があります。インストールはパッケージ管理のpipを利用して行います。


>pip install pypdf2
Collecting pypdf2
  Downloading https://files.pythonhosted.org/packages/b4/01/68fcc0d43daf4c6bdbc6b33cc3f77bda531c86b174cac56ef0ffdb96faab/PyPDF2-1.26.0.tar.gz (77kB)
    100% |████████████████████████████████| 81kB 1.3MB/s
Installing collected packages: pypdf2
  Running setup.py install for pypdf2 ... done
Successfully installed pypdf2-1.26.0

pip listコマンドを利用するとインストールが正常に行われているか確認することができます。

PDFの結合

最もシンプルな結合方法

PDFファイルを事前に用意して、pythonプログラムを使って結合を行います。

まずtest.pyファイルを作成し、下記のコードを書き込みます。pyファイルが存在するフォルダの中に事前に準備している1.pdf, 2.pdfという名前の2つのPDFファイルを保存します。


from PyPDF2 import PdfFileMerger

pdf_file_merger = PdfFileMerger()

pdf_file_merger.append('./1.pdf')

pdf_file_merger.append('./2.pdf')

pdf_file_merger.write('merge.pdf')

pdf_file_merger.close()

上から順番に1行1行コードの説明を行っていきます。

PDFファイルの結合を行う場合はPyPDF2モジュールの中のPdfFileMergerクラスを利用します。

PdfFileMergerクラスをインスタンス化してpdf_file_merger変数に入れます。

pdf_file_mergerのappend(意味:追加)メソッドで1.pdfと2.pdfを追加しwriteます。

writeメソッドで結合したファイルmerge.pdfの作成を行っています。

上記を実行すると同じフォルダにmerge.pdfという名前のPDFファイルが作成されます。

これだけの処理でPDFの結合を行うことができます。

appendメソッドとwriteメソッドで指定するファイル名は各自の環境に合わせて変更を行ってください。

append、writeメソッドでファイルパスを設定していますが、パスではなくファイルオブジェクトを利用することも可能です。

ファイルオブジェクトを利用して結合

先ほどはパスを利用してファイルの結合を行っていましたが、下記のようにファイルオブジェクトを使っても結合を行うことができます。openメソッドでファイルを開いて、開いたファイルをappendメソッドで追加しています。


from PyPDF2 import PdfFileMerger

pdf_file_merger = PdfFileMerger()

with open('./1.pdf','rb') as f1:

	pdf_file_merger.append(f1)

with open('./2.pdf','rb') as f2:

	pdf_file_merger.append(f2)

with open('./merge2.pdf','wb') as f3:

	pdf_file_merger.write(f3)
open時のrbはread+binaryモードを表しています。

実践的なPDFファイルの結合

PDFのファイルの結合を行うことができましたが、説明した方法では、実行する前にファイルの名前を確認してPythonファイルに記述する必要があります。2個、3個のファイル名の場合はファイル名の修正を毎回行うことができるかもしれませんが自動化からほど遠く10個、20個のファイルになると非効率なため業務では利用できません。

より効率的にPDFの結合ができるように任意のフォルダ内に保存されたPDFファイルの名前を自動的に取得して結合するプログラムに変更します。

PDFファイルの名前を取得(glob)

これまでファイル名を指定していたPDF結合とは異なり、フォルダに保存されているPDFファイルの名前を自動で取得する方法が必要になります。

フォルダ下に保存されているファイル名を取得するためにglobモジュールを利用します。


import glob

for file_name in glob.glob('*.pdf'):
	
	print(file_name)

上記のプログラムを実行すると実行したpyファイルの存在するフォルダ内のPDFファイルの名前のみ表示されます。*.pdfを設定しているためPDFファイル以外は表示されません。


>py glob_test.py
1.pdf
2.pdf

globパッケージを利用するとPDFのファイル名のみ取得できることが確認できました。

拡張子が大文字のPDFの場合もありますが、globでは小文字でも大文字でもPDFファイルの名前を取得してくれます。

globを使った結合

for文を使うことでglobパッケージを使って取得したファイル名を個別に取り出すことができます。取り出したファイル名をappendメソッドで指定することで追加を行うことができます。


import glob
from PyPDF2 import PdfFileMerger

pdf_file_merger = PdfFileMerger()

for file_name in glob.glob('*.pdf'):

	pdf_file_merger.append(file_name)

pdf_file_merger.write('merge.pdf')

pdf_file_merger.close()

実行後は、merge.pdfファイルが同じフォルダに作成されます。pyファイルが存在するフォルダ内のpdfファイル名を取得することができるので、実行前に手動でpyファイル内のファイル名を更新、追加する必要がなくなりました。

Pythonランチャーを使う

WindowsではpyファイルがPythonランチャーに関連付けられていればファイル名をダブルクリックするだけでプログラムを実行することができます。

ファイルを右クリックするとpyファイルに関連付いているアプリケーションがわかるので確認を行ってください。ロケットのアイコンが特徴です。

Pythonランチャー
Pythonランチャー

関連付けられていればダブルクリックするだけで結合のプログラムが実行されます。

実践的な結合の流れ

  1. デスクトップ等に任意の名前を付けたフォルダを作成します。
  2. 作成したフォルダの中に作成したPythonファイルを保存します。
  3. 結合したいPDFファイルをそのフォルダの中に入れます。
  4. Pythonファイルをダブルクリックします。
  5. PDFファイルが結合されたmerge.pdfというファイルが作成されます。merge.pdfファイルをフォルダから取り出します。
  6. 結合するために保存したPDFファイルのみ削除して、フォルダにはPythonファイル1つが保存された状態にします。

一度1~6を実施後、フォルダを変更しないのであれば3~6を繰り返すことでPDFの結合を行うことができます。

結合後のファイルの名前merge.pdfはpyファイルの中で変更可能です。