【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