前回はPyPDF2モジュールを使うときのオブジェクトの流れを説明しました。前回の記事はこちら↓
PDFファイルをpythonで扱いたい【1時間目:オブジェクトの流れ】
今回はPdfFilwWriterオブジェクトというものが登場します。また違うオブジェクトが登場するので少しややこしいです。しかも前述のオブジェクトにReaderオブジェクトを渡しただけではファイルは生成されません。その点もう1作業することでファイルが生成できます。
今回は2つのpdfファイルを結合します。これはもしかすると業務で役立てることができるかもしれません。ただ、前回も言いましたが、プログラムを使うよりもフリーウェアをつかったほうが簡単にPDFを結合できる可能性があります。そのためやはり趣味色が強い内容になってしまうとは思っています。
それではコードをみていきましょう。
2つのpdfファイルを結合して新たなpdfファイルとして保存するpythonコード
import PyPDF2, os # 1つ目のPDFファイルを読み込む pdf_file1 = open('meetingminutes.pdf', 'rb') pdf_reader1 = PyPDF2.PdfFileReader(pdf_file1) # 2つ目のPDFファイルを読み込む pdf_file2 = open('meetingminutes2.pdf', 'rb') pdf_reader2 = PyPDF2.PdfFileReader(pdf_file2) # 新しいPDFファイルを作成するためのオブジェクトを初期化 pdf_writer = PyPDF2.PdfFileWriter() # 1つ目のPDFファイルからページをコピーして新しいPDFに追加する for page_num in range(pdf_reader1.numPages): page_obj = pdf_reader1.getPage(page_num) pdf_writer.addPage(page_obj) # 2つ目のPDFファイルからページをコピーして新しいPDFに追加する for page_num in range(pdf_reader2.numPages): page_obj = pdf_reader2.getPage(page_num) pdf_writer.addPage(page_obj) # 新しいPDFファイルを保存 pdf_output_file = open('combinedminutes.pdf', 'wb') pdf_writer.write(pdf_output_file) pdf_output_file.close() # ファイルをクローズ pdf_file1.close() pdf_file2.close()
プログラムの解説
- 1~9行目で2つのpdfファイルをopenで開いています。それからPdfFIleReaderオブジェクトを2つ作っている点に注目です。
- 12行目はPdfFileWriterオブジェクトの登場です。これを作っただけではファイルは作られません。
- 14~22行目がポイントです。これはforループでpdfファイルを1ページずつ回して、ページオブジェクトを生成しています。それからWriterオブジェクトに格納しています。二つのpdfファイルをforループで回しているので、同じWriterオブジェクトに違うpdfファイルのページを格納しているわけです(addPage()関数で追加)
- 25行目はファイルを書き込みモードで開きます。
- 26行目のpdf_writer.writeはPdfFileWriterオブジェクトをwriteで書き込んでいるということになります。ややこしいですね。
- 最後に閉じて終了です
これで2つのファイルが結合され新たなPDFの出来上がりです。
今回はファイルを結合させただけでしたが、プログラム次第では好きなページを結合することもできそうです。
なかなかおもしろい内容だと思ったのですが、役に立つかどうかは疑問です。
コメント