Creating PDF files with ps2pdf

For better or for worse, Adobe's Portable Document Format (PDF) is a wildly popular way of exchanging information. On Windows and Mac OS, most people create PDF files by first creating a PostScript file and then using Adobe Acrobat Distiller to generate a PDF. Linux, however, has no version of Distiller. There are a number of ways to create a PDF in Linux, but one of the most popular methods is to use a utility called ps2pdf.

A number of Linux applications, most notably OpenOffice.org and TeX, can create PDFs without the need to create a PostScript file, so why use ps2pdf? Because there are times you need to create PDF files that these applications don't support.

According to the ps2pdf documentation, ps2pdf can "process complex and difficult PostScript files that Acrobat Distiller is not able to handle." I've never run into this situation myself, but I know of a few people who turned in desperation to ps2pdf because they could not get usable output from Acrobat Distiller.

ps2pdf is a script that comes bundled with GhostScript, a freeware PostScript interpreter. ps2pdf runs a PostScript file through GhostScript and outputs a PDF file. GhostScript is a standard part of most Linux systems. To find out if ps2pdf is installed on your system, type which ps2pdf at the command line. If a path is displayed (for example, /usr/bin/ps2pdf), then you're ready to go. If not, you can download and install GhostScript to get it.

Running ps2pdf

Let's assume that you've created a PostScript file and now want to convert it to PDF. If you are in a graphical environment like KDE or GNOME, open a terminal window and change to the directory containing the PostScript file that you want to convert. Then, type ps2pdf followed by the name of your PostScript file. For example:

ps2pdf gundam.ps HeavyArms.pdf

You don't need to include the name of the PDF file on the command line. If you leave it out ps2pdf gives the PDF file the name of the PostScript file and a .pdf file type.

If all goes well, you'll have yourself a PDF file that you can view in Acrobat Reader, xpdf, or any other PDF viewer. The PDF may have no navigation features or links, and it may also be quite large, but it can be used for creating proofs, for archiving, or for passing documents to family, friends, and colleagues.

If you are using Knoppix you may find that ps2pdf doesn't work. I've been told that version 3.2 of the Knoppix distribution doesn't come with the ps2pdf script. Instead, it uses a script called ps2pdfwr, which uses the same syntax as ps2pdf.

Using ps2pdf's parameters

One way to enhance your PDF files is to use ps2pdf with one of more of the 75 Acrobat Distiller parameters. The Distiller parameters are simply command-line options that enable you to change how your PDFs are produced, and they're documented in the file ps2pdf.htm in the doc folder where GhostScript is installed. ps2pdf can use all of the parameters available to Acrobat Distiller, but I have found four in particular to be the most useful, as we'll see in a moment.

Using the Distiller parameters with ps2pdf is simple. On the command line, type ps2pdf followed by -d, followed by the parameter name, followed by the name of the PostScript file:

ps2pdf -dParameterName myFile.ps

Setting PDF compatibility

As with many file formats, PDF gains new features with each new version of Acrobat. For example, PDFs created with Adobe Acrobat versions 4.0 and onward support enhanced security, transparency, compression, and annotations. However, you never know what version of a PDF reader someone will be using, or whether it will support the full feature set. To ensure that your PDFs can be viewed in both newer and older versions of PDF readers, you can set a compatibility level for the PDF by using the CompatibilityLevel=x.x parameter, where x.x is the version of the PDF specification. Note that the specification number does not correspond to the version of the Acrobat software. Rather, there are three values you can use with this parameter:

1.2 -- equivalent to a PDF created with Acrobat version 3.0. This is the ps2pdf's default.

1.3 -- equivalent to a PDF created with Acrobat version 4.0.

1.4 -- equivalent to a PDF created with Acrobat version 5.0.

For example:

ps2pdf -dCompatibilityLevel=1.3 ps2pdf.ps

If you are unsure of what compatibility level to use, stick with the default. If you have version 7.0 or higher of GhostScript installed on your computer, you can use the ps2pdf13 or ps2pdf14 scripts to automatically set the compatibility level.

Optimizing your PDFs

No matter what size your PDF file is, you probably want to create it so that the file opens and displays as quickly as possible, especially if you plan to host the file on a network or on the Web. Optimizing a PDF tweaks the structure of the file so that a server sends a page only as it is requested, rather than loading the entire PDF file. To optimize your PDFs, use the Optimize=true parameter. For example:

ps2pdf -dOptimize=true report.ps

Embedding fonts

In some PDF files the fonts appear fuzzy. I have found this is especially true of PostScript files created with the TeX and LaTeX typesetting systems, which by default use a unique set of fonts. If you find that the fonts in your PDF file are fuzzy, you can embed the fonts used in the source document with the PDF. Embedding fonts ensures that:

Your PDF is created with the standard 12 PostScript fonts, and

Any fonts that may not be installed on the computer on which your PDF is being viewed are available.

Embed fonts by adding the EmbedAllFonts=true parameter to the command line:

ps2pdf -dEmbedAllFonts=true WonderDog.ps

The main drawback to using EmbedAllFonts is that your PDF will become noticeably larger.

Compressing the PDF

You can shrink large PDF files by as much as half of their original size using the UseFlateCompression=true parameter. Flate compression, also called Zip compression, does a good job shrinking text and graphics without distorting the content.

To use flate compression with ps2pdf, type the following at the command line:

ps2pdf -dUseFlateCompression=true greatNovel.ps

Specifying the target device

One of the great things about PDF files is that they can be used for a variety of purposes. They can be viewed on screen, downloaded as electronic books, or printed on a laser, ink jet, or professional printer. You can specify five types of target device for your PDF using the PDFSETTINGS parameter:

/screen -- creates a low-resolution PDF optimized for reading on a monitor.

/ebook -- the PDF has a slightly higher resolution, for better reading of electronic books on a monitor or on a smaller device like a PDA or an electronic book reader.

/printer -- the PDF is generated for printing on a laser or ink jet printer, or to be distributed on a disk or CD-ROM.

/prepress -- the PDF is generated for a high-quality printing press.

/default -- the PDF can be used for all the output listed above. However, the file will be larger than it would if you used a single type.

To use this parameter with ps2pdf, type the following at the command line:

ps2pdf -dPDFSETTINGS=/printer galleyProof.ps

Troubleshooting

While ps2pdf generally does a good job, I've found it susceptible to a couple of common problems. Sometimes, ps2pdf has trouble with a PostScript file and fails to perform the conversion. If something goes wrong, a set of indecipherable messages appears in the terminal window as shown below:

If you see this, try recreating the PostScript file and running ps2pdf again. This kind of error message also rears its head when you mistype the name of the PostScript file. Check your typing against the name of the PostScript file and try running it through ps2pdf again.

A second problem with ps2pdf is that the PDFs produced by ps2pdf vary in quality from production level to fuzzy. The quality of the output really depends on the source PostScript file and the fonts that you use. Often the output looks fuzzy because the fonts in a document aren't the standard 12 PostScript fonts. Instead, ps2pdf uses lower-quality bitmapped fonts. While the document may appear distorted in a PDF reader, it actually prints clearly and cleanly. To get around this problem, try using the EmbedAllFonts=true parameter.

Conclusion

ps2pdf is a viable alternative to Acrobat Distiller. It's easy to use, fast, and in most cases creates a nice PDF file. With a few additions to the command line you can use ps2pdf to make handsome PDF files, and you don't have to spend hundreds of dollars on proprietary software to do it.