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

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

少し驚きましたが、pythonを使って異なるのpdfファイルのページ同士をミキシングすることができます。実際にどうなるかは手持ちのPDFファイルでやっていただきたいです。ここからは少しコードが複雑になってきますが、ポイントはオブジェクトの形を見失わないことです。今回新たに登場するメソッドは、

mergePage()メソッドです

ポイントとしては、オブジェクトの形を見失わないことです。オブジェクトとしては、

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

若干結果論じみたはなしにはなりますが、オブジェクトを意識していれば理解しやすいかと思います。残念ながらオブジェクトは可視化することはできません。ただspyderには変数エクスプローラーがありますから、ある程度は可視化できます。

Spyder 変数エクスプローラー

この画像の型と書かれている欄がオブジェクトのことです。コードを見てみましょう。

import PyPDF2, os
minutes_file = open('meetingminutes.pdf', 'rb')
pdf_reader = PyPDF2.PdfFileReader(minutes_file)
minutes_first_page = pdf_reader.getPage(0)
pdf_watermark_reader = PyPDF2.PdfFileReader(open('watermark.pdf', 'rb'))

minutes_first_page.mergePage(pdf_watermark_reader.getPage(0))

pdf_writer = PyPDF2.PdfFileWriter()
pdf_writer.addPage(minutes_first_page)

for page_num in range(1, pdf_reader.numPages):
 page_obj = pdf_reader.getPage(page_num)
 pdf_writer.addPage(page_obj)
 
result_pdf_file = open('watermarkedCover.pdf', 'wb')
pdf_writer.write(result_pdf_file)
minutes_file.close()
result_pdf_file.close()

今回は細かい序盤の動作をはぶきたいと思います。オブジェクトの流れについては、

あたりをみていただければと思います。

さて問題は7行目にあります。page.mergePage(pdf_watermark_reder.getPage(0))としています。mergePage()関数で、異なるPDFファイルのページを元のPDFに重ねることができるのです(ミックス)。

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

手持ちのPDFファイルで試していただきたいです。

ミックスの精度に関しては、あまりかんばしくはないです。でもpythonで手軽にミックスできるのはちょっと面白いかもしれないです。

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