【Python】PDF結合・分割|PyPDF2の使い方

当サイトで紹介する商品・サービス等の外部リンクは、アフィリエイト広告を含む場合があります。
スポンサーリンク
本記事を読むと以下の実行ができます
  • PDFファイルを結合する。
  • PDFを1ページずつ分割する。

Pythonを使えば、複数のPDFファイルを1つに結合とPDFファイルを1つずつ分割することが簡単にできます。

本記事では、PyPDF2ライブラリを使用してPDFを分割や結合などの操作を実行する方法を詳しく解説します。

本記事は次の人におすすめ
  • PythonでPDFを操作したい。
  • 紙の書類をデジタル化し、管理したい
  • 多数のPDFファイルを扱いたい人
  • 学術論文や研究資料を整理する学生や研究者
  • PDFを利用したドキュメント管理を効率化したいエンジニア
Udemyで学習する
スポンサーリンク

PyPDF2の機能と使う場面

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

PyPDF2を使う場面
  • PDFの結合と分割: 複数のPDFファイルを一つにまとめる、PDFファイルをページ単位で分割。
  • ページの抽出と追加: 特定のページを抽出、新しいページの追加。
  • メタデータの操作: PDFのメタデータ(タイトル、著者、作成日など)の読み取り、変更。

PDFの結合

import PyPDF2

# PDFファイルを読み込む
pdf1 = open('document1.pdf', 'rb')
pdf2 = open('document2.pdf', 'rb')

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

# PDFファイルを追加
merger.append(pdf1)
merger.append(pdf2)

# 結合されたPDFをファイルとして書き出し
with open('new_document.pdf', 'wb') as output:
    merger.write(output)

# リソースを解放
pdf1.close()
pdf2.close()
merger.close()

PDFファイルをページ単位で分割

import PyPDF2

# 分割するPDFファイルを開く
input_pdf = open('document.pdf', 'rb')

# PdfReaderオブジェクトを作成
reader = PyPDF2.PdfReader(input_pdf)

# 分割されたページを新しいPDFファイルとして保存
for i in range(len(reader.pages)):
    writer = PyPDF2.PdfWriter()
    writer.add_page(reader.pages[i])
    
    with open(f'page_{i+1}.pdf', 'wb') as output_pdf:
        writer.write(output_pdf)

# リソースを解放
input_pdf.close()

ページの抽出

import PyPDF2

# 抽出するPDFファイルを開く
input_pdf = open('document.pdf', 'rb')

# PdfReaderオブジェクトを作成
reader = PyPDF2.PdfReader(input_pdf)

# 抽出するページ(1ページ目)
page = reader.pages[0]

# 新しいPDFファイルに抽出したページを追加
writer = PyPDF2.PdfWriter()
writer.add_page(page)

# 抽出したページを保存
with open('extracted_page.pdf', 'wb') as output_pdf:
    writer.write(output_pdf)

# リソースを解放
input_pdf.close()

PDFのメタデータを読み取る

import PyPDF2

# PDFファイルを開く
input_pdf = open('document.pdf', 'rb')

# PdfReaderオブジェクトを作成
reader = PyPDF2.PdfReader(input_pdf)

# メタデータを取得
metadata = reader.metadata

# メタデータを表示
print(metadata)

# リソースを解放
input_pdf.close()

フォルダー内すべてのPDFを1つに結合

ユーザーが選択したフォルダー内のすべてのPDFファイルを結合し、1つのPDFファイルとして保存します。

Tkinterを使用してフォルダー選択ダイアログを表示し、選択されたフォルダー内のPDFファイルをPyPDF2のPdfMergerクラスで結合します。

ソースコード

import os
from PyPDF2 import PdfMerger
from tkinter import Tk, filedialog

# Tkinterを使用してフォルダー選択ダイアログを表示
root = Tk()
root.withdraw()  # メインウィンドウを表示しないようにする
folder_path = filedialog.askdirectory()

if folder_path:
    # フォルダー名を取得
    folder_name = os.path.basename(folder_path)

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

    # フォルダー内のすべてのPDFファイルを取得し、結合
    for filename in os.listdir(folder_path):
        if filename.endswith('.pdf'):
            file_path = os.path.join(folder_path, filename)
            merger.append(file_path)

    # 結合されたPDFファイルの保存
    output_path = os.path.join(folder_path, f'{folder_name}.pdf')
    merger.write(output_path)
    merger.close()

    print(f"結合されたPDFファイルが{output_path}に保存されました。")
else:
    print("フォルダーが選択されませんでした。")

UdemyでPythonを学習

Udemyは、オンデマンド式の学習講座です。
趣味から実務まで使えるおすすめの講座を紹介します。




解説

  • モジュール名

「os」:ファイルパスの操作やフォルダーのリストを取得します。
「PyPDF2」:PDFファイルの読み取りおよび書き込みを行います。
「tkinter」:GUIを使用してフォルダー選択ダイアログを表示します。

PyPDFは、標準ライブラリではないので、インストール必要があります。
コマンドプロンプト(Windows)に入力して、実行します。

pip install PyPDF2
  • フィールド(メンバ変数)

