Introduction

This document describes how to generate PostScript output for CUPS and is largely based on the Adobe TechNote #5001: PostScript Language Document Structuring Conventions Specification Version 3.0. While CUPS can generally print any PostScript file, following the rules in the Adobe TechNote and this document will ensure that your PostScript output will work reliably.

Note: While PostScript is currently the defacto-standard print job file format/language for UNIX-based applications, it is slowly being phased out in favor of Adobe's Portable Document Format ("PDF") which offers many advantages over PostScript. MacOS X uses PDF as the primary print job file format, and we expect Linux to soon follow. Both PostScript and PDF are complex formats, and we highly recommend using high-level toolkits whenever possible.

Anatomy of a PostScript File

PostScript files are ASCII text files starting with a header line (%!PS-Adobe-3.0) followed by a combination of comment lines starting with two percent signs (%%) and PostScript code lines. The lines themselves should not exceed 255 characters to conform to the DSC. The following short PostScript file produces a box with a smiley face in it:

%!PS-Adobe-3.0
%%BoundingBox: 36 36 576 756
%%Pages: 1
%%LanguageLevel: 2
%%EndComments
%%Page: (1) 1
% Draw a black box around the page
0 setgray
1 setlinewidth
36 36 540 720 rectstroke

% Draw a two inch blue circle in the middle of the page
0 0 1 setrgbcolor
306 396 144 0 360 arc closepath fill

% Draw two half inch yellow circles for eyes
1 1 0 setrgbcolor
252 432 36 0 360 arc closepath fill
360 432 36 0 360 arc closepath fill

% Draw the smile
1 setlinecap
18 setlinewidth
306 396 99 200 340 arc stroke

% Print it!
showpage
%%EOF
Figure 1: Sample PostScript File Output
Sample PostScript File Output

Embedding Printer Options

Embedding Fonts and Text

Embedding Images

Note: While some printers support arbitrary binary data in PostScript files, we do not recommend this practice because it does not work with all printers or interfaces. In most cases, the Base-85 encoding and compression filters can be used to embed images with very little, if any, increase in data size.