#!/usr/bin/perl -w # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # Author : Christian Lackas (delta@clackas.de) # Webpage: http://www.clackas.de/html/perl.html # CTAN : http://www.dante.de/tex-archive/support/psrip/ # Version: 1.3 =head1 NAME psrip - extracts images from postscript-files =head1 SYNOPSIS psrip [B<-d> I] I extract images in I into current directory or I if given. =head2 Examples psrip foil.ps Extract images from foil.ps into current directory. psrip B<-d> images foil1.ps foil2.ps TeX/*.ps Extract images of these ps-files into directory I. =head1 DESCRIPTION The script saves the lines between I<'%%BeginDocument: name'> and I<'%%EndDocument'> to a new file named I. =head1 BUGS If there is no 'BoundingBox' specified in the extracted image you have to insert it by hand. E.g. for DIN-a4 size: %%BoundingBox: 0 0 596 842 =head1 AUTHOR Christian Lackas >, 10 December 1999. This tool is dedicated to Nikolay 'Snake' Sturm. Thanks to Rolf Niepraschk for his help in publishing an bug reporting. =head1 LICENSE This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. =cut use strict; my ($dir,$count,$verb) = qw(. 0); print 'psrip v1.3 by Christian Lackas (delta@clackas.de, http://www.clackas.de)',"\n"; unless (@ARGV) { print STDERR< if given. Example: psrip -d images skript1.ps skript2.ps EOTEXT exit } if ($ARGV[0] eq '-d') { shift; $dir = shift; unless (-d $dir) {die "Cannot find directory '$dir'.\n"} print "Saving images to directory '$dir'.\n" } while (@ARGV) { my $file = shift; open FILE, $file or warn "Cannot open $file: $!\n" and next; print "Checking $file.\n"; my $bb; while () { # $bb = $_ if /^%%BoundingBox:/; if (/^%%BeginDocument: (.*\.(ps|eps|fig))/) { my $name = $1; $name =~ s!/!_!g; print " Found image '$name'.\n"; $name = "$dir/$name"; if (-e "$name") {print " File '$name' exists (skipping).\n"} else { open(OUT,">$name") || die "Cannot open $name: $!\n"; ++$count; $_=; print OUT; print OUT '%%psrip: (c) delta@clackas.de, http://www.clackas.de/',"\n"; print OUT "%%psrip: borrowed from $file on ",scalar localtime,"\n"; # print OUT $bb if defined $bb; while () { last if /^%%EndDocument/; print OUT; } close(OUT); } } } close(FILE); } print "Finished ($count images extracted)\n";