「root」:Tkinterのメインウィンドウオブジェクト。GUIダイアログの親ウィンドウとして機能する。
「folder_path」:ユーザーが選択したフォルダーのパス。
「folder_name」:選択したフォルダーの名前。
「merger」:PDFファイルを結合するためのPdfMergerオブジェクト。
「output_path」:結合されたPDFファイルの保存先パス。

  • それぞれのクラス(関数・メソッド)

PdfMergerクラス
PDFファイルを結合するためのオブジェクトを提供します。
ファイルを追加していき、最終的に1つのPDFファイルとして出力します。

Tkクラス
Tkinterのメインウィンドウオブジェクトを作成します。
GUIアプリケーションの基本ウィンドウとして機能します。

filedialog.askdirectoryメソッド
フォルダー選択ダイアログを表示し、
ユーザーが選択したフォルダーのパスを取得します。

os.path.basenameメソッド
指定されたパスからフォルダー名を取得します。

os.listdirメソッド
指定されたフォルダー内のファイルとサブフォルダーのリストを取得します。

merger.appendメソッド
指定されたPDFファイルを結合するために追加します。

merger.writeメソッド
結合されたPDFファイルを指定されたパスに保存します。

merger.closeメソッド
PdfMergerオブジェクトを閉じてリソースを解放します。

実演

フォルダー選択ダイアログが表示されるので、結合したいPDFファイルが含まれているフォルダーを選択します。

選択されたフォルダー内のすべてのPDFファイルが結合され、新しいPDFファイルとして保存されます。

フォルダー内のPDFを1ページずつ分割

次にユーザーが選択したフォルダー内のすべてのPDFファイルを各ページごとに分割し、個別のPDFファイルとして保存します。

フォルダー内の各PDFファイルを読み込み、それぞれのページを新しいPDFファイルとして保存します。

ソースコード

import os
from PyPDF2 import PdfReader, PdfWriter
from tkinter import Tk, filedialog

# Tkinterを使用してフォルダー選択ダイアログを表示
root = Tk()
root.withdraw()  # メインウィンドウを表示しないようにする
folder_path = filedialog.askdirectory()

if folder_path:
    # 出力用のフォルダーを作成
    output_folder = os.path.join(folder_path, 'split_pages')
    os.makedirs(output_folder, exist_ok=True)

    # フォルダー内のすべてのPDFファイルを処理
    for filename in os.listdir(folder_path):
        if filename.endswith('.pdf'):
            file_path = os.path.join(folder_path, filename)
            pdf = PdfReader(file_path)

            # 各ページを個別のPDFファイルとして保存
            for page_num in range(len(pdf.pages)):
                pdf_writer = PdfWriter()
                pdf_writer.add_page(pdf.pages[page_num])

                # 新しいPDFファイル名を作成
                output_filename = os.path.join(output_folder, f'{os.path.splitext(filename)[0]}_page_{page_num + 1}.pdf')
                with open(output_filename, 'wb') as output_pdf:
                    pdf_writer.write(output_pdf)

    print(f"分割されたPDFファイルが{output_folder}に保存されました。")
else:
    print("フォルダーが選択されませんでした。")

解説

上記と同じモジュールとフィールドは省略します。

  • フィールド(メンバ変数)

「filename」:現在処理中のPDFファイルの名前。
「file_path」:現在処理中のPDFファイルのフルパス。
「pdf」:現在読み込まれているPDFファイルのPdfReaderオブジェクト。
「page_num」:現在処理中のページ番号。
「pdf_writer」:新しいPDFファイルを作成するためのPdfWriterオブジェクト。
「output_filename」:分割された各ページのPDFファイル名。

  • それぞれのクラス(関数・メソッド)

PdfReaderクラス
PDFファイルを読み取るためのオブジェクトを提供します。
PDFファイルを開いてページごとの情報にアクセスできます。

PdfWriterクラス
PDFファイルを作成するためのオブジェクトを提供します。
ページを追加して新しいPDFファイルとして保存します。

os.path.joinメソッド
複数のパスコンポーネントを結合して1つのパスを作成します。

os.makedirsメソッド
指定されたパスにディレクトリを作成します。
exist_ok=Trueオプションを指定することで、すでに存在する場合でもエラーを発生させません。

os.listdirメソッド
指定されたフォルダー内のファイルとサブフォルダーのリストを取得します。

pdf_writer.add_pageメソッド
PdfWriterオブジェクトにページを追加します。

pdf_writer.writeメソッド
PdfWriterオブジェクトの内容を指定されたファイルに書き込みます。

os.path.splitextメソッド
ファイル名と拡張子を分割します。

実演

フォルダー選択ダイアログが表示されるので、分割したいPDFファイルが含まれているフォルダーを選択します。

選択されたフォルダー内のすべてのPDFファイルがページごとに分割され、新しいPDFファイルとして保存されます。

まとめ

この記事では、Pythonを使ってPDFファイルを結合および分割する方法を紹介しました。
PyPDF2ライブラリを使用することで、これらの操作を簡単に実行できます。

業務効率化や資料管理の向上に有効となります。

Udemyで学習する
タイトルとURLをコピーしました