Esempio n. 1
0
def makeA3(ipath, opath, onesided=False):
    """Take the first 4 (A4) pages of the input file and place them in
    "booklet" order on an A3 sheet (double-sided, short-side join).
    If <onesided> is <True>, or there are only two pages in the input file,
    place the first two (A4) pages on one side of an A3 sheet, the first
    page on the right-hand side.
    Note that the input pages do not have to be A4, the output will simply
    be twice as wide (as the first page). All input pages should have the same size.
    """
    ipages = PdfReader(ipath).pages
    # Make sure we have an even number of pages
    if len(ipages) & 1:
        ipages.append(None)
    fpage = PageMerge()
    fpage.add(ipages[0])
    width = fpage[0].w
    opages = []
    if onesided or len(ipages) == 2:
        p4 = ipages[1]
    else:
        p4 = ipages[3]
        bpage = PageMerge()
        bpage.add(ipages[1])
        bpage.add(ipages[2], prepend=True)
        bpage[0].x = width
        opages.append(bpage.render())
    if p4:
        fpage.add(p4)
    fpage[0].x = width
    opages.insert(0, fpage.render())
    PdfWriter().addpages(opages).write(opath)
Esempio n. 2
0
def read_and_double(inpfn):
    pages = PdfReader(inpfn, decompress=False).pages
    pages = [pagexobj(x) for x in pages]
    if len(pages) & 1:
        pages.append(pages[0])  # Sentinel -- get same size for back as front

    xobjs = []
    while len(pages) > 2:
        xobjs.append((pages.pop(), pages.pop(0)))
        xobjs.append((pages.pop(0), pages.pop()))
    xobjs += [(x,) for x in pages]
    return xobjs
Esempio n. 3
0
def read_and_double(inpfn):
    pages = PdfReader(inpfn, decompress=False).pages
    pages = [pagexobj(x) for x in pages]
    if len(pages) & 1:
        pages.append(pages[0])  # Sentinel -- get same size for back as front

    xobjs = []
    while len(pages) > 2:
        xobjs.append((pages.pop(), pages.pop(0)))
        xobjs.append((pages.pop(0), pages.pop()))
    xobjs += [(x, ) for x in pages]
    return xobjs
Esempio n. 4
0
def make_booklet(pdf_file: str, out_put: str = None) -> None:
    out_put = out_put if out_put is not None else pdf_file
    ipages = PdfReader(pdf_file).pages

    if len(ipages) & 1:
        ipages.append(None)

    opages = []
    while len(ipages) > 2:
        opages.append(fixpage(ipages.pop(), ipages.pop(0)))
        opages.append(fixpage(ipages.pop(0), ipages.pop()))

    opages += ipages

    PdfWriter().addpages(opages).write(out_put)
Esempio n. 5
0
def generate_booklet(input_file, output_file):
    ipages = PdfReader(input_file).pages

    # Make sure we have 4*n pages
    while len(ipages) % 4:
        ipages.append(None)

    opages = []
    while len(ipages):
        opages.append(fixpage(ipages.pop(), ipages.pop(0)))
        opages.append(fixpage(ipages.pop(0), ipages.pop()))

    opages += ipages

    PdfWriter().addpages(opages).write(output_file)
    show_file(output_file)
Esempio n. 6
0
    # get blank page on back.
    for p1, p2 in zip(pages, pages[1:]):
        if p1[1] is p2[1]:
            pages.remove(p1)

    return IndirectPdfDict(
        Type=PdfName.Page,
        Contents=PdfDict(stream=''.join(page.stream for page in pages)),
        MediaBox=PdfArray([0, 0, x, y]),
        Resources=PdfDict(
            XObject=PdfDict(pages),
        ),
    )

inpfn, = sys.argv[1:]
outfn = 'booklet.' + os.path.basename(inpfn)
pages = PdfReader(inpfn).pages

# Use page1 as a marker to print a blank at the end
if len(pages) & 1:
    pages.append(pages[0])

bigpages = []
while len(pages) > 2:
    bigpages.append(fixpage(pages.pop(), pages.pop(0)))
    bigpages.append(fixpage(pages.pop(0), pages.pop()))

bigpages += pages

PdfWriter().addpages(bigpages).write(outfn)
Esempio n. 7
0

def fixpage(*pages):
    result = PageMerge() + (x for x in pages if x is not None)
    result[-1].x += result[0].w
    return result.render()


INPFN, = sys.argv[1:]
OUTFN = 'booklet.' + os.path.basename(INPFN)
ALL_IPAGES = PdfReader(INPFN).pages
print 'The pdf file ' + str(INPFN) + ' has ' + str(len(ALL_IPAGES)) + ' pages.'

#Make sure we have an even number
if len(ALL_IPAGES) & 1:
    ALL_IPAGES.append(None)
    print 'Inserting one more blank page to make pages number even.'
NUM_OF_ITER, ITERS_LEFT = divmod(len(ALL_IPAGES), BOOKLET_SIZE)

print 'Making ' + str(NUM_OF_ITER) + ' subbooklets of ' + str(
    BOOKLET_SIZE) + ' pages each.'
