\expandafter\ifx\csname pdfxupfile\endcsname\relax
\PackageError{pdfxup}{This file should not be compiled alone}
            {File pdfxup-template.pdf is not meant to be compiled alone.
              \MessageBreak
            It should only be used via the 'pdfxup' script.}
\fi

\documentclass{minimal}
 \usepackage[margin=0pt,\pdfxupoutputpaper paper]{geometry}
 \ifnum\pdfxupoutputlandscape=1\relax\geometry{landscape}\fi
 \usepackage{graphicx}
 \IfFileExists{grffile.sty}{\usepackage{grffile}}{}

 \topskip=0pt
 \parindent=0pt

 \makeatletter

 %% define functions for parsing comma-separated lists of ranges of pages
 \newcounter{result}%
 \newif\iffound
 \def\@parserange#1-#2-#3\@end#4\@end{%
   \setcounter{result}{#4}%
   \ifnum\value{result}=1\relax
     \foundtrue
     \setcounter{result}{#1}%
   \else
     \addtocounter{result}{-1}%
     \ifx\relax#3\relax%% means that range contains no -
     \else
       \addtocounter{result}{#1}%
       \ifnum#2<\value{result}\relax
         \addtocounter{result}{-#2}%
       \else
         \foundtrue
       \fi
     \fi
   \fi}
 \def\parserange#1#2{\expandafter\@parserange#2-SINGLE-\@end#1\@end}
 \def\@parsecsl#1,#2\@end#3\@end{%
   \parserange{#3}{#1}%
   \iffound\else
   \ifx\relax#2\relax\else\@parsecsl#2\@end\value{result}\@end\fi\fi}
  %% \nthvalue#1#2 looks for #1-th value in list of intervals #2
 \def\nthvalue#1#2{\foundfalse\expandafter\@parsecsl#2,\@end#1\@end}

 %% perform various computations:
 %% - width and height of image (\hresult and \vresult)
 %% - width and height of frame containing image (\hboxsize and \vboxsize)
 \newcounter{lastpage}
 \newcounter{outpage}%%% nr of pages of output document
 \setcounter{outpage}{\pdfxupnbpages}
 \addtocounter{outpage}{-1}
 \divide\c@outpage by \pdfxupnbhoriz
 \divide\c@outpage by \pdfxupnbvert
 \ifbooklet
   \divide\c@outpage by 2
 \fi
 \stepcounter{outpage}
 \ifbooklet
   \multiply\c@outpage by 2
 \fi
 \setcounter{lastpage}{\value{outpage}}
 \multiply\c@lastpage by \pdfxupnbhoriz
 \multiply\c@lastpage by \pdfxupnbvert
 \makeatother
 %
 \newlength\outputvmargin
 \newlength\outputhmargin
 \setlength\outputvmargin{\pdfxupvmargin}
 \setlength\outputhmargin{\pdfxuphmargin}
 \newlength\innervmargin
 \newlength\innerhmargin
 \setlength\innervmargin{\pdfxupinnervmargin}
 \setlength\innerhmargin{\pdfxupinnerhmargin}
 \newlength\outputindivvmargin
 \newlength\outputindivhmargin
 \setlength\outputindivvmargin{\pdfxupintermvspace}
 \setlength\outputindivhmargin{\pdfxupintermhspace}
 %
 \setlength\fboxrule{\pdfxupframewidth}
 \fboxsep=-\fboxrule
 \newlength\hresult
 \newlength\vresult
 \newlength\vboxsize
 \newlength\hboxsize
 \hresult=\paperwidth
 \advance\hresult by -\pdfxupnbhoriz\fboxrule
 \advance\hresult by -\pdfxupnbhoriz\fboxrule
 \advance\hresult by -\pdfxupnbhoriz\innerhmargin
 \advance\hresult by -\pdfxupnbhoriz\innerhmargin
 \vresult=\paperheight
 \advance\vresult by -\pdfxupnbvert\fboxrule
 \advance\vresult by -\pdfxupnbvert\fboxrule
 \advance\vresult by -\pdfxupnbvert\innervmargin
 \advance\vresult by -\pdfxupnbvert\innervmargin
 %
 \advance\hresult by -2\outputhmargin
 \advance\vresult by -2\outputvmargin
 %
 \advance\hresult by -\pdfxupnbhoriz \outputindivhmargin
 \advance\vresult by -\pdfxupnbvert \outputindivvmargin
 \advance\hresult by \outputindivhmargin
 \advance\vresult by \outputindivvmargin
 %
 \divide\hresult by \pdfxupnbhoriz
 \divide\vresult by \pdfxupnbvert

 \vboxsize=\vresult
 \advance\vboxsize by 2\fboxrule
 \advance\vboxsize by 2\innervmargin
 \hboxsize=\hresult
 \advance\hboxsize by 2\fboxrule
 \advance\hboxsize by 2\innerhmargin


 \let\pdfxupnblines\pdfxupnbvert
 \let\pdfxupnbcols\pdfxupnbhoriz
 \ifnum\columnmode=0\relax
 %% "row-mode"
 \def\horizincr{\pdfxupnbhoriz}
 \def\vertincr{1}
 \else
 %% "column-mode"
 \def\horizincr{1}
 \def\vertincr{\pdfxupnbvert}%
 \fi

%% compute actual scale by which PDF is shrunk (or extended)
 \ifnum\pdfxupemptybb=0\relax
 \newcounter{origx}
 \setcounter{origx}{\pdfxupw}
 \addtocounter{origx}{-\pdfxupx}
 \newcounter{origy}
 \setcounter{origy}{\pdfxuph}
 \addtocounter{origy}{-\pdfxupy}
 \newlength\finalx
 \newlength\finaly
 \finalx=\hresult
 \finaly=\vresult
 \divide\finalx by \value{origx}
 \divide\finaly by \value{origy}
 \newwrite\scale
 \immediate\openout\scale=\pdfxupfilename.scl
 \ifdim\finalx>\finaly
   \multiply\finaly by 100
   \immediate\write\scale{\the\finaly}
 \else
   \multiply\finalx by 100
   \immediate\write\scale{\the\finalx}
 \fi
 \immediate\closeout\scale
 \fi


 %% start document
 \begin{document}
 %\tracingoutput=1
 %\tracingpages=1
 %\tracingparagraphs=1
 \makeatletter
 \newcounter{curroutpage}%%%% counts pages nr  of output document
 \setcounter{curroutpage}{0}%
 \newcounter{currpage}%%%%%%% page nr of input document
 \newcounter{linecurrpage}%%% currpage at beginning of line
 \newcounter{currcol}%
 \newcounter{currline}%
 \newcounter{realout}%
 \newcounter{wmout}%
 \newcounter{wmoutaux}%
 \@whilenum \value{outpage}>\value{curroutpage} \do%
   {\advance\c@curroutpage by 1%
   %% check if we are on last page, and if so, possibly balance last page
   \if0\balancelast\relax\else
   \c@currpage=\c@curroutpage %
   \multiply\c@currpage by \pdfxupnbhoriz\relax%
   \multiply\c@currpage by \pdfxupnbvert\relax%
   \ifnum\c@currpage>\pdfxupnbpages\relax
     \c@currpage=-\c@curroutpage\relax%
     \advance\c@currpage by 1 %
     \multiply\c@currpage by \pdfxupnbhoriz\relax%
     \multiply\c@currpage by \pdfxupnbvert\relax%
     \advance\c@currpage by \pdfxupnbpages\relax
     \ifnum\columnmode=0\relax
       \advance\c@currpage by -1\relax
       \divide\c@currpage by \pdfxupnbvert\relax%
       \advance\c@currpage by 1\relax
       \edef\horizincr{\thecurrpage}
       \edef\pdfxupnbcols{\thecurrpage}
     \else
       \advance\c@currpage by -1\relax
       \divide\c@currpage by \pdfxupnbhoriz\relax%
       \advance\c@currpage by 1\relax
       %\showthe\value{currpage}
       \edef\vertincr{\thecurrpage}
       \edef\pdfxupnblines{\thecurrpage}
       %\show\vertincr
       %\show\horizincr
     \fi
   \fi
   \fi
   %% start producing page
   \c@currpage=\c@curroutpage%
   \advance\c@currpage by -1%
   \multiply\c@currpage by \pdfxupnbhoriz%
   \multiply\c@currpage by \pdfxupnbvert%
   \c@linecurrpage=\c@currpage%
   \hrule \@height\z@%
   \c@currline=0%
   \vskip\outputvmargin%
   \@whilenum\value{currline}<\pdfxupnblines \do%
     {\hrule \@height\z@%
      \ifnum\value{currline}>0%
         \vskip \outputindivvmargin%
         \advance\c@linecurrpage by \horizincr%
       \else%
         \advance\c@linecurrpage by 1%
       \fi%
       \stepcounter{currline}%
       \c@currpage=\c@linecurrpage%
       \c@currcol=0%
       \hskip \outputhmargin%
       \@whilenum\value{currcol}<\pdfxupnbcols \do%
         {\ifnum\value{currcol}>0%
            \hskip\outputindivhmargin%
            \advance\c@currpage by \vertincr%
           \fi%
           \stepcounter{currcol}%
           \ifnum\value{currpage}>\value{lastpage}\else
             %% computing page number corresponding to \currline and \currcol
             \c@realout=\value{currpage}%
             \def\ang{0}%
             \ifbooklet
              \iflongedge
               %% long edge:
               %% 1->n, 2->1, 3->n-1 (rotated), 4->2(rotated)...
               \ifodd\value{realout}%           -> 1 or 3
                 \addtocounter{realout}{-1}%
                 \divide\c@realout by 2\relax
                 \ifodd\value{realout}%         -> 3
                   \def\ang{180}%
                 \else%                         -> 1
                 \fi
                 \setcounter{realout}{-\value{realout}}%
                 \addtocounter{realout}{\value{outpage}}%
                 \addtocounter{realout}{\value{outpage}}%
               \else%                           -> 2 or 4
                 \divide\c@realout by 2\relax
                 \ifodd\value{realout}%         -> 2
                 \else%                         -> 4
                   \def\ang{180}%
                 \fi
               \fi
              \else
               %% short edge:
               %% 1->n, 2->1, 3->2, 4->n-1, 5->n-2, 6->3, 7->4, 8->n-3
               \ifodd\value{realout}%           -> 1 or 3
                 \addtocounter{realout}{-1}%
                 \divide\c@realout by 2\relax
                 \ifodd\value{realout}%         -> 3
                   \stepcounter{realout}
                 \else%                         -> 1
                   \setcounter{realout}{-\value{realout}}%
                   \addtocounter{realout}{\value{outpage}}%
                   \addtocounter{realout}{\value{outpage}}%
                 \fi
               \else%                           -> 2 or 4
                 \divide\c@realout by 2\relax
                 \ifodd\value{realout}%         -> 2
                 \else%                         -> 4
                   \setcounter{realout}{-\value{realout}}%
                   \stepcounter{realout}
                   \addtocounter{realout}{\value{outpage}}%
                   \addtocounter{realout}{\value{outpage}}%
                 \fi
               \fi
              \fi %% \iflongedge...\else
             \fi %% \ifbooklet
             \ifnum\value{realout}>\pdfxupnbpages\relax
               %% if page above nb of pages, output blank page
               %\hskip\hresult\hskip2\fboxrule
               \hskip\hboxsize
             \else
               %% otherwise compute corresponding page to display
               %% first keep realout for watermarking...
               \setcounter{wmoutaux}{\value{realout}}%
               \setcounter{wmout}{\value{realout}}%
               \nthvalue{\value{realout}}{\pdfxuppagelist}%
               \iffound\setcounter{realout}{\value{result}}%
               \else %% hmmm... problem
               \message{I'm messed up counting pages...}%
               \fi
               %% compute watermarking page and display
               \ifx\pdfxupwatermark\@empty\else
                 \ifnum\pdfxupnbwp<\value{wmoutaux}\relax
                   \addtocounter{wmoutaux}{-\pdfxupnbwp}%
                   \addtocounter{wmoutaux}{-1}%
                   \divide\c@wmoutaux by \pdfxupwperiod\relax
                   \stepcounter{wmoutaux}%
                   \multiply\c@wmoutaux by \pdfxupwperiod\relax
                   \addtocounter{wmout}{-\value{wmoutaux}}%
                 \fi
                 \vbox to \vboxsize{\vfill
                 \hbox to \hboxsize{\hfill
                   \includegraphics[keepaspectratio,%
                   height=\vresult,width=\hresult,angle=\ang,%
                   page=\value{wmout}\pdfxupclipopt]{\pdfxupwatermark}\hfill}\vfill}%
                   \hskip-\hboxsize\relax
               \fi
               %% display current page at correct size
               \edef\pdfxupinclgr{\includegraphics[\pdfxupbbox,%
                   keepaspectratio,height=\vresult,width=\hresult,angle=\ang,%
                   page=\value{realout}\pdfxupclipopt]{\pdfxupfile}}%
               \pdfxupwidefbox{\vbox to \vboxsize{\vfill
               \hbox to \hboxsize{\hfill
               \pdfxuptightfbox{\hskip\innerhmargin\relax
                   \sbox{0}{\pdfxupinclgr}%
                   \ht0=\dimexpr\ht0 + \innervmargin\relax
                   \dp0=\dimexpr\dp0 + \innervmargin\relax
                   \usebox{0}\hskip\innerhmargin\relax}%
                   \hfill}\vfill}}%
             \fi
           \fi}}%
       \clearpage%
 }%
 \makeatother%
 \end{document}