#! /usr/bin/perl use Getopt::Long; use warnings; use strict; Getopt::Long::Configure ("bundling"); my $remote = 'graal'; my $pdf2ps = 'pdftops'; my $ps2pdf = 'ps2pdf'; my $pscrop = 'psnup2.pl -s1 -l1'; my $psnup = 'psnup'; my $psbook = 'psbook'; my ($zip,$zcat) = ('bzip2','bzcat'); open(PAPERSIZE, "/etc/papersize") or die "Can't open `/etc/papersize'"; my $papersize = ; chomp $papersize or die "Can't read `/etc/papersize/"; close PAPERSIZE; my $nup = 1; my $margin = 1; #TODO: units my $crop; my $book; GetOptions( "nup|n=i" => \$nup, "1" => sub { $nup = 1 }, "2" => sub { $nup = 2 }, "4" => sub { $nup = 4 }, "8" => sub { $nup = 8 }, "crop|c" => \$crop, "book|b" => \$book, "margin|m=s" => \$margin ); die "I can handle only one file at the same time :P" if $#ARGV > 0; my $filename = $ARGV[0]; $filename = "-" unless defined $filename; my $filename2 = $filename; $filename2 = "(stdin)" if $filename eq "-"; for (my $n = $nup; $n > 1; $n /= 2) { die "nup should be a power of two" unless $n % 2 == 0; } $margin /= 2 if defined $crop; #&& $nup > 1; $remote = "localhost" if $remote eq `hostname` || $remote eq "127.0.0.1"; open(FILE, $filename) or die "Can't read `$filename'"; my $filetype; my $line = ; if (defined $line && $line =~ /%!PS.*/) { $filetype = "PS"; } elsif (defined $line && $line =~ /%PDF.*/) { $filetype = "PDF"; } else { die "Can't recognize the type of `$filename2'"; } close(FILE); my $command = ""; #TODO: better do forget stdin, I guess if ($filename eq "-" && $filetype eq "PDF") { $command.="cat - > /tmp/pouf.pdf"; system $command; } if ($filetype eq "PDF") { $command .= "$pdf2ps $filename - | "; } else { $command .= "cat $filename | "; } if ($remote eq "localhost") { $command .= "cat > /tmp/paf.ps; "; } else { $command .= "$zip | ssh $remote \"$zcat - > /tmp/paf.ps; "; } if (defined $crop) { $command .= "$pscrop -m$margin /tmp/paf.ps | "; } else { $command .= "cat /tmp/paf.ps | "; } $command .= "$psnup -p$papersize -m${margin}cm -$nup | "; $command .= "$psbook | " if defined $book; $command .= "$ps2pdf - - "; $command .= "| $zip\" | $zcat " if ($remote ne "localhost"); $command .= "> /tmp/pouf.pdf"; print "$command", "\n"; system $command;