PythonでPDFを結合する方法|複数のPDFを1つにまとめる簡単なコード例

pythonでPDFを結合する方法
目次

pythonでPDFを結合しよう

請求書の束、個別に届いた報告書、スキャンした書類など、複数のPDFを1つにまとめたいことがよくありますよね?pythonならpypdfライブラリを使って数行でPDF結合が可能です。

本記事ではpythonでPDFファイルを結合する方法を3つ紹介します。基本的な結合から、フォルダ内のPDFを一括で結合する方法、特定のページだけを結合する方法まで、実際のコードとともに分かりやすく解説します。

本記事のコードは全てグーグルコラボラトリーで記述・動作を確認しています。

グーグルコラボラトリーとはgoogleアカウントを持っている人であれば、誰でも・無料で使うことができるpythonの対話型実行環境です。

データ分析に必要なライブラリが初めから搭載されていて、環境構築の必要がないため、python初心者には特にオススメです!

PDFの結合に必要なライブラリ

PDFの結合にはpypdf(旧PyPDF2)が定番です。pipで簡単にインストールできます。

pip install pypdf

※古い記事ではPyPDF2と書いてあることがありますが、現在はpypdfに統合されています。import pypdfで使えます。

pythonでPDFを結合する方法3選

方法1:複数ファイルを指定して結合する(基本)

同じフォルダにある複数のPDFを、指定した順番で1つのPDFにまとめる方法です。PdfWriterとappend()を使うとシンプルに書けます。

from pypdf import PdfWriter

def merge_pdfs(input_paths, output_path):
    """
    複数のPDFを1つに結合する
    Args:
        input_paths: 結合するPDFのパス(リスト)
        output_path: 出力するPDFのパス
    """
    writer = PdfWriter()
    
    for path in input_paths:
        writer.append(path)
    
    with open(output_path, "wb") as output_file:
        writer.write(output_file)
    
    print(f"結合完了: {output_path}")

# 使用例
if __name__ == "__main__":
    pdf_list = [
        "chapter1.pdf",
        "chapter2.pdf",
        "chapter3.pdf",
    ]
    merge_pdfs(pdf_list, "merged.pdf")
  • PdfWriter()で書き出し用のオブジェクトを作成
  • append(パス)でファイルを順番に追加
  • write(ファイル)で1つのPDFに書き出し

これで、chapter1.pdf→chapter2.pdf→chapter3.pdfの順で結合されたmerged.pdfが作成されます。

方法2:フォルダ内のPDFをまとめて結合する

特定のフォルダにあるPDFを、ファイル名の順で全て結合したい場合は、pathlibでPDF一覧を取得してから結合すると便利です。

from pathlib import Path
from pypdf import PdfWriter

def merge_pdfs_in_folder(folder_path, output_path):
    """
    フォルダ内のPDFをファイル名順に結合する
    """
    folder = Path(folder_path)
    pdf_files = sorted(folder.glob("*.pdf"))
    
    if not pdf_files:
        print("PDFファイルが見つかりません")
        return
    
    writer = PdfWriter()
    for pdf_path in pdf_files:
        writer.append(str(pdf_path))
        print(f"追加: {pdf_path.name}")
    
    with open(output_path, "wb") as output_file:
        writer.write(output_file)
    
    print(f"結合完了: {len(pdf_files)} ファイル → {output_path}")

# 使用例
if __name__ == "__main__":
    merge_pdfs_in_folder("./documents", "all_documents.pdf")
  • Path.glob(“*.pdf”)でフォルダ内のPDF一覧を取得
  • sorted()でファイル名順に並べてから結合

データの入ったフォルダを指定するだけで、まとめて1つのPDFにできます。バッチ処理にもおすすめです。

方法3:ページを指定して結合する(必要なページだけ使う)

「各PDFの1~3ページだけ使いたい」といった場合は、PdfReaderで読み込んでから必要なページだけを追加します。

from pypdf import PdfReader, PdfWriter

