#!/usr/bin/perl -s use File::Spec; use Config; use strict; my $a=shift or die("usage: $0 [-o=out.pdf] acet.pdf* \n"); my $b="_$$"; my $pp; our ($nup, $n,$o,$scale,$debug,$rev,$land); my $rot; $nup ||= 2; $scale =",scale=$scale" if $scale; $scale ||=($n ? "" : ",scale=1.414") if $nup==2; $pp = "\\RequirePackage[a4paper]{geometry}" if $nup==2; $scale ||=($n ? "" : ",scale=1.056") if $nup==3; $pp = "\\RequirePackage[paperwidth=104mm, paperheight=295mm]{geometry}" if $nup==3; my $f=1; $f = $1 if($scale =~ /scale=(.+)/); my $dx = 9.8 * $f ; open(F,">$b.tex") or die("cant create temporay file ($b.tex)\n"); print F ' \documentclass[portuges,a4paper]{article}', "\n$pp\n", '\usepackage{pdfpages} \begin{document} '; for my $doc ($a,@ARGV){ my $pages=pages($doc); print "$doc, $pages\n"; for my $p (1..$pages){ if ($nup == 2){ if($land){$rot=0} elsif($rev && $p % 2 == 1){$rot=-90} else {$rot=90} print F "\\includepdf[noautoscale$scale,angle=$rot,pages={$p},offset=10.5cm 0cm]{$doc}\n"; print F "\\includepdf[noautoscale$scale,angle=$rot,pages={$p},offset=-10.5cm 0cm]{$doc}\n"; } elsif($nup == 3){ if($land){$rot=0} elsif($rev && $p % 2 == 1){$rot=-90} else {$rot=90} print F "\\includepdf[noautoscale$scale,angle=$rot,pages={$p},offset=${dx}cm 0cm]{$doc}\n"; print F "\\includepdf[noautoscale$scale,angle=$rot,pages={$p},offset=0cm 0cm]{$doc}\n"; print F "\\includepdf[noautoscale$scale,angle=$rot,pages={$p},offset=-${dx}cm 0cm]{$doc}\n"; } } } print F "\n\\end{document}\n"; close F; system("pdflatex" ,$b); if($o) { print qq{ rename("$b.pdf",$o)\n } ; rename("$b.pdf",$o)} else { rename("$b.pdf","_out.pdf")} unlink(<$b.*>) unless $debug; sub pages{ my $command = _check_prog("pdfinfo"); $command = _check_prog("pdfinfo.pl") unless $command; die ("Can't find pdfinfo or pdfinfo.pl. Please install PDF::CAM\n") unless $command; my $p=`$command "$_[0]" | grep -i "pages:"`; ## get the number of pages of $f my $NP=$p; $NP=~ s/.*?(\d+).*$/$1/s; $NP } sub _check_prog { my $ac_prog = shift; my $PATH = $ENV{PATH}; my $p; for $p (split /$Config{path_sep}/,$PATH) { my $cmd = File::Spec->catfile($p,$ac_prog); return $cmd if -x $cmd; } return undef; } sub executa { my $cmd = shift; print STDERR "$cmd\n" if $debug; system ($cmd) == 0 or warn "** ERROR ************ system $cmd failed: $!$?\n"; } sub system_check { my %known_programs = ( 'pdftops' => "I need pdftops, part of Xpdf. Get it from http://www.foolabs.com/xpdf", 'a2ps' => "I need a2ps. Get it from http://www.inf.enst.fr/~demaille/a2ps/", 'htmldoc' => "I need doc. Get it from http://www.htmldoc.org/", 'pstops' => "I need psutils. Get them from http://www.tardis.ed.ac.uk/~ajcd/psutils/", 'psbook' => "I need psutils. Get them from http://www.tardis.ed.ac.uk/~ajcd/psutils/", 'psnup' => "I need psutils. Get them from http://www.tardis.ed.ac.uk/~ajcd/psutils/", ); while (my $program = shift) { my $which = `which $program 2>&1`; if ($which =~ /^which:/) { die ($known_programs{$program} || "I need $program"); } } } __END__