opages = []
for iteration in range(0, NUM_OF_ITER):
    ipages = ALL_IPAGES[iteration * BOOKLET_SIZE:(iteration + 1) *
                        BOOKLET_SIZE]
    while len(ipages) > 2:
        opages.append(fixpage(ipages.pop(), ipages.pop(0)))
        opages.append(fixpage(ipages.pop(0), ipages.pop()))

# Making one more subbooklet with the left pages
ipages = ALL_IPAGES[len(ALL_IPAGES) - ITERS_LEFT:len(ALL_IPAGES)]
Esempio n. 8
0
BOOKLET_SIZE = 20
START = time.time()

def fixpage(*pages):
    result = PageMerge() + (x for x in pages if x is not None)
    result[-1].x += result[0].w
    return result.render()

INPFN, = sys.argv[1:]
OUTFN = 'booklet.' + os.path.basename(INPFN)
ALL_IPAGES = PdfReader(INPFN).pages
print 'The pdf file '+str(INPFN)+' has '+str(len(ALL_IPAGES))+' pages.'

#Make sure we have an even number
if len(ALL_IPAGES) & 1:
    ALL_IPAGES.append(None)
    print 'Inserting one more blank page to make pages number even.'
NUM_OF_ITER, ITERS_LEFT = divmod(len(ALL_IPAGES), BOOKLET_SIZE)

print 'Making '+str(NUM_OF_ITER)+' subbooklets of '+str(BOOKLET_SIZE)+' pages each.'
opages = []
for iteration in range(0, NUM_OF_ITER):
    ipages = ALL_IPAGES[iteration*BOOKLET_SIZE:(iteration+1)*BOOKLET_SIZE]
    while len(ipages) > 2:
        opages.append(fixpage(ipages.pop(), ipages.pop(0)))
        opages.append(fixpage(ipages.pop(0), ipages.pop()))

# Making one more subbooklet with the left pages
ipages = ALL_IPAGES[len(ALL_IPAGES)-ITERS_LEFT:len(ALL_IPAGES)]
while len(ipages) > 2:
    opages.append(fixpage(ipages.pop(), ipages.pop(0)))
Esempio n. 9
0
'''

import sys
import os

from pdfrw import PdfReader, PdfWriter, PageMerge


def fixpage(*pages):
    result = PageMerge() + (x for x in pages if x is not None)
    result[-1].x += result[0].w
    return result.render()


inpfn, = sys.argv[1:]
outfn = 'booklet.' + os.path.basename(inpfn)
ipages = PdfReader(inpfn).pages

# Make sure we have an even number
if len(ipages) & 1:
    ipages.append(None)

opages = []
while len(ipages) > 2:
    opages.append(fixpage(ipages.pop(), ipages.pop(0)))
    opages.append(fixpage(ipages.pop(0), ipages.pop()))

opages += ipages

PdfWriter().addpages(opages).write(outfn)
Esempio n. 10
0
    # Multiple copies of first page used as a placeholder to
    # get blank page on back.
    for p1, p2 in zip(pages, pages[1:]):
        if p1[1] is p2[1]:
            pages.remove(p1)

    return IndirectPdfDict(
        Type=PdfName.Page,
        Contents=PdfDict(stream=''.join(page.stream for page in pages)),
        MediaBox=PdfArray([0, 0, x, y]),
        Resources=PdfDict(XObject=PdfDict(pages), ),
    )


inpfn, = sys.argv[1:]
outfn = 'booklet.' + os.path.basename(inpfn)
pages = PdfReader(inpfn, decompress=False).pages

# Use page1 as a marker to print a blank at the end
if len(pages) & 1:
    pages.append(pages[0])

bigpages = []
while len(pages) > 2:
    bigpages.append(fixpage(pages.pop(), pages.pop(0)))
    bigpages.append(fixpage(pages.pop(0), pages.pop()))

bigpages += pages

PdfWriter().addpages(bigpages).write(outfn)
Esempio n. 11
0
BOOKLET_SIZE = 20
start = time.time()

def fixpage(*pages):
    result = PageMerge() + (x for x in pages if x is not None)
    result[-1].x += result[0].w
    return result.render()

inpfn, = sys.argv[1:]
outfn = 'booklet.' + os.path.basename(inpfn)
allipages = PdfReader(inpfn).pages
print 'The pdf file '+str(inpfn)+' has '+str(len(allipages))+' pages.'

#Make sure we have an even number
if len(allipages) & 1:
   allipages.append(None)
   print 'Inserting one more blank page to make pages number even.'
num_of_iter, iters_left = divmod(len(allipages), BOOKLET_SIZE)

print 'Making '+str(num_of_iter)+' subbooklets of '+str(BOOKLET_SIZE)+' pages each.'
opages = []
for iteration in range(0,num_of_iter):
    ipages = allipages[iteration*BOOKLET_SIZE:(iteration+1)*BOOKLET_SIZE]
    while len(ipages) > 2:
        opages.append(fixpage(ipages.pop(), ipages.pop(0)))
        opages.append(fixpage(ipages.pop(0), ipages.pop()))

# Making one more subbooklet with the left pages
ipages = allipages[len(allipages)-iters_left:len(allipages)]
while len(ipages) > 2:
    opages.append(fixpage(ipages.pop(), ipages.pop(0)))