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