title: How to insert a "missing" page as blank page in PDF with Python?
body: <p>Say you have to join some pages that are number 2, 4 and 5… (the files are named test_002.pdf, test_004.pdf and test_005.pdf), then we could say there is a page 3 missing.</p>
  
  <p>What I try to do is having a result from those commands :</p>
  
  <pre><code>pdfjam --nup 2 --papersize '{47cm,30cm}' --scale 1.0 test_002.pdf test_003.pdf --outfile joined_002-003.pdf
  pdfjam --nup 2 --papersize '{47cm,30cm}' --scale 1.0 test_004.pdf test_005.pdf --outfile joined_004-005.pdf
  </code></pre>
  
  <p>that will join even and odd page in one unique page, with a blank page (3) in place of the missing page.</p>
  
  <p>I guess it should:</p>
  
  <ol>
  <li>check incoming files from the beginning to the end looking for what page is missing (in this case from 2 to 5 missing #3)</li>
  <li>on-the-fly generate blank '23.5cm,30cm' pdf pages (using pyPdf maybe)</li>
  <li>classify them 'even' and 'odd' as couples to be able to join every even with odd page (using pdfjam)… </li>
  </ol>
  
  <p>Am I right?</p>
  
  <p>Is that possible with some lines of Python?
  Or is there a easier way?</p>
  
  <p>Because here's what I started to do, making it work like an hotfolder, but I'm really completely lost in the even and odd management and missing "files/pages" :</p>
  
  <pre><code>#!/usr/bin/python
  # -*- coding: UTF8 -*-
  
  import os
  import os.path
  import re
  import time
  import datetime
  
  CODEFILE = re.compile("^(TES|EXA).*\.pdf$")
  WHERE = "/tmp/TEST/"
  STORAGE = "/tmp/WORK/"
  DBLSIZE = "{47cm,30cm}"
  
  def time_stamp():
      now = datetime.datetime.now()
  
      return now.strftime("%Y-%m-%d %H:%M:%S")
  
  print(time_stamp()+" : Starting.")
  
  def files_list(path):
      this_files = list()
  
      root, dires, files = os.walk(path).next()
      for f in files:
          if CODEFILE.match(f):
              this_files.append(os.path.join(root, f))
  
      return this_files
  
  
  def file_sizes(filename):
      meta = os.lstat(filename)
  
      return meta.st_size
  
  def files_to_handle(path):
      this_files = list()
      ft1 = dict()
      ft2 = dict()
  
      for f in files_list(WHERE):
          ft1[f] = file_sizes(f)
  
      time.sleep(10)
  
      for f in files_list(WHERE):
          ft2[f] = file_sizes(f)
  
      for f, t in ft2.items():
          try:
              if ft1[f] == t:
                  this_files.append(f)
          except:
              pass
  
      return this_files
  
  r = files_to_handle(WHERE)
  print(time_stamp()+" : Files available :")
  print(r)
  
  for f in r:
      rc = os.system("pdfjam --batch --nup 2 --papersize {1} --scale 1.0 --outfile . {2}".format(
              DBLSIZE, f))
      if rc != 0:
          print(time_stamp()+" : an ERROR as occured with the file {0}.".format(f))
      else:
          print(time_stamp()+" : files {0} OK.".format(f))
          os.system("mv {0} {1}".format(f, STORAGE))
  
  print(time_stamp()+" : Stopping.")
  </code></pre>
  
  <p>Thanks in advance!</p>