Pythonでフォルダ内の全PDFを一つのファイルに結合するスクリプト

この記事では、PythonのPyPDF2pathlibライブラリを使い、特定のフォルダ内にあるすべてのPDFファイルをアルファベット順に一つのPDFファイルへと自動で結合する、実用的なスクリプトの作成方法を解説します。


目次

1. 準備:PyPDF2のインストール

このスクリプトは、PDFを操作するPyPDF2と、ファイルパスを扱う標準ライブラリのpathlibを使用します。PyPDF2はサードパーティ製のため、事前にインストールが必要です。

pip install PyPDF2

2. プロジェクトの設計

スクリプトの処理フローは以下の通りです。

  1. スクリプトが実行されたフォルダ(カレントディレクトリ)から、.pdfで終わるすべてのファイルを探し出す。
  2. 見つかったPDFファイルをアルファベット順に並び替える。
  3. 新しいPDFを作成するためのPdfWriterオブジェクトを準備する。
  4. 並び替えた順に各PDFファイルを開き、その中のページをすべてPdfWriterオブジェクトに追加していく。
  5. 最後に、すべてのページが追加されたPdfWriterオブジェクトの内容を、一つの新しいPDFファイルとして保存する。

3. 完成したコード全体

上記の設計に基づいた完全なスクリプトを以下に示します。このコードをmerge_pdfs.pyなどの名前で保存し、結合したいPDFファイルと同じフォルダに置いて実行してください。

from pathlib import Path
import PyPDF2

# 1. カレントディレクトリからPDFファイルを探す
pdf_files = []
# Path('.').glob('*.pdf')で現在のフォルダのPDFをすべて取得
for file_path in sorted(Path('.').glob('*.pdf')):
    pdf_files.append(file_path)

print(f"以下の{len(pdf_files)}個のPDFファイルを結合します:")
for file in pdf_files:
    print(f" - {file.name}")

# 2. PDFライターを準備
pdf_writer = PyPDF2.PdfWriter()

# 3. 各PDFファイルを開き、ページを追加
for file_path in pdf_files:
    try:
        # with文でファイルを開く
        with open(file_path, 'rb') as f:
            pdf_reader = PyPDF2.PdfReader(f)
            # reader.pagesで全ページをループ
            for page in pdf_reader.pages:
                pdf_writer.add_page(page)
    except Exception as e:
        print(f"エラー: {file_path}の処理中に問題が発生しました - {e}")

# 4. 結合したPDFをファイルに保存
try:
    with open('merged_output.pdf', 'wb') as output_pdf:
        pdf_writer.write(output_pdf)
    print("\nすべてのPDFを'merged_output.pdf'に結合しました。")
except Exception as e:
    print(f"\nエラー: ファイルの保存中に問題が発生しました - {e}")

4. 補足:特定のページのみを結合する場合

もし各PDFの最初のページを除外するなど、特定のページだけを結合したい場合は、ページを追加するループ部分を修正します。

例えば、各PDFの2ページ目以降のみを結合するには、for page in pdf_reader.pages:の部分を以下のように変更します。

# スライスを使って2ページ目以降(インデックス1から)を取得
for page in pdf_reader.pages[1:]:
    pdf_writer.add_page(page)

まとめ

pathlibを使って効率的にファイルを検索し、PyPDF2の最新のAPI(PdfReader, PdfWriter, add_page)とwith文を組み合わせることで、フォルダ内の多数のPDFを安全かつ確実に結合する処理を自動化できます。このスクリプトは、レポートの各章を個別のPDFとして作成し、最後に一つにまとめるといった作業に役立ちます。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次