PDFファイルをPythonで扱いたい【4時間目:ページのミキシング(マージ)】

スポンサーリンク

PDFファイルのページのミキシングとは

少し驚きましたが、pythonを使って異なるのpdfファイルのページ同士をミキシングすることができます。実際にどうなるかは頭の中でイメージするのは難しいので、手持ちのPDFファイルで一回ためしてみることをおすすめします。今回紹介するコードで大事なメソッドは、mergePage()メソッドです

ポイントとしては、オブジェクトを見失わないことです。今回のコードでは以下のオブジェクトを扱います。

  • PdfFileReaderオブジェクト
  • Pageオブジェクト
  • PdfFileWriterオブジェクト

オブジェクトは可視化することはできませんがオブジェクトを意識していれば理解しやすいかと思います。余談ですがspyderには変数エクスプローラーあって「型」の欄からオブジェクトが確認できます。

Spyder 変数エクスプローラー
スポンサーリンク

PyPDF2を使ってPDFをミキシングするpythonコード

このコードは最初のページに別のPDFファイルで使用しているロゴをミキシングさせます。

import PyPDF2, os

# 会議議事録のPDFファイルを読み込む
minutes_file = open('meetingminutes.pdf', 'rb')
pdf_reader = PyPDF2.PdfFileReader(minutes_file)

# 最初のページを取得
minutes_first_page = pdf_reader.getPage(0)

# ロゴ用のPDFファイルを読み込む
pdf_logo_reader = PyPDF2.PdfFileReader(open('logo.pdf', 'rb'))

# 最初のページにロゴを追加(マージ)する
minutes_first_page.mergePage(pdf_logo_reader.getPage(0))

# 新しいPDFファイルを作成するためのライターを初期化
pdf_writer = PyPDF2.PdfFileWriter()

# 最初のページ(ロゴあり)を新しいPDFファイルに追加
pdf_writer.addPage(minutes_first_page)

# 残りのページを元のPDFからコピーして新しいPDFに追加
for page_num in range(1, pdf_reader.numPages):
    page_obj = pdf_reader.getPage(page_num)
    pdf_writer.addPage(page_obj)
 
# ロゴが追加された新しいPDFファイルを作成
result_pdf_file = open('watermarkedCover.pdf', 'wb')
pdf_writer.write(result_pdf_file)

# ファイルをクローズ
minutes_file.close()
result_pdf_file.close()

14行目はpage.mergePage(pdf_watermark_reder.getPage(0))としています。mergePage()関数で、異なるPDFファイルのページを元のPDFに重ねることができるのです(マージ)

20行目ではマージしたページをPdfFileWriterオブジェクトに追加しています。その後残りのページをforループで回し、前述のオブジェクトに追加しています。こうすることによって、1ページ目だけミックスされたものになります。

手持ちのPDFファイルでミキシングをためすと理解が深まるかと思います。ミックスの精度に関しては、あまりかんばしくはないです。でもpythonで手軽にミックスできるのはちょっと面白いかもしれないです。

次は最終回「PDFファイルをpythonで扱いたい【最終:複数のファイルを結合する】」です。

コメント

タイトルとURLをコピーしました