上を参考にして書いてみた。もっと機能を加えたい。
$ 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)