すべてのページを変換する

ページを指定して描画するためには、

context = CGBitmapContextCreateWithColor ( width, height, colorSpace, ( 0, 0, 0, 0 ) )
context.drawPDFDocument ( r, pdf, page )

のように、drawPDFDocumentでページ数を渡してあげればOKです。

すべてのページに対してこのような処理をするためには、PDFの総ページ数を拾ってくる必要があります。

numberOfPages = pdf.getNumberOfPages()

これをループでまわしてあげるとこうなります。

004test.py

from CoreGraphics import *

# 入力ファイル
input = "in.pdf"
# 出力ファイル
output = "out%03d.jpg"

# 拡大率を設定
ratio = 3.0
transform = CGAffineTransformMakeScale( ratio , ratio )

# カラースペースはRGBで指定
colorSpace = CGColorSpaceCreateDeviceRGB ()

# PDFを読み込み
pdf = CGPDFDocumentCreateWithProvider ( CGDataProviderCreateWithFilename ( input ) )
# 総ページ数を取得
numberOfPages = pdf.getNumberOfPages()

# すべてのページに対して処理
for page in range ( 1, numberOfPages + 1 ):
    # ページのRectを取得
    rect = pdf.getMediaBox( page )
    # 拡大処理
    rect = rect.applyAffineTransform( transform )
    # ページの幅と高さを取得
    width = long( rect.size.width )
    height = long( rect.size.height )
    # ビットマップコンテキストを用意
    context= CGBitmapContextCreateWithColor ( width, height, colorSpace, ( 0, 0, 0, 0 ) )
    # 指定ページを描画
    context.drawPDFDocument ( rect, pdf, page )
    # ファイルに書き出し
    context.writeToFile ( output%page , kCGImageFormatJPEG )

コメントをつけて、変数名もすこしマトモなものにしました(笑)。

一番最後に

output%page

としていますが、こうする事によって

  • out001.jpg
  • out002.jpg

の様に連番が振られたファイルが生成されます。この辺はJavaと違って便利ですね。

forループの書き方とかPython初心者なんで見よう見まねで書いたんですがこんなもんでしょうか??

とりあえず、ここまででPDFをJPEGに変換すると言う野望(?)は果たされました。あとはこのスクリプトをもう少し汎用的に使いやすくする事をやってみたいと思います。