• ホーム
  • PythonとPDF
  • PythonでPDFファイルのページ編集(結合、挿入、抜き出し、分割)をする

PythonでPDFファイルのページ編集(結合、挿入、抜き出し、分割)をする

PythonのPyPDFモジュールを使って、PDFファイルのページ毎の分割や結合などの編集をしてみます。

目次

  1. PyPDF2モジュールでPDFファイルを操作する
  2. PyPDF2モジュールのインストール
  3. テスト用PDFファイル
  4. PDFファイルを結合する
  5. PDFファイルを途中に挿入する
  6. ページを抜き出して挿入する
  7. PDFファイルを分割する

PyPDF2モジュールでPDFファイルを操作する

PythonでPDFファイルを操作するモジュールはいくつかありますが、分割・結合などについてはPyPDF2が有名ですのでPyPDF2を使ってみます。

PyPDF2モジュールのインストール

pipでインストールできます。

> pip install PyPDF2

テスト用PDFファイル

Windows10のワードパッドで下記の2つのファイルを作って、Windowsの印刷機能を使ってPDFに変換しました。それぞれファイル名をtest.pdfとkokoro.pdfとします。

test.pdf

test

kokoro.pdf

kokoro

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

結合2

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はこんな感じです。意図したとおりできました。

挿入2

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 分割2

1ページだけを抜き出したい場合は、pages引数にそのページを指定すれば良いわけですね。

広告

PythonとPDFカテゴリの投稿