YutaKaのPython教室

Python の文法やライブラリ、API、環境構築について画像・動画・ソースコード付きで徹底解説!

Python PDFの結合方法|すぐ使えるサンプルコード付き!

Pythonでは外部ライブラリpypdfを使うと、簡単にPDFを結合することができます。

しかし、実際に使おうとすると次のような問題に直面することも…

  • pypdfのインストール方法は?
  • 結合にはどのメソッドを使うの?
  • フォルダ内のPDFを一括で結合するには?

そこで、この記事ではpypdfを使用したPDFの結合方法についてわかりやすく解説していきます。

PDFの結合の方法

PythonでPDFを結合する場合は、PDF操作用の外部ライブラリpypdfを使うと便利です。

pypdfでPDFを結合する場合には、次の手順を踏んでいきます。

  1. PDF結合用ライブラリのインストール
  2. pypdfモジュールからPdfMerger()import
  3. PdfMerger()オブジェクトを作成
  4. .append()メソッドでPDFを結合
  5. .write()メソッドで書き出し、.close()メソッドでPDFを閉じる

例として、sample1.pdfsample2.pdfを結合するサンプルコードを見てみましょう。

from pypdf import PdfMerger

# PdfMerger()オブジェクトを作成
merger = PdfMerger()

# 結合するPDFのパスをリストで準備
pdfs = ["sample1.pdf", "sample2.pdf"]

# for文で結合
for pdf in pdfs:
    merger.append(pdf)
    
# 書き出し
merger.write("merged.pdf")
merger.close()

sample1.pdfsample2.pdfが結合されたmerged.pdfがカレントフォルダに出力されます。

簡単にPDFの結合ができますね。

以下では、次の内容についてさらに詳しく解説していきます。

pypdfのインストール方法

まずはPDF操作用の外部ライブラリpypdfをインストールしましょう。

pipでインストールする場合は、ターミナルで以下のコマンドを実行します。

pip install pypdf

Anacondaの場合は、conda-forgeからインストールできます。

次のコマンドでインストールしましょう。

conda install pypdf -c conda-forge

結合手順の詳しい解説

pypdfをインストールしたら、PdfMergerクラスを使用してPDFを結合します。

from pypdf import PdfMerger
merger = PdfMerger()

PdfMerger.append()メソッドにPDFを渡して結合していきましょう。

.append()メソッドにPDFを渡すと、末尾にPDFが追加されていきます。

pdfs = ["sample1.pdf", "sample2.pdf", "sample3.pdf"]

for pdf in pdfs:
    merger.append(pdf)

最後に結合後のPDFを書き出します。

merger.write("merged.pdf")
merger.close()

書き出し後はリソースを開放するために.close()するのを忘れないようにしましょう。

.close()を忘れがちな人は、初めからwith open()構文を使ってもOKです。

with open("merged.pdf", "wb") as f:
    merger.write(f)
  • 【参考】作業の効率化や自動化については、次の記事も参考にしてみてください。
≫【レビュー】退屈なことはPythonにやらせよう | 単純作業は自動化
名著「退屈なことはPythonにやらせよう 」をレビュー!単純作業を自動化して、自分が本当にしたいことのために時間を確保していこう!所要時間やできるようになったことを紹介!この本を参考にして作成した、自作自動化スクリプトも紹介しています!
www.yutaka-note.com/entry/python_jido
 

PDFファイルの指定方法

ここまでの例では、文字列でカレントフォルダ内のPDFファイルを指定しました。

これ以外にも.append()メソッドでは、次のようにPDFを指定できます。

形式
パスの文字列 'sample.pdf'
'./file_name/sample.pdf'
Pathオブジェクト Path('./file_name/sample.pdf')
PdfReaderオブジェクト PdfReader('sample.pdf')

Pathオブジェクトを直接渡せるので、ファイル探索とも相性がいいです。

以下で.glob()メソッドで、特定のフォルダ内のPDFを探索する例を見てみましょう。

特定のフォルダ内のPDFファイルを全て結合

