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はこんな感じです。

分解

公開日

広告