1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81
|
#! perl
#
# Usage: gs-eps epsfile <outputfile> <resolution> <device>
#
# Where: epsfile is the encapsulated postscript file
# outputfile is the output file (the default name
# is <basename epsfile>.<device>)
# resolution is the output resolution (default=300)
# device is the GS driver to use (default=pbm)
($epsfile,$outputfile,$res,$device) = @ARGV;
if (! $epsfile) {
printf "Usage: gs-eps epsfile <outputfile> <resolution>";
printf " <gsdriver>\n";
printf "Note: parameters are positional. To specify a";
printf " driver, you\n";
printf "must also specify an outputfile and resolution.\n";
exit 1;
}
$epsfile =~ tr/\\/\//; # translate \foo\bar -> /foo/bar
if (! -r $epsfile) {
printf "Cannot read file: $epsfile\n";
exit 1;
}
if (! $res) { $res = 300 }
if (! $device) { $device = "pbm" }
if (! $outputfile ) {
@pathname = split(/\//,$epsfile);
$outputfile = $pathname[$#pathname];
$outputfile =~ s/.eps$//;
$outputfile = join(".", $outputfile, $device);
}
printf "Converting $epsfile to $outputfile at ${res}dpi...\n";
open (EPSFILE,$epsfile);
undef $bbox;
undef $showpg;
while (<EPSFILE>) {
$bbox = $_ if /\%\%\s*BoundingBox:\s*\d+\s+\d+\s+\d+\s+\d+/;
$showpage = $_ if /showpage/;
last if ($bbox && $showpage);
}
if (! $bbox) {
printf "Cannot find a bounding box in $epsfile";
exit 1;
}
$bbox =~ s/\D*//; # remove everything preceding the digits
($llx,$lly,$urx,$ury) = split(/\s/,$bbox);
$xsize = sprintf("%d", (($urx - $llx) * $res / 72) + 0.5);
$ysize = sprintf("%d", (($ury - $lly) * $res / 72) + 0.5);
printf "$llx neg $lly neg translate .gt. gs-eps-a.$$\n";
printf "quit .gt. gs-eps-b.$$\n";
if (! $showpg) {
printf "showpage .gt. gs-eps-b.$$\n";
printf "quit .gtgt. gs-eps-b.$$\n";
}
# join sillyness to keep the length of lines in the
# script small enough to print in the book.
$gscmd = join(" ", "gs -sDEVICE=$device",
"-q -sOutputFile=$outputfile",
"-g${xsize}x${ysize} -r$res",
"gs-eps-a.$$ $epsfile -",
".lt. gs-eps-b.$$");
printf "$gscmd\n";
printf "rm -f gs-eps-a.$$ gs-eps-b.$$\n";
|