STANNIX Community


Manual: pstopnm

Pstopnm User Manual(1)				   General Commands Manual			      Pstopnm User Manual(1)

NAME
       pstopnm - convert a PostScript file to a PNM image

SYNOPSIS
       pstopnm

       [-stdout]

       [-forceplain]

       [-help]

       [-dpi=dpi]

       [-xsize=pixels] [-ysize=pixels]

       [-xborder=frac] [-yborder=frac] [-landscape]

       [-portrait]

       [-nocrop]

       [-pbm

       |-pgm

       |-ppm]

       [-llx=s] [-lly=s] [-urx=s] [-ury=s]

       [-verbose]

       [-xmax=pixels] [-ymax=pixels]

       [-textalphabits={1,2,4}]

       psfile[.ps]

OPTION USAGE
       Minimum	unique	abbreviation of option is acceptable.  You may use double hyphens instead of single hyphen to denote
       options.	 You may use white space in place of the equals sign to separate an option name from its value.

DESCRIPTION
       This program is part of Netpbm(1).

       pstopnm reads a PostScript or PDF file as input and produces PBM, PGM, or PPM images as output.	This program  simply
       uses GhostScript to render a PostScript file with its PNM device drivers.  If you don't have GhostScript installed or
       the version you have installed was not built with the relevant PNM device drivers, pstopnm will fail.  You can see if
       you  have  the  proper  environment by issuing the command gs --help .  If it responds and lists under "Available De‐
       vices" pbm, pbmraw, pgm, pgmraw, pnm, pnmraw, ppm, or ppmraw, you're in business.

       It's important to understand that pstopnm is a Netpbm image file format converter only in the broadest sense  of	 the
       word,  because Postscript is far from an image file format.  What pstopnm really is is a Postscript renderer - an im‐
       age generator.  One place you'll notice the difference is where you expect pstopnm | pnmtops to be idempotent  (which
       is not the case).  There are details on this kind of conversion below.

       pstopnm	uses  the  value  of  the GHOSTSCRIPT environment variable as the file name for the Ghostscript program.  If
       GHOSTSCRIPT is not set, pstopnm searches your PATH for a regular file named gs.	If it doesn't find one,	 it  assumes
       Ghostscript is in the file /usr/bin/gs.

       pstopnm	does  not use the Netpbm libraries to generate the output files, so may not be entirely consistent with most
       Netpbm programs.

       psfile[.ps] is the name of the input file.  pstopnm will add the ps to the end of the name you specify if no file ex‐
       ists by the exact name you specify, but one with .psadded does.	For Standard Input, use - or just don't give any ar‐
       gument.

       If you use the -stdout  option or your input is from Standard Input, pstopnm outputs images of all  the	pages  as  a
       multi-image file to Standard Output.  Otherwise, pstopnm creates one file for each page in the Postscript input.	 The
       files  are  named  as follows: If the input file is named psfile.ps, the name of the files will be psfile001.ppm, ps‐
       file002.ppm, etc.  The filetype suffix is .ppm, .pgm, or .pbm, depending on which kind of output you choose with your
       invocation options.  If the input file name does not end in .ps, the whole file name is used in the output file name.
       For example, if the input file is named psfile.old, the output file name is psfile.old001.ppm, etc.

       Note that the output file selection is inconsistent with most Netpbm programs, because it does not default  to  Stan‐
       dard  Output.  This is for historical reasons, based on the fact that the Netpbm formats did not always provide for a
       sequence of images in a single file.

       When your input is from Standard Input, you may feed multiple Encapsulated Postscript documents, one  after  another,
       and  pstopnm  converts  every document and places it in the Standard Output stream as an image.	But if your input is
       from a named file, pstopnm expects the file to be an Encapsulated Postscript file, which means it contains  only	 one
       Enapsulated  Postscript	document.  If the file contains multiple concatenated documents, pstopnm ignores every docu‐
       ment but the first.  This distinction does not exist for non-EPSF Postscript input - pstopnm generates an output	 im‐
       age for each page of the input regardless of whether the input is from Standard Input or from a named file.

       Note  that you can generate both kinds of files - concatenated EPSF and multi-page non-EPSF - with pnmtops, selecting
       with the -setpage option.

       Each output image contains a rectangular area of the page to which it pertains.	See the Dimensions section  for	 de‐
       tails on what part of the input image goes into the output image and how big it is in the output and what borders and
       margins are in the output image.

       It has been reported that on some Postscript Version 1 input, Ghostscript, and therefore pstopnm, produces no output.
       To  solve this problem, you can convert the file to Postscript Version 3 with the program ps2ps.	 It is reported that
       the program pstops does not work.

   Dimensions
       This section describes what part of the input image gets used in the output and the dimensions of the output, includ‐
       ing borders and background.

       Note that an output image is associated with a single input page.

       pstopnm starts by taking a rectangular area from the input page.	 That is called the subject image.

       pstopnm may add borders to the subject image to form what is called the bordered subject image.

       pstopnm places the bordered subject image in the center of the output image and clips the edges as necessary  to	 fit
       the computed output image size.

       The  location of the subject image in the Postscript input page is defined by four numbers, the lower left corner and
       the upper right corner x and y coordinates.  These coordinates are usually specified by the BoundingBox DSC statement
       (a Postscript comment) in the PostScript file, but they can be overridden by the user by specifying one	or  more  of
       the following options: -llx, -lly, -urx, and -ury.

       The  presence  and  thickness of a border to be added to the subject image to form the bordered subject image is con‐
       trolled by the options -xborder and -yborder.  If pstopnm does not find a BoundingBox statement in the input, and you
       don't specify image area coordinates on the command line, pstopnm uses default values.  If your input is	 from  Stan‐
       dard  Input,  pstopnm does not use the BoundingBox values (because of the technical difficulty of extracting that in‐
       formation and still feeding the file to Ghostscript), so you either have to specify the	image  area  coordinates  or
       take the default.

       The  output  image  size is a confusing thing.  In a Postscript file, things have spatial dimensions.  For example, a
       particular line may be 3 centimeters long.  A Postscript printer is supposed to print the line  3  centimeters  long,
       using  however many pixels that takes, without regard to how big the sheet of paper on which it is printing is.	In a
       PNM image, by contrast, there is no spatial dimension; there are only pixels.  You might have a line that is 100 pix‐
       els long, but the PNM image says nothing about how long that line should be on a printed page.

       pstopnm fills the role of a Postscript printer.	The PNM image is a virtual printed page.  pstopnm must determine how
       many pixels it will use in the output image to represent an inch of input image, which is the "output device  resolu‐
       tion."  Think of it as the number of dots per inch the virtual printer prints on the virtual page.

       The  simplest  thing  is for you to tell pstopnm exactly what output device resolution to use, using the -dpi option.
       If you say for example -dpi=300 and the bordered subject image is 2 inches by 3 inches, the PNM output  will  be	 600
       pixels by 900 pixels.  Using this method, the output device resolution has to be the same in both directions.

       Or  you	can set the output image dimensions with -xsize and -ysize.  For example, if you say -xsize=1200 -ysize=1800
       and the bordered subject image is 2 inches wide by 3 inches high, the output image is 1200 by 1800 pixels, with	each
       pixel representing 1/600 inch of input image.

       In  the	unlikely event that you want different output device resolutions in the two directions, you could use -xsize
       and -ysize to do that.  In the above example, if you change -ysize to 900, a pixel still represents 1/600 inch  hori‐
       zontally, but 1/300 inch vertically.

       If  you	specify	 one  of -xsize and -ysize and not the other, pstopnm defaults the other such that the output device
       resolution is the same in both directions.

       The "x" and "y" of -xsize and -ysize refer to the image being printed on the page,  not	the  page.   So	 if  pstopnm
       prints it in landscape orientation, "x" would pertain to the vertical direction on the page, i.e. the vertical direc‐
       tion in the output PNM image.

       If  you	specify	 neither the output size nor the output device resolution, pstopnm does some weird computation which
       exists mainly for historical reasons:

       If you specify -nocrop, pstopnm uses the values of -xmax and -ymax for the output image dimensions.  These default to
       612 and 792 pixels, respectively.

       The final case, the default, is where you don't specify any size or resolution options or -nocrop.  This is the	most
       complicated  case.  In this case, pstopnm first chooses an output device resolution that would generate the number of
       pixels indicated by -xmax and -ymax from the bordered subject image.  Then, based on that resolution, it	 chooses  an
       output  image  size  that  is just large enough to accommodate the subject image (no borders).  Remember (above) that
       pstopnm trims the edges of the bordered subject image to fit the computed output size.

   Ghostscript Limitations
       Tests done in 2013 with Ghostscript 8.71 indicate that Ghostscript's pgmraw output driver has some kind	of  rounding
       error  that  causes  the	 pixel values to change slightly, and that means pstopnm generates incorrect output when you
       have monochrome Postscript input.  But with color Postscript input, pstopnm uses Ghostscript's ppmraw  output  driver
       and generates correct PPM output.

   Usage Notes
       There  is  some good advice on converting to and from Postscript, in the document  Postcript File Conversions" (1) by
       Andrew T. Young.

       Reversible Conversion

       If you're trying to do the equivalent of the naive pnmtops | pstopnm, the following steps will do it.

	   $ pnmtops -nocenter -equalpixels -dpi 72 -noturn testimg.ppm > testimg.ps
	   $ pstopnm -xborder=0 -yborder=0 -xsize=XSIZE -ysize=YSIZE \
	       -portrait -stdout -quiet testimg.ps >testimg2.ppm

       XSIZE and YSIZE above are the image dimensions, which you can get from testimg.ps like in the following example	(the
       grep,  awk  and	echo commands are just to help demonstrate how the other commands work - you wouldn't use those in a
       program).

	   $ grep "BoundingBox" testimg.ps
	   %%BoundingBox: 0 0 227 149

	   $ awk  '/%%BoundingBox/ {print $4,$5}' testimg.ps
	    227 149

	   $ xysize=$(awk  '/%%BoundingBox/ {print "-xsize="$4,"-ysize="$5}' testimg.ps)
	   $ echo $xysize

	    -xsize=227 -ysize=149

	   $ pstopnm -xborder=0 -yborder=0 $xysize -portrait ... testimg.ps

       Note that Ghostscript bugs can keep this from doing a perfect reversible conversion.

       PDF is a subset of Postscript, so pstopnm can convert from PDF to Netpbm format, but often produces  the	 wrong	size
       image because of pstopnm's reliance on a BoundingBox DSC statement, which PDF does not have.  With pure text PDFs, it
       works  fine.   In other cases, you can get better results by converting to general Postscript with the pdf2ps program
       that comes with Ghostscript.  For more information about converting to and from PDF, see Document/Graphics Software .

