[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.pdf
とfile2.pdf
を結合する準備をしています。
結合したPDFの保存方法
すべてのPDFファイルを追加した後、writeメソッド
を使用して結合したPDFを保存します。
以下のコードで、結合したPDFをoutput.pdf
として保存することができます。
# 結合したPDFを保存
merger.write("output.pdf")
merger.close()
このコードを実行すると、指定した名前で結合されたPDFファイルが作成されます。
closeメソッド
を呼び出すことで、リソースを解放することも忘れずに行いましょう。
実際のコード例
2つのPDFを結合するコード例
以下のコードは、2つのPDFファイルを結合するシンプルな例です。
PdfMergerクラス
を使用して、file1.pdf
とfile2.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.pdf
、file2.pdf
、file3.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.pdf
、summary.pdf
、presentation.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.pdf
とfile2.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.pdf
とfile2.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.pdf
とfile2.pdf
の内容が結合され、output_pdfplumber.pdf
として保存されます。
ただし、pdfplumberはページの結合に特化していないため、他のライブラリとの併用が必要です。
まとめ
この記事では、Pythonを使用して複数のPDFを結合する方法について詳しく解説しました。
具体的には、PyPDF2ライブラリを中心に、他のライブラリや応用例も紹介し、PDF結合に関する注意点や実際のコード例を通じて、実践的な知識を提供しました。
これを機に、PDFファイルの管理や操作に挑戦し、効率的な文書作成を実現してみてはいかがでしょうか。