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はこんな感じです。
公開日
広告