OPTIONS
       In addition to the options common to all programs based on libnetpbm (most notably  -quiet,  see	  Common Options  ),
       pstopnm recognizes the following command line options:

       -forceplain
	       forces  the  output file to be in plain (text) format.  Otherwise, it is in raw (binary) format.	 See pbm(1),
	      etc.  Use this instead of the -plain common option if you need plain format output.

       -llx=bx
	      selects bx as the lower left corner x coordinate (in inches) on the Postscript input page of the	subject	 im‐
	      age.  See the Dimensions section .

       -lly=by
	      selects  by  as the lower left corner y coordinate (in inches) on the Postscript input page of the subject im‐
	      age.  See the Dimensions section .

       -landscape
	      renders the image in landscape orientation.

	      If you specify neither -portrait nor -landscape, pstopnm chooses the orientation that best fits the  image  on
	      the output page.

	      Landscape	 means	printed	 sideways  on the page, not printed the long way.  Those are different things if the
	      long edge of the page is the top one.

       -portrait
	      renders the image in portrait orientation.

	      See -landscape.

       -nocrop
	      This option causes pstopnm to make the output image exactly the dimensions of the bordered subject image.	  By
	      default,	pstopnm makes the output image the dimensions specified by -xmax and -ymax.  See the Dimensions sec‐
	      tion .

       -pbm

       -pgm

       -ppm   selects the format of the output file.  By default, all files are rendered as PPM.

       -stdout
	      causes output to go to Standard Output instead of to regular files, one per page (see  description  of  output
	      files above).  Use pnmsplit to extract individual pages from Standard Output.

       -urx=tx
	      selects  tx as the upper right corner x coordinate (in inches) on the Postscript input page of the subject im‐
	      age.  See the Dimensions section .

       -ury=ty
	      selects ty as the upper right corner y coordinate (in inches) on the Postscript input page of the subject	 im‐
	      age.  See the Dimensions section .

       -verbose
	      prints processing information to stdout.

       -xborder=frac
	      specifies	 that  the  left and right borders added to the subject image are to be frac times the subject image
	      width.  The default value is 0.1.	 See the Dimensions section .

       -xmax=xmax
	      specifies that the output image is to be xmax pixels wide.  The default is 612.  See the Dimensions section .

       -xsize=xsize
	      specifies that the output image is to be xsize pixels wide.  See the Dimensions section .

       -yborder=frac
	      specifies that the top and bottom borders added to the subject image are to be frac times	 the  subject  image
	      height.  The default value is 0.1.  See the Dimensions section .

       -ymax=ymax
	      specifies that the output image is to be ymax pixels high.  The default is 792.  See the Dimensions section .

       -ysize=ysize
	      specifies that the output image is to be ymax pixels high.  See the Dimensions section .

       -dpi=dpi
	      specifies	 the  output  device resolution, in dots per inch, of the Postscript printer that pstopnm simulates.
	      This is the number of PNM pixels pstopnm generates for each inch of image.  See the Dimensions section .

	      This option was new in Netpbm 10.21 (March 2004).

       -textalphabits={1,2,4}
	      This controls subsample antialiasing of text.  Antialiasing is a form  of	 smoothing  that  eliminates  jagged
	      edges  on	 characters.  Subsample antialiasing is a kind of antialiasing that uses subpixels in a box, and the
	      value of this option is the size of that box.  4 gives you the best looking output,  while  1  causes  no	 an‐
	      tialiasing.  Smaller numbers make pnmtops use less CPU time.

	      Pstopnm uses Ghostscript's TextAlphaBits parameter for this.

	      The default is 4.

	      This option was new in Netpbm 10.53 (December 2010).  Older versions of pstopnm do no antialiasing.

LIMITATIONS
       The  program  will produce incorrect results with PostScript files that initialize the current transformation matrix.
       In these cases, page translation and rotation will not have any effect.	To render these files, probably the best bet
       is to use the following options:

	   pstopnm -xborder 0 -yborder 0 -portrait -nocrop file.ps

       Additional options may be needed if the document is supposed to be rendered on a medium	different  from	 letter-size
       paper.

SEE ALSO
       gs, pnmtops(1), psidtopgm(1), pbmtolps(1), pbmtoepsi(1), pnmsplit(1), pstofits

COPYRIGHT
       Copyright (c) 1992 Smithsonian Astrophysical Observatory

       PostScript is a Trademark of Adobe Systems Incorporated.

AUTHOR
       Alberto Accomazzi, WIPL, Center for Astrophysics.

DOCUMENT SOURCE
       This manual page was generated by the Netpbm tool 'makeman' from HTML source.  The master documentation is at

	      http://netpbm.sourceforge.net/doc/pstopnm.html

netpbm documentation				      21 February 2024				      Pstopnm User Manual(1)