ドキュメント

[Python] 複数のPDFを結合する方法

Pythonで複数のPDFを結合するには、PyPDF2ライブラリを使用するのが一般的です。

まず、PyPDF2をインストールし、PdfMergerクラスを使ってPDFファイルを結合します。

具体的には、PdfMergerオブジェクトを作成し、append()メソッドで結合したいPDFを順番に追加し、最後にwrite()メソッドで新しいPDFファイルとして保存します。

PyPDF2ライブラリの概要

PyPDF2は、PythonでPDFファイルを操作するための強力なライブラリです。

このライブラリを使用することで、PDFの結合、分割、ページの回転、メタデータの取得など、さまざまな操作が簡単に行えます。

特に、複数のPDFを結合する機能は非常に便利で、業務や個人のプロジェクトでの文書管理に役立ちます。

PyPDF2は、シンプルなAPIを提供しており、初心者でも扱いやすいのが特徴です。

また、オープンソースであるため、自由に利用・改良することができます。

複数のPDFを結合する基本的な手順

PdfMergerクラスの使い方

PyPDF2ライブラリには、PDFファイルを結合するためのPdfMergerクラスが用意されています。

このクラスを使用することで、複数のPDFを簡単に一つのPDFファイルにまとめることができます。

PdfMergerクラスは、PDFファイルを追加するためのメソッドを提供しており、結合の順序を指定することも可能です。

PDFファイルの読み込みと結合

PDFファイルを結合するには、まずPdfMergerクラスのインスタンスを作成し、appendメソッドを使用して結合したいPDFファイルを追加します。

以下は、2つのPDFファイルを結合する基本的なコード例です。

from PyPDF2 import PdfMerger
# PdfMergerのインスタンスを作成
merger = PdfMerger()
# PDFファイルを追加
merger.append("file1.pdf")
merger.append("file2.pdf")

このコードでは、file1.pdffile2.pdfを結合する準備をしています。

結合したPDFの保存方法

すべてのPDFファイルを追加した後、writeメソッドを使用して結合したPDFを保存します。

以下のコードで、結合したPDFをoutput.pdfとして保存することができます。

# 結合したPDFを保存
merger.write("output.pdf")
merger.close()

このコードを実行すると、指定した名前で結合されたPDFファイルが作成されます。

closeメソッドを呼び出すことで、リソースを解放することも忘れずに行いましょう。

実際のコード例

2つのPDFを結合するコード例

以下のコードは、2つのPDFファイルを結合するシンプルな例です。

PdfMergerクラスを使用して、file1.pdffile2.pdfを結合し、output.pdfとして保存します。

from PyPDF2 import PdfMerger
# PdfMergerのインスタンスを作成
merger = PdfMerger()
# PDFファイルを追加
merger.append("file1.pdf")
merger.append("file2.pdf")
# 結合したPDFを保存
merger.write("output.pdf")
merger.close()

このコードを実行すると、output.pdfという名前の新しいPDFファイルが作成され、指定した2つのPDFが結合されます。

複数のPDFをループで結合する方法

複数のPDFファイルを結合する場合、リストを使用してファイル名を管理し、ループを使って追加することができます。

以下のコードは、filesリストに格納されたPDFファイルをすべて結合する例です。

from PyPDF2 import PdfMerger
# PdfMergerのインスタンスを作成
merger = PdfMerger()
# 結合するPDFファイルのリスト
files = ["file1.pdf", "file2.pdf", "file3.pdf"]
# ループでPDFファイルを追加
for pdf in files:
    merger.append(pdf)
# 結合したPDFを保存
merger.write("output.pdf")
merger.close()

このコードを実行すると、file1.pdffile2.pdffile3.pdfが結合され、output.pdfとして保存されます。

ファイル名をリストで管理して結合する方法

ファイル名をリストで管理する方法は、特に多くのPDFファイルを扱う際に便利です。

以下のコードは、ファイル名をリストに格納し、結合する方法を示しています。

