【Python】PDF Fileの全てのページを逆順にする
書籍などを保存しておくために書籍を自炊することがある。
スキャンに問題なければ、両面取り込みで全てのページが取り込めるのだが、本のサイズや紙質が特殊な本の場合、上手いことスキャンできず、片面取り込みで表面(奇数ページ)、裏面(偶数ページ)をそれぞれ取り込まなくてはならない場合がある。
奇数ページであれば、そのままページの若い順に取り込むことが出来るが、偶数ページの場合、最後のページからスキャンされるのでページ順が逆で取り込まれることになる。
取り込む前に全てのページを手で入れ換えれば、奇数ページと同様にページの若い順で取り込むことが出来るが、数十、数百ページもあるものを、手で入れ換えるのは、現実的ではない。
Acrobat DCには、ページを逆転する機能(アクションスクリプト)があるので、Acrobat DCを所有している人は、それを利用するのが早い。
さて、Acrobat DCを持っていない場合はどうするか。
同様なことが出来るPDF編集ソフトは、数多く販売されているので、それを購入しても良いと思うが、なるべくお金を掛けずに、やりたいことを実現したい。
ということで、とりあえずなんでも出来てしまうPythonでやってみた。
流れとしては、PDFから総ページ数を取得して、最後のページから取得して、新しいファイルに書き込んでいく。これだけ。Pythonて本当に便利。
プログラムがある程度判る人なら特に解説する必要も無いほど単純なロジックですね。
ReverseToBook.py
from PyPDF2 import PdfFileReader, PdfFileWriter def merge_pdfs(path, output): pdf_writer = PdfFileWriter()pdf_reader = PdfFileReader(path)
maxPageNum = pdf_reader.getNumPages()
# 最後のページから読み込んで、新しいPDFに追加していくfor page in range(maxPageNum, 0, -1):
pdf_writer.addPage(pdf_reader.getPage(page-1))
# 新しいPDFに出力
with open(output, 'wb') as out: pdf_writer.write(out)
if __name__ == '__main__': # ここにファイル名を設定 path = '逆ページになっている.pdf' # outputに出力ファイル名を設定 merge_pdfs(path, output='reverced.pdf')
【必要なもの】
・PyPdf2