Beefy Boxes and Bandwidth Generously Provided by pair Networks
P is for Practical
 
PerlMonks  

Cropping a postscript file

by ZZamboni (Curate)
on May 08, 2000 at 21:40 UTC ( #10635=sourcecode: print w/ replies, xml ) Need Help??

Category: Utility scripts
Author/Contact Info Diego Zamboni
Description: This script allows you to select a portion of a postscript file and crop it. The whole file is included in the result, but the appropriate commands are included to crop it to the section you select. Instructions for use are included in the script.
#!/usr/local/perl/bin/perl
#
# Cropping a portion of a postscript file
# Postscript magic and instructions provided by Chapman Flack.
# Script implemented by Diego Zamboni <zamboni@cerias.purdue.edu>
#
# 1.  View the page in gv.  If it's a multipage document, mark the pag
+e and
#     hit "save marked" so you have a small file to deal with.
# 2.  Move the mouse pointer to the lower left corner of the area you 
+want.
#     Record the gv displayed coordinates as X1 and Y1.
# 3.  Point to the upper right corner and record X2 and Y2.
# 4.  Run "crop-ps X1 Y1 X2 Y2 file.ps > cropped_file.ps"
#
# This will not work for postscript files that do not have the appropr
+iate
# structuring comments (%%EndSetup, %%Page, etc.)

$usage="Usage: $0 x1 y1 x2 y2 file.ps";

$x1=shift @ARGV;
$y1=shift @ARGV;
$x2=shift @ARGV;
$y2=shift @ARGV;

($x1 && $y2 && $x2 && $y2 ) or
        die "$usage\n";

$w=$x2-$x1;
$h=$y2-$y1;

$flag=0;

while (<>) {
  if (/^%%BoundingBox:/) {
    print "%%BoundingBox: 0 0 $w $h\n";
  }
  elsif (!$flag && (/^%%EndSetup/ || /^%%Page:/)) {
    print;
    print "-$x1 -$y1 translate\n";
    print "$x1 $y1 moveto $x1 $y2 lineto $x2 $y2 lineto $x2 $y1 lineto
+ closepath\n";
    print "clip\n";
    $flag=1;
  }
  else {
    print;
  }
}

Comment on Cropping a postscript file
Download Code
Re: Cropping a postscript file
by Anonymous Monk on May 28, 2008 at 15:56 UTC
    This seems to work even without the structuring comments (%%EndSetup, %%Page). The following worked for me:
    #!/usr/bin/perl $usage="Usage: $0 x1 y1 x2 y2 file.ps"; $x1=shift @ARGV; $y1=shift @ARGV; $x2=shift @ARGV; $y2=shift @ARGV; ($x1 && $y2 && $x2 && $y2 ) or die "$usage\n"; $w=$x2-$x1; $h=$y2-$y1; $flag=0; while (<>) { if (/^%%BoundingBox:/) { print "%%BoundingBox: 0 0 $w $h\n"; print "-$x1 -$y1 translate\n"; print "$x1 $y1 moveto $x1 $y2 lineto $x2 $y2 lineto $x2 $y1 li +neto closepath\n"; print "clip\n"; $flag=1; } else { print; } }

Back to Code Catacombs

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: sourcecode [id://10635]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others drinking their drinks and smoking their pipes about the Monastery: (4)
As of 2014-07-12 02:50 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    When choosing user names for websites, I prefer to use:








    Results (238 votes), past polls