from PyPDF2 import PdfMerger
# PdfMergerのインスタンスを作成
merger = PdfMerger()
# 結合するPDFファイルのリスト
pdf_files = [
    "report.pdf",
    "summary.pdf",
    "presentation.pdf"
]
# リスト内のPDFファイルを追加
for pdf_file in pdf_files:
    merger.append(pdf_file)
# 結合したPDFを保存
merger.write("combined_output.pdf")
merger.close()

このコードを実行すると、report.pdfsummary.pdfpresentation.pdfが結合され、combined_output.pdfとして保存されます。

リストを使用することで、結合するファイルを簡単に管理できます。

PDF結合時の注意点

ファイルの順序を指定する方法

PDFファイルを結合する際、追加する順序は重要です。

PdfMergerクラスappendメソッドを使用する際に、ファイル名を追加する順番がそのまま結合後のPDFのページ順になります。

特定の順序で結合したい場合は、リストにファイル名を正しい順序で格納し、そのリストをループで処理することが推奨されます。

# 例: 特定の順序でPDFファイルを結合
files = ["file3.pdf", "file1.pdf", "file2.pdf"]
for pdf in files:
    merger.append(pdf)

このようにすることで、file3.pdfが最初に、次にfile1.pdf、最後にfile2.pdfが結合されます。

結合するPDFのサイズやページ数に関する制限

PDFファイルの結合には、サイズやページ数に関する制限が存在する場合があります。

特に、大きなPDFファイルを結合する際には、メモリの使用量や処理時間に注意が必要です。

一般的に、非常に大きなファイルや多数のページを持つPDFを扱う場合、処理が遅くなることがあります。

これを避けるためには、必要に応じてPDFを分割してから結合することを検討してください。

PDFファイルの互換性に関する問題

異なるソフトウェアやバージョンで作成されたPDFファイルを結合する際、互換性の問題が発生することがあります。

特に、PDFのバージョンやエンコーディングが異なる場合、結合後のPDFが正しく表示されないことがあります。

このような問題を避けるためには、同じソフトウェアやバージョンで作成されたPDFファイルを使用することが望ましいです。

また、結合後にPDFを確認し、表示や印刷に問題がないかをチェックすることも重要です。

応用例

特定のページだけを結合する方法

特定のページだけを結合したい場合、PdfMergerクラスappendメソッドにページ番号を指定することができます。

以下のコードは、file1.pdfの1ページ目とfile2.pdfの2ページ目を結合する例です。

from PyPDF2 import PdfMerger
# PdfMergerのインスタンスを作成
merger = PdfMerger()
# 特定のページを追加
merger.append("file1.pdf", pages=(0, 1))  # 1ページ目を追加
merger.append("file2.pdf", pages=(1, 2))  # 2ページ目を追加
# 結合したPDFを保存
merger.write("selected_pages_output.pdf")
merger.close()

このコードを実行すると、指定したページだけが結合された新しいPDFファイルが作成されます。

PDFのメタデータを保持して結合する方法

PDFファイルを結合する際に、元のPDFのメタデータを保持することも可能です。

PdfMergerクラスmergeメソッドを使用することで、メタデータを引き継ぐことができます。

以下のコードは、メタデータを保持してPDFを結合する例です。

from PyPDF2 import PdfMerger
# PdfMergerのインスタンスを作成
merger = PdfMerger()
# PDFファイルを追加
merger.append("file1.pdf")
merger.append("file2.pdf")
# メタデータを設定
merger.add_metadata({
    '/Title': '結合されたPDF',
    '/Author': '著者名',
    '/Subject': 'PDF結合の例',
    '/Keywords': 'PDF, 結合, PyPDF2'
})
# 結合したPDFを保存
merger.write("output_with_metadata.pdf")
merger.close()

このコードを実行すると、結合されたPDFに指定したメタデータが追加されます。

PDFの暗号化・パスワード保護を解除して結合する方法

暗号化されたPDFファイルを結合する場合、まずパスワードを解除する必要があります。

以下のコードは、パスワードで保護されたPDFを結合する例です。

from PyPDF2 import PdfMerger
# PdfMergerのインスタンスを作成
merger = PdfMerger()
# パスワードを指定してPDFファイルを追加
merger.append("protected_file1.pdf", password="your_password")
merger.append("protected_file2.pdf", password="your_password")
# 結合したPDFを保存
merger.write("output_unlocked.pdf")
merger.close()

