※本記事にはPR(アフィリエイト広告)が含まれています。
【Python業務効率化】PDF自動処理マスター講座 第1回 PDFの結合・分割・ページ操作を自動化する基本
経理処理、契約書管理、報告書作成など、ビジネスの現場では日々大量のPDFファイルを取り扱います。「複数のPDFを1つにまとめたい」「不要なページだけ削除したい」「特定のページだけ抜き出して別のファイルにしたい」――こうした作業を手作業で行っていると、時間がかかるだけでなく、ミスも発生しやすくなります。
本連載「Python業務効率化】PDF自動処理マスター講座」では、Pythonを使ってPDFに関するあらゆる作業を自動化する方法を、全5回程度に分けてじっくり解説していきます。第1回となる今回は、PDF自動化の基本中の基本である「結合」「分割」「ページ操作」を取り上げます。プログラミング初心者の方でも手を動かしながら理解できるよう、コードの意味を一つひとつ丁寧に説明していきますので、ぜひ最後までお付き合いください。
PDF自動処理の準備をしよう
使用するライブラリ「pypdf」とは
PythonでPDFを操作する際によく使われるライブラリに「PyPDF2」がありますが、現在はその後継である「pypdf」の利用が推奨されています。pypdfはPyPDF2の開発チームが引き継いで開発している純粋なPythonライブラリで、PDFの結合・分割・回転・テキスト抽出・暗号化など、幅広い機能を提供しています。
インストール方法
以下のコマンドをターミナル(またはコマンドプロンプト)で実行し、pypdfをインストールします。
pip install pypdf
インストールが完了したら、Pythonスクリプト内で以下のようにインポートできるか確認しましょう。
from pypdf import PdfReader, PdfWriter
print("pypdfのインポートに成功しました")
エラーが出なければ準備は完了です。これ以降のサンプルコードでは、このpypdfを使って解説を進めていきます。
複数のPDFを1つにまとめる「結合」処理
会議資料や複数部門からの報告書など、別々に作成されたPDFを1つのファイルにまとめたい場面は非常に多くあります。pypdfのPdfWriterを使えば、わずか数行で複数のPDFを結合できます。
基本の結合コード
from pypdf import PdfWriter
# 結合したいPDFファイルのリスト
pdf_list = ["report_01.pdf", "report_02.pdf", "report_03.pdf"]
writer = PdfWriter()
# リストの順番通りにページを追加していく
for pdf_path in pdf_list:
writer.append(pdf_path)
# 結合結果を新しいファイルとして保存
with open("merged_report.pdf", "wb") as output_file:
writer.write(output_file)
print("PDFの結合が完了しました")
PdfWriterのappend()メソッドにファイルパスを渡すだけで、ページがそのまま追加されていきます。リストの順番がそのまま結合後のページ順になる点がポイントです。
フォルダ内のPDFを一括で結合する
実務では「フォルダ内のPDFを全部まとめて結合したい」というケースも多いでしょう。その場合は、標準ライブラリのglobやpathlibを組み合わせると便利です。
from pathlib import Path
from pypdf import PdfWriter
folder = Path("./input_pdfs")
# ファイル名順(辞書順)にソートして取得
pdf_files = sorted(folder.glob("*.pdf"))
writer = PdfWriter()
for pdf_file in pdf_files:
writer.append(str(pdf_file))
with open("all_merged.pdf", "wb") as f:
writer.write(f)
ファイル名に「01_」「02_」のような連番を付けておくと、ソート順=希望の結合順になりやすいため、実務ではこの命名ルールを徹底しておくと後の自動化がスムーズになります。
PDFを目的に応じて切り分ける「分割」処理
反対に、1つの大きなPDFから必要なページだけを取り出したり、ページ単位で別ファイルに分割したりしたい場合もあります。こちらもPdfReaderとPdfWriterの組み合わせで実現できます。
全ページを1ページずつファイル分割する
from pypdf import PdfReader, PdfWriter
reader = PdfReader("source.pdf")
for i, page in enumerate(reader.pages):
writer = PdfWriter()
writer.add_page(page)
output_filename = f"page_{i + 1:03d}.pdf"
with open(output_filename, "wb") as f:
writer.write(f)
print(f"{len(reader.pages)}ページを分割しました")
reader.pagesはページオブジェクトのリストのように扱えるため、enumerate()でループを回しながら1ページずつ新しいPdfWriterに追加して保存しています。ファイル名のゼロ埋め(:03d)をしておくと、ファイル一覧がきれいに数字順で並ぶのでおすすめです。
指定した範囲だけを抜き出す
「5〜10ページだけ抜き出したい」というように、特定範囲だけを1つのファイルとして切り出すことも可能です。
from pypdf import PdfReader, PdfWriter
reader = PdfReader("source.pdf")
writer = PdfWriter()
# 5ページ目から10ページ目まで(インデックスは0始まりなので-1する)
start_page = 5 - 1
end_page = 10
for page in reader.pages[start_page:end_page]:
writer.add_page(page)
with open("extracted_pages.pdf", "wb") as f:
writer.write(f)
Pythonのリストはインデックスが0から始まるため、「人間が数える5ページ目」はreader.pages[4]になる点に注意してください。このズレは初心者がつまずきやすいポイントなので、必ず意識しておきましょう。
ページ単位で加工する「回転・削除・入れ替え」の基本
結合・分割に加えて、個々のページに対する細かな操作もpypdfだけで対応できます。スキャンした書類が横向きになっていたり、不要な表紙だけ削除したいといったケースで役立ちます。
ページを回転させる
from pypdf import PdfReader, PdfWriter
reader = PdfReader("scanned.pdf")
writer = PdfWriter()
for page in reader.pages:
# 時計回りに90度回転
page.rotate(90)
writer.add_page(page)
with open("rotated.pdf", "wb") as f:
writer.write(f)
rotate()メソッドに角度を指定するだけで、ページの向きを変更できます。90、180、270といった90度単位の値を指定するのが一般的です。
特定のページだけ削除する
from pypdf import PdfReader, PdfWriter
reader = PdfReader("document.pdf")
writer = PdfWriter()
# 3ページ目(インデックス2)を除外してコピーする
pages_to_remove = {2}
for i, page in enumerate(reader.pages):
if i not in pages_to_remove:
writer.add_page(page)
with open("document_removed.pdf", "wb") as f:
writer.write(f)
「削除する」という直接的な機能こそありませんが、「削除したいページ以外を新しいファイルにコピーする」という発想に切り替えることで、同じ結果を得られます。この考え方はPDF操作全般でよく使うテクニックなので覚えておくと便利です。
ページの順番を入れ替える
from pypdf import PdfReader, PdfWriter
reader = PdfReader("document.pdf")
writer = PdfWriter()
# 元の順番が [0,1,2,3] だったものを [1,0,3,2] の順にしたい場合
new_order = [1, 0, 3, 2]
for index in new_order:
writer.add_page(reader.pages[index])
with open("reordered.pdf", "wb") as f:
writer.write(f)
入れ替えたい順番をリストで定義し、そのリストの通りにページを追加していくだけで、好きな順序に並べ替えることができます。
まとめ
今回は「Python業務効率化】PDF自動処理マスター講座」の第1回として、pypdfライブラリを使ったPDFの基本操作を解説しました。
- pypdfをインストールすれば、少ないコードでPDF操作を自動化できる
PdfWriter.append()で複数PDFを簡単に結合できるPdfReader.pagesをループ処理すれば、1ページ単位や範囲指定での分割ができる- 「削除したいページを除いてコピーする」という発想で、削除・並べ替えも実現できる
rotate()でページの向きも自在に変更できる
これらの基本操作を組み合わせるだけでも、日々のPDF関連作業の多くを自動化できます。まずは今回のコードを実際に手元の環境で動かしてみて、ご自身の業務で使いそうなPDFファイルで試してみてください。
次回「第2回」では、PDFからのテキスト抽出やメタデータの編集、さらにはパスワード設定・解除といった、より実践的なPDF操作について解説していく予定です。ぜひ引き続きご覧ください。
Photo by Florian Olivo on Unsplash

