How to insert a “missing” page as blank page in PDF with Python?

梦想的初衷 提交于 2020-01-16 03:39:14

问题


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.

What I try to do is having a result from those commands :

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

that will join even and odd page in one unique page, with a blank page (3) in place of the missing page.

I guess it should:

  1. check incoming files from the beginning to the end looking for what page is missing (in this case from 2 to 5 missing #3)
  2. on-the-fly generate blank '23.5cm,30cm' pdf pages (using pyPdf maybe)
  3. classify them 'even' and 'odd' as couples to be able to join every even with odd page (using pdfjam)…

Am I right?

Is that possible with some lines of Python? Or is there a easier way?

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" :

#!/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.")

Thanks in advance!

来源:https://stackoverflow.com/questions/14281468/how-to-insert-a-missing-page-as-blank-page-in-pdf-with-python

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!