Pathオブジェクトのファイル検索メソッド.glob()を使用すると、特定のフォルダ内のPDFファイルを検索することが可能です。

まずはPathオブジェクトを生成します。

  • path = Path("FOLDER_PATH")

次に以下のようなテンプレで.pdfを検索します。

検索先 パターンテンプレ
Pathフォルダ内 Path.glob("*.pdf")
サブフォルダ内 Path.glob("*/*.pdf")
Pathフォルダ+サブフォルダ内 Path.glob("**/*.pdf")

例として、./sourceフォルダ内の全てのPDFを探索・結合してみます。

from pathlib import Path
from pypdf import PdfMerger

folder = Path("./source")
merger = PdfMerger()

# folder内のPDFファイルを探索 → 結合
for pdf in folder.glob("*.pdf"):
    merger.append(pdf)
    
# 結合したPDFを出力
with open(folder / "merged.pdf", "wb") as f:
    merger.write(f)
  • 【参考】.glob()でのファイル探索は、次の記事で詳しく解説しています。
≫Python フォルダ内ファイル検索方法まとめ|pathlib.glob
Pythonのファイル操作用のモジュールpathlibというものがあります。pathlibを使用すれば、様々な条件でのファイル・フォルダの検索を行うことが可能です。しかし、実際にファイル検索する際には、次のような問題に直面することも…①pathlibを使って、ファイル検索するには具体的にどうすればいいの?②特定の条件に合ったファイルを検索する方法は?③サブフォルダも含めて、全ファイル検索するにはどうするの?こういった疑問を解決するために、この記事ではpathlibの.glob()メソッドを使用したファイル検索方法について、図解付きで解説していきます。
www.yutaka-note.com/entry/pathlib_glob
 

指定のページにPDFを挿入

ここまで紹介してきた.append()メソッドでは、末尾にPDFが追加されます。

PDFの特定の位置に新規PDFを挿入する場合は.merge()メソッドを使用します。

.merge()のその他の引数は.append()と同じです。

2ページ目にPDFを追加する例をサンプルコードで確認してみましょう。

from pypdf import PdfMerger

merger = PdfMerger()
pdfs = ["sample1.pdf", "sample2.pdf"]

for pdf in pdfs:
    merger.merge(2, pdf)
    
merger.write("merged.pdf")
merger.close()

PDFに表紙がある場合や、章立てがある場合に便利ですね。

結合するページの指定

pages引数を指定すると、特定のページのみを結合することが可能です。

pagesの指定方法は次の通りです。

指定方法 指定例
[結合するページのリスト] [1, 5] → 0, 4ページ
[0, 1, 0, 1] → 1, 2, 1, 2ページ(同一ページの指定もOK)
range形式のタプル
(start, end [,step] )
(2, 10) → 3~10ページ
pypdf.PageRangeオブジェクト PageRange(2, 10) → 3~10ページ
PageRange("1:") → 2ページ目から末尾まで

Pythonは数字を0からカウントするので、ページ番号と1ずれます。

そのため、結果としてrange関係は始点のページが含まれなくなります。

例として、PageRangeを使って2ページ目移行を結合する例を見てみましょう。

from pypdf import PageRange
merger = PdfMerger()

merger.append("sample.pdf", pages=PageRange("1:"))
merger.write("res.pdf")
merger.close()

PDFの結合方法まとめ

今回はPythonの外部ライブラリpypdfを使ってPDFを結合する方法を紹介しました。

Pythonは豊富な外部ライブラリのおかげで、様々なファイルやソフトを簡単に操作できます。

作業の効率化や自動化については、次の記事も参考にしてみてください。

≫【レビュー】退屈なことはPythonにやらせよう | 単純作業は自動化
名著「退屈なことはPythonにやらせよう 」をレビュー!単純作業を自動化して、自分が本当にしたいことのために時間を確保していこう!所要時間やできるようになったことを紹介!この本を参考にして作成した、自作自動化スクリプトも紹介しています!
www.yutaka-note.com/entry/python_jido