【Python】2つのPDF Fileのページを交互に統合する

前回は、Pythonを使ってPDF Fileのページを逆転する方法を紹介した。

今回は、奇数ページ、偶数ページに分かれたPDF Fileを、交互にマージしてひとつのPDF Fileにする方法を紹介する。

両面取り込みに問題があり、片面取り込みをした場合、当然ながら2つのPDF Fileが作成される。

これについても、少ないページであれば、統合した後に1ページずつ手作業で入れ換えればなにも問題は無い。

ただし、統合やページ編集するために、Acrobat DCやその他、PDF編集ソフトを利用すればそう難しくないが、交互にマージする機能というのはなかなか搭載されていないこともあるし、やはりお金を掛けずに、やりたいことを実現したい。

ということで、今回もとりあえずなんでも出来てしまうPythonでやってみた。

流れとしては、ページ逆転よりは少し複雑。

2つのPDFから総ページ数を取得して、多い方のページ数でループする。
そして奇数、偶数の順で読み込み、新しいPFDに追加していく。

ただし、奇数ページPDFと偶数ページPDFの総ページ数が異なる場合、そのまま最後まで読んでしまうとエラーになってしまうので、総ページ数を超えたらそのPDFは読み込まないようにする必要がある。

このループを別々に行えば、2つめのPDFを1つめのPDFの最後に追加するということも可能だ。

べた書きで余り美しくはないが、今回はこれまでとする。
2つ以上のPDF Fileを交互にマージすることも容易なのでロジックを考えてみて欲しい。


MergeToBooks.py

from PyPDF2 import PdfFileReader, PdfFileWriter

def merge_pdfs(paths, output):
  pdf_writer = PdfFileWriter()
  pdf_reader_1st = PdfFileReader(paths[0])
  pdf_reader_2nd = PdfFileReader(paths[1])
  # それぞれのPDFの総ページ数を取得
  numPage_1st = pdf_reader_1st.getNumPages()
  numPage_2nd = pdf_reader_2nd.getNumPages()
  # 総ページ数の大きい方を確認
  maxPageNum = numPage_1st
  if ( numPage_1st < numPage_2nd ):
    maxPageNum = numPage_2nd
  # 全てのページについて処理を行う
  for page in range(maxPageNum):
    # 奇数ページを読み込み、新しいPDSに追加(総ページを越えたらパス)
    if ( page < numPage_1st ):
      pdf_writer.addPage(pdf_reader_1st.getPage(page))
    # 偶数ページを読み込み、新しいPDSに追加(総ページを越えたらパス)
    if ( page < numPage_2nd ):
      pdf_writer.addPage(pdf_reader_2nd.getPage(page))
  # 新しいPDFに書き込む
  with open(output, 'wb') as out:
    pdf_writer.write(out)

if __name__ == '__main__':
  # ここに統合する2つのファイル名を設定
  paths = ['奇数ページ.pdf', '偶数ページ.pdf']
  # outputに出力ファイル名を設定
  merge_pdfs(paths, output='Merge.pdf')

【必要なもの】
  ・PyPdf2

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です