#!/usr/bin/perl -w # psappend, copyright 2003 by Patrick Reynolds (reynolds .at. cs duke edu) # # Concatenate several Postscript or EPS files into a single, large # Postscript file. Works great for combining several Gnuplot graphs into # a single output file. # # Usage: # psappend foo1.eps foo2.eps foo3.eps > combined.ps $state = "first_header"; $pages = 0; foreach my $fn (@ARGV) { do_file($fn); } print "%%Trailer\n"; print "%%DocumentFonts: ".(join' ', keys %fonts)."\n"; print "%%Pages: $pages\n"; sub do_file { open(FP, "<$_[0]") || die "$_[0]: $!"; while () { chomp; if ($state eq "first_header") { if (!/^%[%!]/) { $state = "document"; print "$_\n"; } elsif (/^%%Pages:/) { print "%%Pages: (atend)\n"; } elsif (/^%%BoundingBox:/) {} elsif (/^%%Orientation:/) {} elsif (/^%%DocumentFonts: (.*)/) { addfonts($1); print "%%DocumentFonts: (atend)\n"; } else { print "$_\n"; } } elsif ($state eq "document") { if (/^%%Page: /) { $pages++; print "%%Page: $pages $pages\n"; } elsif (/^%%Trailer/) { $state = "trailer"; } else { print "$_\n"; } } elsif ($state eq "trailer") { if (/^%%DocumentFonts: (.*)/) { addfonts($1); print "%%DocumentFonts: (atend)\n"; } elsif (!/^%%/) { $state = "document"; } } } } sub addfonts { return if ($_[0] eq "(atend)"); foreach my $font (split/\s+/, $_[0]) { $fonts{$font}++; } }