Python PyPDF2でpdfを分割する方法

PythonのPyPDF2を使うことで、複数ページのpdfを分割したり、複数ファイルのpdfを結合することができます。

「pdfを分割したい」けど、会社のPCは無償ソフトのインストールが禁止されているんだけど・・・

「あっ、Pythonでどうにかできない?」と思ったら、PyPDF2を使えばpdfファイルの分割、結合ができるみたい!

「しかも、以外と簡単にできるっぽい!」

そこで今回は、PyPDF2を使って、pdfを分割する方法について解説します。


参考
PyPDF2 Documentation公式サイト

Python PyPDF2でpdfを分割する方法

PyPDF2でpdfを分割することができます。

実際に下図のようなページ1~3の1つのpdfファイルを3つのpdfファイルに分割してみましょう。

PyPDF2 インストール

PyPDF2を使ってpdfを分割していきます。

そこで、PyPDF2をインストールする必要があるため、pipコマンドを実行します。

コード

pip install PyPDF2

▼ コマンドプロンプト

これで、PyPDF2のパッケージを使用することが可能になります。

PyPDF2 複数ページのpdfを分割

複数ページ(p.1~3)のpdfを1つ1つのpdfに分割してみましょう。

コード

import PyPDF2

org_fileName = 'file.pdf'  # 分割したいファイルのファイル名
new_fileName = 'page' # 分割後のファイル名

def splitPDF(src_path, new_pdf):
    org_pdf = PyPDF2.PdfFileReader(src_path)
    for i in range(org_pdf.numPages):
        new_pdf = PyPDF2.PdfFileWriter()
        new_pdf.addPage(org_pdf.getPage(i))
        with open('{}_{}.pdf'.format(new_pdf, i), 'wb') as f:
            new_pdf.write(f)

splitPDF(org_fileName, new_fileName)
実行前
実行後

.pyファイルを実行することで、pdfファイルが分割できました!

コードを順番に見ていきましょう。

PdfFileReader

PdfFileReaderで分割前のpdfファイルを読み込んでいます。

コード

PyPDF2.PdfFileReader(src_path)

numPages

numPagesを使うことで、読み込んだpdfファイルのページ総数を取得することができます。

ここでは、読み込んだページ総数分だけ処理を繰り返し実行しています。

コード

for i in range(org_pdf.numPages):

for文については、以下の記事をご参照ください。

Python入門 文字列と数値の出力 print関数の使い方Python入門 文字列と数値の出力 print関数の使い方

PdfFileWriter

PdfFileWriterを使うことで、pdfファイルに書き込むことができます。

コード

.PdfFileWriter()

addPage & getPage

PdfFileReaderクラスのgetPage()メソッドでページを選択し、PdfFileWriterクラスのaddPage()メソッドでページ追加しています。

コード

new_pdf.addPage(org_pdf.getPage(i))

open

open関数を使って、pdfファイルを読み込んでいます。

その際、「as f」でファイルを”f”として扱うようにしています。

write関数を使って、先ほどaddPageで追加したページを書き込んでいます。

コード

with open('{}_{}.pdf'.format(new_pdf, i), 'wb') as f:
  new_pdf.write(f)

ファイル名を0埋めしたい場合

ファイル名のページ番号を0埋めしたいという場合は、以下のコードを先ほどのコードに追加すればOKです。

コード

i = '{0:02}'.format(i)

完成版のコードは以下の通りです。

コード

import PyPDF2

org_fileName = 'file.pdf'  # 分割したいファイルのファイル名
new_fileName = 'page' # 分割後のファイル名

def splitPDF(src_path, new_basepath):
    org_pdf = PyPDF2.PdfFileReader(src_path)
    for i in range(org_pdf.numPages):
        new_pdf = PyPDF2.PdfFileWriter()
        new_pdf.addPage(org_pdf.getPage(i))
        i = '{0:02}'.format(i)
        with open('{}_{}.pdf'.format(new_basepath, i), 'wb') as f:
            new_pdf.write(f)

splitPDF(org_fileName, new_fileName)

0埋めした場合のファイル名

まとめ

PyPDF2をつかうことで、pdfファイルを分割することができます。

PyPDF2では、他にもいろんな操作ができるので、他の記事でも解説していきます。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です