| <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> |
| <html> |
| <!-- SECTION: Specifications --> |
| <head> |
| <title>Generating PostScript for CUPS</title> |
| <meta name='keywords' content='Programming, PostScript, Document Structuring Conventions'> |
| <link rel='stylesheet' type='text/css' href='../cups-printable.css'> |
| </head> |
| <body> |
| <!-- |
| CUPS PostScript file specification for CUPS. |
| |
| Copyright © 2007-2012 by Apple Inc. |
| Copyright © 2006 by Easy Software Products. |
| |
| Licensed under Apache License v2.0. See the file "LICENSE" for more |
| information. |
| --> |
| |
| <H1 CLASS="title">Generating PostScript for CUPS</H1> |
| |
| <h2 class='title'><a name='INTRODUCTION'>Introduction</a></h2> |
| |
| <p>This document describes how to generate PostScript output for |
| CUPS and is largely based on the <a |
| href="http://partners.adobe.com/public/developer/en/ps/5001.DSC_Spec.pdf"> |
| Adobe TechNote #5001: PostScript Language Document Structuring |
| Conventions Specification Version 3.0</a>. 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.</p> |
| |
| <blockquote><b>Note:</b> While PostScript is currently the |
| de-facto 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 uses PDF as the primary print job file |
| format and Linux is making the transition. Both PostScript and |
| PDF are complex formats, and we highly recommend using high-level |
| toolkits whenever possible to create your print jobs.</blockquote> |
| |
| <h3>Anatomy of a PostScript File</h3> |
| |
| <p>PostScript files are ASCII text files starting with a header |
| line (<tt>%!PS-Adobe-3.0</tt>) followed by a combination of |
| comment lines starting with the percent sign (<tt>%</tt>) 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:</p> |
| |
| <pre class="command"> |
| %!PS-Adobe-3.0 |
| %%BoundingBox: 36 36 576 756 |
| %%Pages: 1 |
| %%LanguageLevel: 2 |
| %%EndComments |
| %%BeginSetup |
| % this is where fonts would be embedded |
| %%EndSetup |
| %%Page: (1) 1 |
| %%BeginPageSetup |
| % this is where page-specific features would be specified |
| %%EndPageSetup |
| % 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 |
| </pre> |
| |
| <div class="figure"><table summary="Sample PostScript File Output"> |
| <caption>Figure 1: <a name="FIGURE_1">Sample PostScript File Output</a></caption> |
| <tr><td align="center"><img src="../images/smiley.jpg" |
| width="445" height="570" alt="Sample PostScript File Output"></td></tr> |
| </table></div> |
| |
| |
| <h2><a name='OPTIONS'>Embedding Printer Options</a></h2> |
| |
| <p>There are two main strategies for embedding printer options in PostScript |
| files. The first is to list CUPS options using the <code>%cupsJobTicket</code> |
| comment:</p> |
| |
| <pre> |
| %!PS-Adobe-3.0 |
| %cupsJobTicket: media=A4 sides=two-sided-long-edge |
| %cupsJobTicket: PrinterOption=foo PrinterOption2=bar |
| ... |
| %%EndComments |
| </pre> |
| |
| <p>CUPS options apply to the entire job. To apply options to individual pages, |
| use the <code>%%IncludeFeature</code> comment instead:</p> |
| |
| <pre> |
| %%Page: label 123 |
| %%BeginPageSetup |
| %%IncludeFeature: *PageSize A4 |
| %%IncludeFeature: *PrinterOption Foo |
| %%IncludeFeature: *PrinterOption2 Bar |
| %%EndPageSetup |
| ... |
| </pre> |
| |
| |
| <h2><a name='FONTS'>Embedding Fonts and Text</a></h2> |
| |
| <p>Always embed the fonts used by your print job, and for best performance |
| embed the fonts and character encodings in the setup section of the PostScript |
| file. Type 1 and Type 3 fonts are supported by all PostScript printers, while |
| Type 42 (TrueType) and CID fonts are supported by most level 2 and all level 3 |
| PostScript printers. Binary font files should always be converted to the |
| corresponding ASCII (hex) encoding to avoid problems when printing over |
| interfaces that do not support binary PostScript.</p> |
| |
| |
| <h2><a name='IMAGES'>Embedding Images</a></h2> |
| |
| <p>The <code>image</code> operator should be used to embed images in PostScript |
| files. Always use ASCII hex or Base-85 encoding for the image data to avoid |
| problems when printing over interfaces that do not support binary PostScript. |
| 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.</p> |
| |
| </body> |
| </html> |