【Python】複数のPDFファイルを結合する方法

当ページには広告が含まれています。

こんにちは、DXCEL WAVEの運営者(@dxcelwave)です!

こんな方におすすめ!
  • 複数のPDFファイルを1つのファイルに結合したい!
  • PythonでPDFファイルを統合する手順が知りたい!
目次

Pythonで複数のPDFファイルを結合する方法

Pythonでは「PyPDF2」というPDF文書を操作できるモジュールがあり、それを用いてPDFファイルを統合します。PyPDF2を用いて読み書き用オブジェクトを生成し、PDFファイル統合・出力という手順でプログラムを構築します。

PyPDF2モジュール

PDFを操作するPyPDF2pycryptodomeモジュールのインストールが必要です。コマンドラインから下記を実行し、インストールしておきましょう。

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とは?・実現できること

最後に

この記事が気に入ったら
フォローしてね!

本記事をシェア!
目次