PythonのPyPDF2を使うことで、複数ページのpdfを分割したり、複数ファイルのpdfを結合することができます。
「pdfを分割したい」けど、会社のPCは無償ソフトのインストールが禁止されているんだけど・・・
「あっ、Pythonでどうにかできない?」と思ったら、PyPDF2を使えばpdfファイルの分割、結合ができるみたい!
「しかも、以外と簡単にできるっぽい!」
そこで今回は、PyPDF2を使って、pdfを分割する方法について解説します。
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関数の使い方
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では、他にもいろんな操作ができるので、他の記事でも解説していきます。