こんにちは、DXCEL WAVEの運営者(@dxcelwave)です!
- 複数のPDFファイルを1つのファイルに結合したい!
- PythonでPDFファイルを統合する手順が知りたい!
Pythonで複数のPDFファイルを結合する方法

Pythonでは「PyPDF2」というPDF文書を操作できるモジュールがあり、それを用いてPDFファイルを統合します。PyPDF2を用いて読み書き用オブジェクトを生成し、PDFファイル統合・出力という手順でプログラムを構築します。
PyPDF2モジュール
PDFを操作するPyPDF2
とpycryptodome
モジュールのインストールが必要です。コマンドラインから下記を実行し、インストールしておきましょう。
pip3 install PyPDF2 pycryptodome
【参考】PDFタスク自動化の学習におすすめの教材
Pythonを活用してPDFタスクの自動化手法を深く学びたい方向けに、おすすめの教材も併せてご紹介します。
【Python】複数PDFの結合した新規ファイルを作成する
それでは実際にPythonを活用してプログラムを記述していきましょう!
PDF読み込む用のオブジェクト生成
事前に統合したいPDFファイルをPython実行スクリプトと同じディレクトリに格納した後、スクリプト上にファイル情報を入力します。
コードは下記のように記載しましょう。
from PyPDF2 import PdfReader, PdfWriter
# 読み込むPDFファイル名
pdf_file_name1 = "ファイル1.pdf" # ファイル名を記載
pdf_file_name2 = "ファイル2.pdf" # ファイル名を記載
# 読み込むPDFファイルのリストを作成
file_list = [pdf_file_name1,pdf_file_name2]
今回は2つのPDFファイルの統合例を示します。もし3つ以上のPDFファイルを統合したい場合はpdf_file_name3、pdf_file_name4・・・と定義した後、file_listにその情報を格納するようにしましょう。
続いて上記で指定したPDFファイルをPdfReader
メソッドで読み込みます。
# PDFReaderオブジェクトのリストを作成
pdf_obj_list = [PdfReader(fname) for fname in file_list]
# 確認用(オブジェクト数と各ページ数を表示)
for i, pdf in enumerate(pdf_obj_list, start=1):
print(f"PDF {i}: {len(pdf.pages)} ページ")
PDF書き込み用のオブジェクト生成
PDFを書き込むためのオブジェクトを作成します。下記のように実行しましょう。
# 書き込みオブジェクト
writer = PdfWriter()
PDFファイルの結合
作成したPdfFileWriterオブジェクト上に、最初に読み込んだPDF情報を順次コピーしていきます。下記を実行しましょう。
# 全ページを writer に追加
for pdf in pdf_obj_list:
for page in pdf.pages:
writer.add_page(page)
結合した新規PDFファイル出力
最後に1つに統合したPDFファイルを出力します。下記のように実行しましょう。
# 出力ファイル名
output_file_name = "output.pdf"
# 新しい PDFファイルを生成
with open(output_file_name, "wb") as out_f:
writer.write(out_f)
print(f"{output_file_name} を作成しました。")
上記実行後、実際にPDFファイルが作成されているか確認してみましょう!
Pythonプログラム全量
上記で紹介した全てのプログラムを関数形式にまとめたものを示します。実際に業務に利用する際は下記をコピー&ペーストして利用すると便利でしょう。
from PyPDF2 import PdfReader, PdfWriter
# =============================================
# PDFファイル名
# =============================================
# 入力
pdf_file_name1 = "test.pdf" # ファイル名を記載
pdf_file_name2 = "test2.pdf" # ファイル名を記載
# 出力
output_file_name = "output.pdf" # ファイル名を記載
# =============================================
# 関数
# =============================================
def pdf_file_integrate(output_file_name, *input_files):
# =========================================
# 読込PDFファイルのリストを作成
# =========================================
# PDFReaderオブジェクトのリストを作成
file_list = [PdfReader(file) for file in input_files]
# 確認用(オブジェクト数と各ページ数を表示)
for i, pdf in enumerate(file_list, start=1):
print(f"PDF {i}: {len(pdf.pages)} ページ")
# =========================================
# 書込オブジェクト生成
# =========================================
# 書き込みオブジェクト
writer = PdfWriter()
# 全ページを writer に追加
for pdf in pdf_obj_list:
for page in pdf.pages:
writer.add_page(page)
# =========================================
# ファイル出力
# =========================================
# PDFファイルを生成
with open(output_file_name, "wb") as out_f:
writer.write(out_f)
print(f"{output_file_name} を作成しました。")
# =============================================
# 関数実行
# =============================================
if __name__ == "__main__":
pdf_file_integrate(output_file_name, pdf_file_name1,pdf_file_name2)
関数名はfile_integrate()としています。第一引数に出力ファイル名、第二引数に入力するPDFファイル名を渡すと実行できます。
【参考】Pythonで面倒な作業を自動化!手法一挙公開中!
当サイトでは日々面倒な作業をPythonで自動化する方法を多数配信しております。日々の作業が飛躍的効率化できること間違いなしですので、以下気になった記事があれば併せてご覧ください。
【面倒なタスクをPythonで解決!】作業効率化の人気記事一覧
【参考】Pythonとは?・実現できること
最後に

お問い合わせフォーム
上記課題に向けてご気軽にご相談下さい。
お問い合わせはこちら