PythonでPDFファイルのページ編集(結合、挿入、抜き出し、分割)をする
PythonのPyPDFモジュールを使って、PDFファイルのページ毎の分割や結合などの編集をしてみます。
目次
- PyPDF2モジュールでPDFファイルを操作する
- PyPDF2モジュールのインストール
- テスト用PDFファイル
- PDFファイルを結合する
- PDFファイルを途中に挿入する
- ページを抜き出して挿入する
- PDFファイルを分割する
PyPDF2モジュールでPDFファイルを操作する
PythonでPDFファイルを操作するモジュールはいくつかありますが、分割・結合などについてはPyPDF2が有名ですのでPyPDF2を使ってみます。
PyPDF2モジュールのインストール
pipでインストールできます。
> pip install PyPDF2
テスト用PDFファイル
Windows10のワードパッドで下記の2つのファイルを作って、Windowsの印刷機能を使ってPDFに変換しました。それぞれファイル名をtest.pdfとkokoro.pdfとします。
test.pdf
kokoro.pdf
PDFファイルを結合する
test.pdfの後ろにkokoro.pdfを結合してみます。
手順としては、PdfFileMergerのオブジェクトを作成して、そのオブジェクトにappendメソッドでPDFファイルを追加し、writeメソッドで出力するという流れです。
import PyPDF2
merger = PyPDF2.PdfFileMerger()
merger.append('./test.pdf')
merger.append('./kokoro.pdf')
merger.write('./out.pdf')
merger.close()
実行するとこのような警告が出ることがあります。
PdfReadWarning: Superfluous whitespace found in object header b'1' b'0' [pdf.py:1666]
PDFファイル内に余計な空白があるという警告ですね。警告が表示されてもPDFファイルは出力されるのですが、目障りでしたらPdfFileMergerオブジェクトを作成するときのコンストラクタにstrict=Falseを設定すると警告が表示されなくなります。
merger = PyPDF2.PdfFileMerger(strict=False)
できあがったPDFはこんな感じです。test.pdfの後ろにkokoro.pdfが続いてますね。
PdfFileMergerクラスのmergeメソッドを使って結合することもできます。mergeメソッドの第1引数は、PDFファイルを結合する場所(ページ番号)です。ページ番号は0始まりですね。
import PyPDF2
merger = PyPDF2.PdfFileMerger()
merger.append('./test.pdf')
merger.merge(1, './kokoro.pdf')
merger.write('./out2.pdf')
merger.close()
できあがったPDFはこんな感じです。
PDFファイルを途中に挿入する
では、上記のmergeメソッドを使ってPDFファイルを途中に挿入してみましょう。
mergeメソッドの最初の引数は挿入先のページ番号、2つめの引数はPDFファイルのパスです。ページ番号は0始まりです。
下記の例では、kokoro.pdfの3ページ目にtest.pdfを挿入します。
import PyPDF2
merger = PyPDF2.PdfFileMerger()
merger.append('./kokoro.pdf')
merger.merge(2, './test.pdf')
merger.write('./out3.pdf')
merger.close()
できあがったPDFはこんな感じです。
ページを抜き出して挿入する
appendメソッドとmergeメソッドには、pagesという引数を設定することができます。この引数は、appendまたはmergeするページを指定するためのものです。pages引数の型はPageRangeオブジェクトかタプルです。タプルの場合は(start, stop)または(start, stop, step)を指定します。stopで指定したページは含まれませんので注意してください。
kokoro.pdfの1~2ページをkokoro.pdfの2ページ目に挿入してみます。(ややこしい)
import PyPDF2
merger = PyPDF2.PdfFileMerger()
merger.append('./kokoro.pdf')
merger.merge(1, './kokoro.pdf', pages=(0,3))
merger.write('./out4.pdf')
merger.close()
できあがったPDFはこんな感じです。意図したとおりできました。
PDFファイルを分割する
PdfFileMergerクラスの応用で、PDFファイルの分割もできます。PdfFileMergerオブジェクトを2つ作って、それぞれにページをしていしてappendすれば良いわけです。
kokoro.pdfを1~2ページと3~155ページに分割してみます。
import PyPDF2
merger1 = PyPDF2.PdfFileMerger()
merger2 = PyPDF2.PdfFileMerger()
merger1.append('./kokoro.pdf', pages=(0,2))
merger2.append('./kokoro.pdf', pages=(2,155))
merger1.write('./out5.pdf')
merger2.write('./out6.pdf')
merger1.close()
merger2.close()
できあがったPDFはこんな感じです。分割できましたね。
1ページだけを抜き出したい場合は、pages引数にそのページを指定すれば良いわけですね。
公開日
広告