Nur in pdfposter.git.new/: build. Nur in pdfposter.git.new/: dist. Nur in pdfposter.git.new/: ez_setup.pyc. Nur in pdfposter.git.new/pdftools: __init__.pyc. diff -u -r pdfposter.git/pdftools/pdfposter/cmd.py pdfposter.git.new/pdftools/pdfposter/cmd.py --- pdfposter.git/pdftools/pdfposter/cmd.py 2015-03-27 22:58:00.000000000 +0100 +++ pdfposter.git.new/pdftools/pdfposter/cmd.py 2015-07-18 14:28:56.339082584 +0200 @@ -23,7 +23,7 @@ __copyright__ = "Copyright 2008-2013 by Hartmut Goebel " __licence__ = "GNU General Public License version 3 (GPL v3)" -from . import main, __version__, DEFAULT_MEDIASIZE, papersizes, DecryptionError +from . import main, __version__, DEFAULT_OVERLAP_PERCENT, DEFAULT_MEDIASIZE, papersizes, DecryptionError import re import PyPDF2.utils @@ -107,6 +107,8 @@ help='Specify the poster size (defaults to media size). ') group.add_option('-s', '--scale', type=float, help='Specify a linear scaling factor to produce the poster.') + group.add_option('-O', '--overlap-percent', type=float, default = DEFAULT_OVERLAP_PERCENT, + help='Image overlap (default: %g).' % DEFAULT_OVERLAP_PERCENT) opts, args = parser.parse_args() Nur in pdfposter.git.new/pdftools/pdfposter: cmd.py.orig. diff -u -r pdfposter.git/pdftools/pdfposter/__init__.py pdfposter.git.new/pdftools/pdfposter/__init__.py --- pdfposter.git/pdftools/pdfposter/__init__.py 2015-03-27 22:58:00.000000000 +0100 +++ pdfposter.git.new/pdftools/pdfposter/__init__.py 2015-07-20 15:04:19.739936143 +0200 @@ -33,6 +33,7 @@ import math DEFAULT_MEDIASIZE = 'a4' +DEFAULT_OVERLAP_PERCENT = 0 mm = 72 / 25.4 @@ -138,17 +139,17 @@ log(18, 'Rotating %s specs to portrait format', which) return True -def decide_num_pages(inbox, mediabox, posterbox, scale=None): +def decide_num_pages(inbox, mediabox, posterbox, scale=None, overlap=0.01*DEFAULT_OVERLAP_PERCENT): """decide on number of pages""" # avoid changing original posterbox when handling multiple pages # (if --scale, posterbox is None) posterbox = posterbox and posterbox.copy() - cutmargin = {'x': 0, 'y': 0} # todo whitemargin = {'x': 0, 'y': 0} # todo # media and image sizes (inbox) are fixed already # available drawing area per sheet - drawable_x = mediabox['width' ] - 2*cutmargin['x'] - drawable_y = mediabox['height'] - 2*cutmargin['y'] + drawable_x = mediabox['width' ] * (1-2*overlap) + drawable_y = mediabox['height'] * (1-2*overlap) + log(17, 'drawable dimensions: %.2f %.2f (calculated)', drawable_x, drawable_y) rotate = False @@ -256,12 +257,13 @@ page[NameObject('/Contents')] = outpdf._addObject(content) -def posterize(outpdf, page, mediabox, posterbox, scale, use_ArtBox=False): +def posterize(outpdf, page, mediabox, posterbox, scale, use_ArtBox=False, overlap=0.01*DEFAULT_OVERLAP_PERCENT): """ page: input page mediabox : size secs of the media to print on posterbox: size secs of the resulting poster scale: scale factor (to be used instead of posterbox) + overlap: proportion of expected overlap per output page """ if use_ArtBox: inbox = rectangle2box(page.artBox) @@ -270,7 +272,7 @@ _clip_pdf_page(page, inbox['offset_x'], inbox['offset_y'], inbox['width'], inbox['height']) ncols, nrows, scale, rotate = decide_num_pages(inbox, mediabox, - posterbox, scale) + posterbox, scale, overlap) mediabox = mediabox.copy() _scale_pdf_page(outpdf, page, scale) if rotate: @@ -278,7 +280,7 @@ rotate_box(inbox) rotate_box(mediabox) # area to put on each page (allows for overlay of margin) - h_step = mediabox['width'] - mediabox['offset_x'] + h_step = mediabox['width'] - mediabox['offset_x'] v_step = mediabox['height'] - mediabox['offset_y'] if use_ArtBox: @@ -288,7 +290,7 @@ h_pos = float(trimbox['offset_x']) h_max, v_max = float(trimbox['width']), float(trimbox['height']) for col in range(ncols): - v_pos = float(trimbox['offset_y']) + (nrows-1) * v_step + v_pos = float(trimbox['offset_y']) + (nrows-1) * v_step * (1-2*overlap) for row in range(nrows): log(17, 'Creating page with offset: %.2f %.2f' % (h_pos, v_pos)) newpage = copyPage(page) @@ -303,8 +305,8 @@ min(v_max, v_pos + v_step))) newpage.artBox = newpage.trimBox outpdf.addPage(newpage) - v_pos -= v_step - h_pos += h_step + v_pos -= v_step*(1-2*overlap) + h_pos += h_step*(1-2*overlap) def password_hook(): import getpass @@ -341,7 +343,7 @@ page = inpdf.getPage(i) log(19, '---- processing page %i -----', i+1) posterize(outpdf, page, opts.media_size, opts.poster_size, opts.scale, - opts.use_ArtBox) + opts.use_ArtBox, opts.overlap_percent/100.0) if not opts.dry_run: outpdf.write(open(outfilename, 'wb'))