このコードを実行すると、指定したパスワードを使用して暗号化を解除し、結合されたPDFが作成されます。

PDFの結合と同時にページを回転させる方法

PDFファイルを結合する際に、ページを回転させることも可能です。

rotateメソッドを使用して、特定のページを指定した角度で回転させることができます。

以下のコードは、file1.pdfの1ページ目を90度回転させて結合する例です。

from PyPDF2 import PdfMerger
# PdfMergerのインスタンスを作成
merger = PdfMerger()
# PDFファイルを追加し、ページを回転
merger.append("file1.pdf", pages=(0, 1), rotate=90)  # 1ページ目を90度回転
merger.append("file2.pdf")  # そのまま追加
# 結合したPDFを保存
merger.write("output_rotated.pdf")
merger.close()

このコードを実行すると、指定したページが回転された状態で結合されたPDFファイルが作成されます。

他のライブラリを使ったPDF結合方法

PyMuPDF (fitz)を使ったPDF結合

PyMuPDF(fitz)は、高速で軽量なPDF操作ライブラリです。

このライブラリを使用してPDFを結合する方法は非常にシンプルです。

以下のコードは、file1.pdffile2.pdfを結合する例です。

import fitz  # PyMuPDFをインポート
# 新しいPDFドキュメントを作成
output_pdf = fitz.open()
# PDFファイルを追加
for pdf_file in ["file1.pdf", "file2.pdf"]:
    pdf_document = fitz.open(pdf_file)
    output_pdf.insert_pdf(pdf_document)
# 結合したPDFを保存
output_pdf.save("output_pymupdf.pdf")
output_pdf.close()

このコードを実行すると、指定した2つのPDFファイルが結合され、output_pymupdf.pdfとして保存されます。

pdfrwを使ったPDF結合

pdfrwは、PDFファイルの読み書きができるPythonライブラリです。

このライブラリを使用してPDFを結合する方法は以下の通りです。

import pdfrw
# 結合するPDFファイルのリスト
pdf_files = ["file1.pdf", "file2.pdf"]
# 新しいPDFドキュメントを作成
output_pdf = pdfrw.PdfWriter()
# PDFファイルを追加
for pdf_file in pdf_files:
    output_pdf.addpages(pdfrw.PdfReader(pdf_file).pages)
# 結合したPDFを保存
output_pdf.write("output_pdfrw.pdf")

このコードを実行すると、file1.pdffile2.pdfが結合され、output_pdfrw.pdfとして保存されます。

pdfplumberを使ったPDF結合

pdfplumberは、主にPDFからテキストや表を抽出するためのライブラリですが、PDFの結合も可能です。

ただし、pdfplumberはPDFのページを直接結合する機能を持っていないため、他のライブラリと組み合わせて使用することが一般的です。

以下は、pdfplumberを使用してPDFの内容を抽出し、PyPDF2で結合する例です。

import pdfplumber
from PyPDF2 import PdfMerger
# PdfMergerのインスタンスを作成
merger = PdfMerger()
# PDFファイルを追加
for pdf_file in ["file1.pdf", "file2.pdf"]:
    with pdfplumber.open(pdf_file) as pdf:
        # 各ページを追加
        for page in pdf.pages:
            merger.append(page)
# 結合したPDFを保存
merger.write("output_pdfplumber.pdf")
merger.close()

このコードを実行すると、file1.pdffile2.pdfの内容が結合され、output_pdfplumber.pdfとして保存されます。

ただし、pdfplumberはページの結合に特化していないため、他のライブラリとの併用が必要です。

まとめ

この記事では、Pythonを使用して複数のPDFを結合する方法について詳しく解説しました。

具体的には、PyPDF2ライブラリを中心に、他のライブラリや応用例も紹介し、PDF結合に関する注意点や実際のコード例を通じて、実践的な知識を提供しました。

これを機に、PDFファイルの管理や操作に挑戦し、効率的な文書作成を実現してみてはいかがでしょうか。

関連記事

Back to top button