Pythonでフォルダ内のPDFファイルを1つにまとめる

今回はフォルダ内にある複数のPDFファイルを1つのPDFファイルに結合するプログラムをPythonで作成します。

通常このような作業は、有料のAcrobat®などを用いますが、毎回ソフトを起動して、結合するファイルを選択し保存という手順を踏む必要があります。一方、Pythonならばプログラムをダブルクリック等で実行するだけです。何のソフトも起動する必要はありません。作業は一瞬で終わります。

PythonでPDFページを操作するには、PyPDF2という無料のライブラリをインストールしておきます。PyPDF2を用いれば、結合以外にもページの抜粋・回転・コピー・重ね合わせなどが可能です。

以下では、Pythonが初めてでも体験できるように、ライブラリのインストールからプログラムの実行方法まで説明しています。ぜひ実際に実行してPythonの便利さを実感してみてください。なお、ここではWindows環境で説明します。

この記事の目次

操作用画面(GUI)のプログラム

本プログラムを操作する画面(GUI)を以下の記事で作成しています。併せて参考にしてください。
プログラム用にTkinterで画面(GUI)を作成する方法

プログラムの動作

本プログラム(merge_pdf.py)は、同じディレクトリ配下にあるpdf_filesフォルダ内のPDFファイルを1つのPDFファイルに結合します。

例えば以下のようにpdf_filesフォルダにPDFファイルが4つあれば、それらを1つにまとめます。

pdf_files/
  │  ├ 201901hyoshi.pdf
  │  ├ 201902hyoshi.pdf
  │  ├ 201903hyoshi.pdf
  │  └ 201903nankai_gaikyo.pdf
  │
  └ merge_pdf.py <- 本プログラム

プログラムを実行すると結合したファイル(201901hyoshi-201903nankai_gaikyo.pdf)が以下のように作成されます。

  ├ pdf_files/
  │  ├ 201901hyoshi.pdf
  │  ├ 201902hyoshi.pdf
  │  ├ 201903hyoshi.pdf
  │  └ 201903nankai_gaikyo.pdf
  │
  ├ 201901hyoshi-201903nankai_gaikyo.pdf <- 結合したPDFファイル
  └ merge_pdf.py

結合したファイルは、先頭と末尾のファイル名をハイフン(-)で繋いだファイル名にします。

準備

1. Pythonのインストール

以下の記事を参考にWindowsにPythonをインストールしてください。

no image
Pythonに入門するには、パソコンにPythonをインストールするだけです。Pythonを始めるのは非常に簡単です。 Python公式のインストーラーがあるので、ダウンロードしてインストールす…

2. ライブラリのインストール

PDFページを操作するためのライブラリ「PyPDF2」をインストールします。

まず、コマンドプロンプト(黒い背景の画面)を開きます。「Windowsキー()+ r 」を入力すると、以下のような画面が表示されるので、「cmd」 と入力して OK をクリックするとコマンドプロンプトが開きます。

open cmd

コマンドプロンプトにpy -m pip install pypdf2 と入力して、Enterを押すと、以下のようにPyPDF2のインストールが開始します。”Successfully installed ~”と表示されていたら、インストール成功です。

pipは、Pythonのライブラリを管理するためのツールです。pipを使うことで、上記のように簡単にライブラリをインストールできます。詳しくは以下の記事を参照してください。

Pythonには豊富な標準ライブラリが備わっています。システム、ファイルIO、関数、データベース、ウェブ等、非常に多彩です。Pythonが「バッテリー同梱(batteries included)」と呼…

プログラミング

早速プログラミングします。以下の手順で実際に実行してください。

1. メニューからPythonのIDLEを開きます。

python idle select from menu

2. エディタを開いて、コードを貼り付ける

IDLEツールバーのメニューから File ▶ New File を選択してエディタを開いてください。

idle new editor

そこに、以下のプログラムコードをコピーして貼り付けてください。

from pathlib import Path
import PyPDF2

# フォルダ内のPDFファイル一覧
pdf_dir = Path("./pdf_files")
pdf_files = sorted(pdf_dir.glob("*.pdf"))

# 1つのPDFファイルにまとめる
pdf_writer = PyPDF2.PdfFileWriter()
for pdf_file in pdf_files:
    pdf_reader = PyPDF2.PdfFileReader(str(pdf_file))
    for i in range(pdf_reader.getNumPages()):
        pdf_writer.addPage(pdf_reader.getPage(i))

# 保存ファイル名(先頭と末尾のファイル名で作成)
merged_file = pdf_files[0].stem + "-" + pdf_files[-1].stem + ".pdf"

# 保存
with open(merged_file, "wb") as f:
    pdf_writer.write(f)

IDLEの新しいウィンドウに貼り付けたイメージは以下のようになります。

python idle editor

3. コードの保存

IDLEのツールバーのメニューから File ▶ Save を選択して、merge_pdf.pyという名前で、適当なフォルダに保存します。

サンプルファイルのダウンロード

プログラムをすぐ試せるように、サンプルのPDFファイルを用意しました。以下のリンクからダウンロードしたら解凍してください。

サンプルファイルのダウンロード(merge_pdf_files.zip)

解凍したサンプルは、4つのPDFファイルをpdf_filesフォルダに格納してあります。プログラムのmerge_pdf.pyと同じフォルダに以下のようにコピーしてください。

pdf_files/
  │  ├ 201901hyoshi.pdf
  │  ├ 201902hyoshi.pdf
  │  ├ 201903hyoshi.pdf
  │  └ 201903nankai_gaikyo.pdf
  │
  └ merge_pdf.py

これでプログラムを実行する準備が整いました。

プログラムの実行

WindowsにPythonをインストールすると、拡張子がpyのPythonファイルはダブルクリックで実行できますので、merge_pdf.pyダブルクリックしてください。

  ├ pdf_files/
  │  ├ 201901hyoshi.pdf
  │  ├ 201902hyoshi.pdf
  │  ├ 201903hyoshi.pdf
  │  └ 201903nankai_gaikyo.pdf
  │
  └ merge_pdf.py <- ダブルクリック

実行すると以下のように、201901hyoshi-201903nankai_gaikyo.pdfというファイルが出来上がります。

  ├ pdf_files/
  │  ├ 201901hyoshi.pdf
  │  ├ 201902hyoshi.pdf
  │  ├ 201903hyoshi.pdf
  │  └ 201903nankai_gaikyo.pdf
  │
  ├ 201901hyoshi-201903nankai_gaikyo.pdf
  └ merge_pdf.py

このPDFファイルを開くと、以下のように4つのPDFファイルが結合されているのが確認できます。

merged pdfs

最後に

普段のPDF管理ソフトで実施している作業が、僅か20行足らずのPythonコードで自動化できました。このように、ライブラリを活用することで、予想外に簡単にプログラミングできるケースが多いのがPythonの魅力の一つです。

さらに、今回のPyPDF2を利用すれば、PDFを分割したり、透かしを重ね合わせることも可能ですので、ぜひチャレンジしてください。透かしを入れるプログラムは、弊社通信講座でも実習できます。