def merge_pdf_pages(input_paths_with_pages, output_path):
    """
    各PDFの指定ページだけを結合する
    Args:
        input_paths_with_pages: [(パス, 開始ページ, 終了ページ), ...]
                               ページは1始まり。終了ページは含む。
    """
    writer = PdfWriter()
    
    for path, start, end in input_paths_with_pages:
        reader = PdfReader(path)
        for i in range(start - 1, min(end, len(reader.pages))):
            writer.add_page(reader.pages[i])
    
    with open(output_path, "wb") as output_file:
        writer.write(output_file)
    
    print(f"結合完了: {output_path}")

# 使用例: 各ファイルの1~2ページだけ結合
if __name__ == "__main__":
    merge_pdf_pages([
        ("report_a.pdf", 1, 2),
        ("report_b.pdf", 1, 2),
    ], "summary.pdf")
  • PdfReader(パス)でPDFを開き、reader.pages[インデックス]でページを取得
  • writer.add_page(ページ)で1ページずつ追加可能

サマリー資料を作るときなど、必要なページだけを抜き出して結合したい時に役立ちます。

まとめ

本記事ではpythonでPDFファイルを結合する方法を3つ紹介しました。

  • 方法1:複数ファイルを指定して結合 → PdfWriterとappend(パス)がおすすめ
  • 方法2:フォルダ内をまとめて結合 → Path.glob(“*.pdf”)で一覧取得してから結合
  • 方法3:ページを指定して結合 → PdfReaderとadd_page()で1ページずつ追加

pypdfは他にもページの回転・削除・メタデータの編集などができるので、まずは「結合」から試して、必要に応じて公式ドキュメントを参照するとよいです。

PDF結合の自動化やバッチ処理にもそのまま流用できるので、ぜひ自分の環境用にパスやファイル名を変えて試してみてください。

よくある質問

PythonでPDFを結合する方法は?

Pythonで複数のPDFファイルを1つに結合するには、PDF操作用のライブラリを使用するのが一般的です。特に「pypdf」などのライブラリを使うと、数行のコードでPDFを簡単に結合できます。結合したいPDFファイルを順番に読み込み、最後に新しいPDFファイルとして保存することで、複数のPDFを1つのファイルにまとめることができます。

フォルダ内のPDFをまとめて結合する方法は?

Pythonでは、フォルダ内にある複数のPDFを自動で結合することも可能です。globpathlib などのモジュールを使うことで、指定したフォルダ内のPDFファイルを一覧取得できます。その後、取得したファイルをファイル名順に並べ替えてから順番に結合することで、フォルダ内のPDFをまとめて1つのPDFにするスクリプトを作成できます。

PythonでPDFを結合すると順番が変わるのはなぜ?

PDFを結合したときにファイルの順番が意図した順序と異なる場合、主な原因はファイルの取得順序にあります。Pythonでフォルダ内のファイルを取得すると、必ずしもファイル名順で取得されるとは限りません。そのため、取得したPDFファイルのリストを sorted() などで並べ替えてから結合することで、期待通りの順番でPDFを結合できるようになります。

パスワード付きPDFは結合できますか?

パスワードが設定されたPDFでも、PythonのPDFライブラリを使えば結合できる場合があります。ただし、そのままでは読み込めないことが多いため、まずパスワードを使ってPDFを復号(解除)する必要があります。正しいパスワードを指定してPDFを開いたあとであれば、通常のPDFと同じように結合処理を行うことが可能です。

Pythonで大量のPDFを結合するときの注意点は?

大量のPDFファイルを結合する場合は、メモリ使用量や処理時間に注意する必要があります。特に数十〜数百のPDFをまとめて処理すると、パソコンのメモリを多く消費することがあります。そのため、必要に応じてPDFを分割して処理したり、処理途中でファイルを書き出すなど、負荷を分散させる方法を検討すると安定して処理できます。

pythonについてもっと勉強したいです!

pythonを勉強するには書籍・動画・プログラミングスクールなどがあります。特にUdemyは有料ですが、pythonを勉強できる動画がたくさんあるのでおすすめです。

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

コメント

コメントする

目次