PythonでPDFファイルを1ページ毎に分割する
PyPDF2モジュールを使って、PDFファイルを1ページ毎に分割します。
目次
処理の流れ
下記のように処理します。
PdfFileReaderクラスのgetNumPagesメソッドで、PDFファイルのページ数を調べる。
PdfFileReaderクラスのgetPageメソッドで1ページ取得。
PdfFileWriterクラスのwriterメソッドで取得したページをファイル出力。
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はこんな感じです。
公開日
広告