93 lines · 2.7 KB · Text
RawDownload
%!%    Copyright (C) 1999 Aladdin Enterprises.  All rights reserved.% % This software is provided AS-IS with no warranty, either express or% implied.% % This software is distributed under license and may not be copied,% modified or distributed except as expressly authorized under the terms% of the license contained in the file LICENSE in this distribution.% % For more information about licensing, please refer to% http://www.ghostscript.com/licensing/. For information on% commercial licensing, go to http://www.artifex.com/licensing/ or% contact Artifex Software, Inc., 101 Lucas Valley Road #110,% San Rafael, CA  94903, U.S.A., +1(415)492-9861. % $Id: gsnup.ps,v 1.5 2005/06/07 19:24:33 ray Exp $% Prefix this to very well-behaved PostScript files for n-up printing. /cdef { 1 index where { pop pop } { def } ifelse } def %%%%%%%%%%%%%%%% Begin parameters %%%%%%%%%%%%%%%% % All parameters are also settable from the command line with -d, e.g.,% -d.Nx=3 /.Nx 2 cdef			% # of pages across the physical page/.Ny 2 cdef			% # of pages down the physical page/.Landscape false cdef		% if true, rotate page by 90 degrees %%%%%%%%%%%%%%%% End parameters %%%%%%%%%%%%%%%% vmstatus pop pop 0 eq { save pop } if.Landscape {  currentpagedevice /PageSize get aload pop  exch 2 array astore  1 dict dup /PageSize 4 -1 roll put  setpagedevice} if/.BP currentpagedevice /BeginPage get def/.EP currentpagedevice /EndPage get def/.Ps 1 string def	% survive save/restore/.Pn { .Ps 0 get } deftrue setglobal		% protect from restore/.ELevel [0] def/.Rmat matrix deffalse setglobal/.max { 2 copy lt { exch } if pop } cdef% Work around the common save ... showpage ... restore locution./restore {  .Rmat currentmatrix pop restore  vmstatus pop pop .ELevel 0 get lt { .Rmat setmatrix } if} bind def<<  /BeginPage {    .Nx .Ny .max    gsave      initclip clippath pathbbox exch 4 -1 roll sub 3 1 roll exch sub    grestore    2 copy exch .Nx div exch .Ny div    .Pn dup .Nx mod exch .Nx idiv .Ny 1 sub exch sub		% Stack: nmax pw ph pw/nx ph/ny ix iy    exch 3 index mul exch 2 index mul    translate		% Stack: nmax pw ph pw/nx ph/ny    4 -1 roll 4 index div 4 -1 roll 4 index div		% Stack: nmax pw/nx ph/ny pw/nmax ph/nmax    exch 4 -1 roll exch sub 2 div    3 1 roll sub 2 div    translate		% Stack: nmax    1 exch div dup scale    .BP  }  /EndPage {    dup 2 lt {      .ELevel 0 vmstatus pop pop put      .Ps 0 .Pn 1 add .Nx .Ny mul mod put          .Pn 0 eq {        .EP      } {        pop pop false      } ifelse    } {      pop pop false    } ifelse  }>> setpagedevice/.EOJ {  { .Pn 0 eq { exit } if showpage } loop} def { currentfile cvx exec .EOJ } exec