YAMAGUCHI::weblog

土足で窓から失礼いたします。今日からあなたの息子になります。 当年とって92歳、下町の発明王、エジソンです。

PythonでPDFファイルを全ページ逆さまにする

はじめに

こんにちは、Python界の情弱です。最近部屋を片付けようと思って、前々からほしいなあと思っていたScanSnap S1300を買ったんです。用途は自炊とかではなくたまった資料の電子化で。

FUJITSU ScanSnap S1300 FI-S1300

FUJITSU ScanSnap S1300 FI-S1300


で、数十枚とかある資料に結構付箋が貼ってあって、紙詰まりを防ぐために全ページ逆さまにスキャンするとかしてたんですね。Mac OS XならプレビューでPDFのページを回転して保存しなおしたり出来るので割と便利なんですが、それでも数十枚を全ページ回転させるのはだるい!
というわけで、自分が慣れ親しんだPythonでそれができないかな、と思って調べてみたら猛烈に便利なモジュールがあったので早速使ってみました。

ログ

まずはpyPdfをインストールします。普通にeasy_installでもpipでもインストール可能。

% pip install pypdf
Downloading/unpacking pypdf
  Downloading pyPdf-1.13.tar.gz
  Running setup.py egg_info for package pypdf
Installing collected packages: pypdf
  Running setup.py install for pypdf
Successfully installed pypdf
Cleaning up...

で、チュートリアルを丸パクリ気味にコードを書いたらあっという間に出来ました。

# -*- coding: utf-8 -*-

from pyPdf import PdfFileWriter, PdfFileReader

def main(filename):
  print "Rotate all page of PDF:", filename

  # expect filename as "*.pdf"
  output_filename = filename.replace(".pdf", "_rotated.pdf")

  original = PdfFileReader(file(filename, 'rb'))
  rotated = PdfFileWriter()
    
  page_num = original.getNumPages()

  for i in xrange(0, page_num):
    rotated.addPage(original.getPage(i).rotateClockwise(180))

  outputStream = file(output_filename, "wb")
  rotated.write(outputStream)
  outputStream.close()
    
    
if __name__ == "__main__":
  main("test.pdf")

やべー、超簡単。