PythonでPDFファイルを1ページ毎に分割する

PyPDF2モジュールを使って、PDFファイルを1ページ毎に分割します。

目次

  1. 処理の流れ
  2. 使用するクラスとメソッド
  3. ページ毎に分割する実施例

処理の流れ

下記のように処理します。

  1. PdfFileReaderクラスのgetNumPagesメソッドで、PDFファイルのページ数を調べる。
  2. PdfFileReaderクラスのgetPageメソッドで1ページ取得。
  3. PdfFileWriterクラスのwriterメソッドで取得したページをファイル出力。
  4. PDFファイルの全ページに対して、2と3の繰り返し。

使用するクラスとメソッド

PdfFileReaderクラス

reader = PyPDF2.PdfFileReader(stream, [strict], [warndest], [overwriteWarnings])
名前 内容
stream   PDFファイルのパスを示す文字列、またはreadとseekに対応したオブジェクト。
strict bool 省略可。既定値はTrue。PDFファイルを読み取ったときの警告を表示するかどうか。
warndest   省略可。既定値はsys.stderr。警告の出力先。
overwriteWarnings bool 省略可。既定値はTrue。
reader   PdfFileReaderオブジェクト。

PdfFileReaderオブジェクトを作成します。

getNumPagesメソッド

n = reader.getNumPages()
名前 内容
reader   ページ数を調べたいPdfFileReaderオブジェクト。
n int PdfFileReaderオブジェクトのページ数。

PdfFileReaderオブジェクトのページ数を計算するメソッドです。引数はありません。

getPageメソッド

p = reader.getPage(pageNumber)
名前 内容
reader   ページを取得したいPdfFileReaderオブジェクト。
pageNumber int 取得したいページのページ番号。1ページ目を0とする。
p PageObject 取得したページオブジェクト。

PdfFileReaderオブジェクトから、指定したページを取得します。

PdfFileWriterクラス

writer = PyPDF2.PdfFileWriter()
名前 内容
writer   PdfFileWriterオブジェクト。

PdfFileWiterクラスは、ページオブジェクトをPDFファイルに書き込むためのクラスです。

addPageメソッド

writer.addPage(PageObject)
名前 内容
writer   PdfFileWriterオブジェクト。
PageObject PageObject writerオブジェクトに追加するページオブジェクト。

PdfFileWiterオブジェクトにPageObjectを追加するメソッドです。

writeメソッド

writer.write(stream)
名前 内容
writer   PdfFileWriterオブジェクト。
stream   ファイルオブジェクト、またはwriteとtellに対応したオブジェクト。

ファイルオブジェクトに書き込みをします。withおよびopenと共に使うのが良いでしょう。

ページ毎に分割する実施例

青空文庫から夏目先生の「こころ」をダウンロードして、ワードパッドでPDF出力したファイルがあります。155ページものです。このPDFファイルを1ページ毎に分解します。

import PyPDF2

reader = PyPDF2.PdfFileReader('./kokoro.pdf')

num_pages = reader.getNumPages()  # ページ数の取得
digits = len(str(num_pages))  # ページ数の桁数の取得
fpad = '{0:0' + str(digits) + 'd}'  # format用文字列作成

for i in range(num_pages):
    page = reader.getPage(i)  # ページを取得
    writer = PyPDF2.PdfFileWriter()  # 空のwriterオブジェクト作成
    writer.addPage(page)  # writerオブジェクトにページを追加
    fname = fpad.format(i) + '.pdf'
    with open(fname, mode='wb') as f:
        writer.write(f)  # 出力

実行すると、000.pdfから154.pdfまでの連番のPDFファイルが出力されます。

参考まで、000.pdfはこんな感じです。

分解

広告

PythonとPDFカテゴリの投稿