pyPdf で pdf ファイルから部分抽出

上を参考にして書いてみた。もっと機能を加えたい。

$ pyPdfjam.py 1,3-5,7- < in.pdf > out.pdf

のように使う。

#!/usr/bin/python2.7
import argparse
parser = argparse.ArgumentParser(description='Parse pagespec.')
parser.add_argument('pagespec')
args = parser.parse_args()
pagespec = args.pagespec
import copy, sys, re

from pyPdf import PdfFileWriter, PdfFileReader
input = PdfFileReader(sys.stdin)
output = PdfFileWriter()
lastPage = input.getNumPages()
def parseSpec(s):
    m = re.compile('(\d*)-(\d*)').match(s)
    if m:
        s,e = m.groups()
        s = 1 if not s else int(s)
        e = lastPage if not e else int(e)
        return [s,e]
    m = re.compile('\d*').match(s)
    if m:
        p = int(m.group(0))
        return [p,p]
    []
specs = [ parseSpec(s)  for s in pagespec.split(',') if s ]
sys.stderr.write(str(specs))

for spec in specs:
    s,e = spec
#    sys.stderr.write(str(s)+"-"+str(e)+"\n")
    for p in [input.getPage(i) for i in range(s-1,e)]:
        output.addPage(p)
output.write(sys.stdout)