]> git.ipfire.org Git - thirdparty/cups.git/blame - doc/help/spec-ppd.html
Load cups into easysw/current.
[thirdparty/cups.git] / doc / help / spec-ppd.html
CommitLineData
ef416fc2 1<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
2<html>
4744bd90 3<!-- SECTION: Specifications -->
ef416fc2 4<head>
5 <title>CUPS PPD Extensions</title>
6 <meta name='keywords' content='Programming, PostScript Printer Description'>
a4d04587 7 <link rel='stylesheet' type='text/css' href='../cups.css'>
ef416fc2 8</head>
9<body>
10<!--
bc44d920 11 "$Id: spec-ppd.html 6646 2007-07-10 22:56:04Z mike $"
ef416fc2 12
13 CUPS PPD extensions specification for the Common UNIX Printing System (CUPS).
14
f7deaa1a 15 Copyright 1997-2007 by Easy Software Products.
ef416fc2 16
17 These coded instructions, statements, and computer programs are the
18 property of Easy Software Products and are protected by Federal
19 copyright law. Distribution and use rights are outlined in the file
20 "LICENSE.txt" which should have been included with this file. If this
21 file is missing or damaged please contact Easy Software Products
22 at:
23
24 Attn: CUPS Licensing Information
25 Easy Software Products
26 44141 Airport View Drive, Suite 204
27 Hollywood, Maryland 20636 USA
28
29 Voice: (301) 373-9600
30 EMail: cups-info@cups.org
31 WWW: http://www.cups.org
32-->
33
34<h2 class='title'><a name='INTRODUCTION'>Introduction</a></h2>
35
36<p>This specification describes the attributes and extensions
37that CUPS adds to <a
4744bd90 38href="http://partners.adobe.com/public/developer/en/ps/5003.PPD_Spec_v4.3.pdf">
ef416fc2 39Adobe TechNote #5003: PostScript Printer Description File Format
40Specification Version 4.3</a>. PostScript Printer Description
41("PPD") files describe the capabilities of each printer and are
42used by CUPS to support printer-specific features and intelligent
43filtering.</p>
44
45<h2 class='title'><a name='SYNTAX'>PPD File Syntax</a></h2>
46
47<p>The PPD format is text-based and uses lines of up to 255
48characters terminated by a carriage return, linefeed, or
49combination of carriage return and line feed. The following ABNF
50definition [RFC2234] defines the general format of lines in a PPD
51file:</p>
52
53<pre class='command'>
54PPD-FILE = HEADER +(DATA / COMMENT / LINE-END)
55
56HEADER = "*" 0x50.50.44.2D.41.64.6F.62.65 ":" ; *PPD-Adobe:
57 *WSP DQUOTE "4.3" DQUOTE LINE-END
58
59COMMENT = "*%" *TCHAR LINE-END
60
61DATA = "*" 1*KCHAR [ WSP 1*KCHAR [ "/" 1*TCHAR ] ] ":"
62 1*(*WSP VALUE) LINE-END
63
64VALUE = 1*TCHAR / DQUOTE 1*SCHAR DQUOTE
65
66KCHAR = ALPHA / DIGIT / "_" / "." / "-"
67
68SCHAR = LINE-END / WSP / %x21 / %x23-7E / %xA0-FF
69
70TCHAR = %x20-7E / %xA0-FF
71
72LINE-END = CR / LF / CR LF
73</pre>
74
75
76<h2 class='title'><a name='ATTRIBUTES'>General Attributes</a></h2>
77
4744bd90 78<h3>APBookFile</h3>
79
80<p class='summary'>*APBookFile: "file URL"</p>
81
82<p>This string attribute specifies the Apple help book file to use
83for this printer driver.</p>
84
85<p>Example:</p>
86
87<pre class='command'>
88*APBookFile: "file:///Library/Printers/vendor/Help/filename"
89</pre>
90
a4d04587 91<h3>APDuplexRequiresFlippedMargin</h3>
92
93<p class='summary'>*APDuplexRequiresFlippedMargin: boolean</p>
94
95<p>This boolean attribute notifies the RIP filters that the
96destination printer does not require the top and bottom margins
97of the <tt>ImageableArea</tt> swapped for the back page. The
bc44d920 98default is <tt>true</tt> when <tt>cupsFlipDuplex</tt> is
99<tt>true</tt> or <tt>cupsBackSide</tt> is <tt>Flipped</tt>
100and <tt>false</tt> otherwise.</p>
ef416fc2 101
a4d04587 102<p>Example:</p>
ef416fc2 103
104<pre class='command'>
411affcf 105<em>*% Flip the back side images</em>
106*cupsFlipDuplex: true
107
a4d04587 108<em>*% Don't swap the top and bottom margins for the back side</em>
109*APDuplexRequiresFlippedMargin: false
ef416fc2 110</pre>
111
bc44d920 112<p>Also see the related <tt>cupsBackSide</tt> attribute.</p>
a4d04587 113
09a101d6 114<h3>APPrinterPreset</h3>
115
116<p class='summary'>*APPrinterPreset name/text: "*Option Choice ..."</p>
117
118<p>This attribute defines presets for multiple options that show up
119in the print dialog on Mac OS X. Each preset maps to one or more
120pairs of PPD options and choices.</p>
121
122<p>Examples:</p>
123
124<pre class='command'>
125*APPrinterPreset Text/Text Printing on Plain Paper: "
126 *MediaType Plain
127 *ColorModel Gray
128 *Resolution 600dpi"
129*End
130
131*APPrinterPreset Photo/Photo Printing on Glossy Paper: "
132 *MediaType Glossy
133 *ColorModel RGB
134 *Resolution 300dpi"
135*End
136</pre>
137
3d8365b8 138<h3>APRemoteQueueID</h3>
139
140<p class='summary'>*APRemoteQueueID: "string"</p>
141
142<p>This string attribute notifies the scheduler that this PPD is for a remote CUPS printer, typically shared via Bonjour.</p>
143
144<p>Example:</p>
145
146<pre class='command'>
147*APRemoteQueueID: "myprinter"
148</pre>
149
bc44d920 150<h3><span class='info'>CUPS 1.3</span>cupsBackSide</h3>
151
152<p class='summary'>*cupsBackSide: keyword</p>
153
154<p>This attribute requests special handling of the back side of pages
155when doing duplexed (2-sided) output. <a href='#TABLE_1'>Table 1</a>
156shows the supported keyword values for this attribute and their affect
157on the raster data sent to your driver. The default value is
158<code>Normal</code>.</p>
159
160<blockquote><b>Note:</b> <tt>cupsBackSide</tt> replaces the older
161<tt>cupsFlipDuplex</tt> attribute - if <tt>cupsBackSide</tt> is
162specified, <tt>cupsFlipDuplex</tt> will be ignored.</blockquote>
163
164<div class='table'>
165<table width='80%' summary='Back Side Raster Coordinate System'>
166<caption>Table 1: <a name='TABLE_1'>Back Side Raster Coordinate System</a></caption>
167<thead>
168<tr>
169 <th>cupsBackSide</th>
170 <th>Tumble Value</th>
171 <th>Image Presentation</th>
172</tr>
173</thead>
174<tbody>
175<tr>
176 <td><code>Normal</code></td>
177 <td><code>false</code></td>
178 <td>Left-to-right, top-to-bottom</td>
179</tr>
180<tr>
181 <td><code>Normal</code></td>
182 <td><code>true</code></td>
183 <td>Left-to-right, top-to-bottom</td>
184</tr>
185<tr>
186 <td><code>ManualTumble</code></td>
187 <td><code>false</code></td>
188 <td>Left-to-right, top-to-bottom</td>
189</tr>
190<tr>
191 <td><code>ManualTumble</code></td>
192 <td><code>true</code></td>
193 <td>Right-to-left, bottom-to-top</td>
194</tr>
195<tr>
196 <td><code>Rotated</code></td>
197 <td><code>false</code></td>
198 <td>Right-to-left, bottom-to-top</td>
199</tr>
200<tr>
201 <td><code>Rotated</code></td>
202 <td><code>true</code></td>
203 <td>Right-to-left, top-to-bottom</td>
204</tr>
205<tr>
206 <td><code>Flipped</code> *</td>
207 <td><code>false</code></td>
208 <td>Left-to-right, bottom-to-top</td>
209</tr>
210<tr>
211 <td><code>Flipped</code> *</td>
212 <td><code>true</code></td>
213 <td>Right-to-left, top-to-bottom</td>
214</tr>
215</tbody>
216</table>
217</div>
218
219<p><em>* - Not supported in Mac OS X 10.5.x and earlier</em></p>
220
221<p>Examples:</p>
222
223<pre class='command'>
224<em>*% Flip the page image for the back side of duplexed output</em>
225*cupsBackSide: Flipped
226
227<em>*% Rotate the page image for the back side of duplexed output</em>
228*cupsBackSide: Rotated
229</pre>
230
231<p>Also see the related <tt>APDuplexRequiresFlippedMargins</tt>
232attribute.</p>
233
2abf387c 234<h3>cupsEvenDuplex</h3>
235
236<p class='summary'>*cupsEvenDuplex: boolean</p>
237
238<p>This boolean attribute notifies the RIP filters that the
239destination printer requires an even number of pages when 2-sided
240printing is selected. The default value is <code>false</code>.</p>
241
242<p>Example:</p>
243
244<pre class='command'>
245<em>*% Always send an even number of pages when duplexing</em>
246*cupsEvenDuplex: true
247</pre>
248
3d8365b8 249<h3>cupsFax</h3>
250
251<p class='summary'>*cupsFax: boolean</p>
252
253<p>This boolean attribute specifies whether the PPD defines a facsimile device. The default is <tt>false</tt>.</p>
254
255<p>Examples:</p>
256
257<pre class='command'>
258*cupsFax: true
259</pre>
260
a4d04587 261<h3>cupsFilter</h3>
262
263<p class='summary'>*cupsFilter: "source/type cost program"</p>
264
265<p>This string attribute provides a conversion rule from the
266given source type to the printer's native format using the
267filter "program". If a printer supports the source type directly,
268the special filter program "-" may be specified.</p>
ef416fc2 269
270<p>Examples:</p>
271
272<pre class='command'>
273<em>*% Standard raster printer driver filter</em>
274*cupsFilter: "application/vnd.cups-raster 100 rastertofoo"
275
276<em>*% Plain text filter</em>
277*cupsFilter: "text/plain 10 texttofoo"
278
279<em>*% Pass-through filter for PostScript printers</em>
280*cupsFilter: "application/vnd.cups-postscript 0 -"
281</pre>
282
bc44d920 283<h3><span class='info'>Deprecated</span>cupsFlipDuplex</h3>
ef416fc2 284
a4d04587 285<p class='summary'>*cupsFlipDuplex: boolean</p>
286
bc44d920 287<p>Due to implementation differences between Mac OS X and Ghostscript,
288the <tt>cupsFlipDuplex</tt> attribute is deprecated. Instead, use
289the <tt>cupsBackSide</tt> attribute to specify the coordinate
290system (pixel layout) of the page data on the back side of duplex
291pages.</p>
09a101d6 292
bc44d920 293<p>The value <code>true</code> maps to a <tt>cupsBackSide</tt> value
294of <code>Rotated</code> on Mac OS X and <code>Flipped</code> with
295Ghostscript.</p>
09a101d6 296
bc44d920 297<p>The default value is <code>false</code>.</p>
ef416fc2 298
bc44d920 299<blockquote><b>Note:</b> Mac OS X drivers that previously used
300<tt>cupsFlipDuplex</tt> may wish to provide both the old and
301new attributes for maximum compatibility, for example:
ef416fc2 302
303<pre class='command'>
bc44d920 304*cupsBackSide: Rotated
ef416fc2 305*cupsFlipDuplex: true
306</pre>
307
bc44d920 308Similarly, drivers written for other operating systems using
309Ghostscript can use:
310
311<pre class='command'>
312*cupsBackSide: Flipped
313*cupsFlipDuplex: true
314</pre></blockquote>
a4d04587 315
09a101d6 316<h3>cupsIPPFinishings</h3>
317
318<p class='summary'>*cupsIPPFinishings number/text: "*Option Choice ..."</p>
319
320<p>This attribute defines a mapping from IPP <code>finishings</code>
321values to PPD options and choices.</p>
322
323<p>Examples:</p>
324
325<pre class='command'>
326*cupsIPPFinishings 4/staple: "*StapleLocation SinglePortrait"
327*cupsIPPFinishings 5/punch: "*PunchMedia Yes *PunchLocation LeftSide"
328*cupsIPPFinishings 20/staple-top-left: "*StapleLocation SinglePortrait"
329*cupsIPPFinishings 21/staple-bottom-left: "*StapleLocation SingleLandscape"
330</pre>
331
4744bd90 332<h3>cupsIPPReason</h3>
333
334<p class='summary'>*cupsIPPReason reason/Reason Text: "optional URIs"</p>
335
336<p>This optional attribute maps custom
337<code>printer-state-reasons</code> keywords that are generated by
338the driver to human readable text. The optional URIs string
339contains zero or more URIs separated by a newline. Each URI can
340be a CUPS server absolute path to a help file under the
341scheduler's <code>DocumentRoot</code> directory, a full HTTP URL
342("http://www.domain.com/path/to/help/page.html"), or any other
343valid URI which directs the user at additional information
344concerning the condition that is being reported.</p>
345
bc44d920 346<p>Since the reason text is limited to 80 characters by the PPD specification,
347longer text strings can be included by URI-encoding the text with the "text"
348scheme, for example "text:some%20text". Multiple <code>text</code> URIs are
349combined (with spaces between each URI) by the <tt>ppdLocalizeIPPReason</tt>
350into a single string that can be displayed to the user.</p>
351
4744bd90 352<p>Examples:</p>
353
354<pre class='command'>
355<em>*% Map com.vendor-error to text but no page</em>
356*cupsIPPReason com.vendor-error/A serious error occurred: ""
357
bc44d920 358<em>*% Map com.vendor-error to more than 80 characters of text but no page</em>
359*cupsIPPReason com.vendor-error/A serious error occurred: "text:Now%20is%20the%20time
360text:for%20all%20good%20men%20to%20come%20to%20the%20aid%20of%20their%20country."
361
4744bd90 362<em>*% Map com.vendor-error to text and a local page</em>
363*cupsIPPReason com.vendor-error/A serious error occurred: "/help/com.vendor/error.html"
364
365<em>*% Map com.vendor-error to text and a remote page</em>
366*cupsIPPReason com.vendor-error/A serious error occurred: "http://www.vendor.com/help"
367
368<em>*% Map com.vendor-error to text and a local, Apple help book, and remote page</em>
369*APHelpBook: "file:///Library/Printers/vendor/Help/filename"
370*cupsIPPReason com.vendor-error/A serious error occurred: "/help/com.vendor/error.html
371help:anchor='com.vendor-error'%20bookID=Vendor%20Help
372http://www.vendor.com/help"
373*End
374</pre>
375
a4d04587 376<h3>cupsLanguages</h3>
377
378<p class='summary'>*cupsLanguages: "locale list"</p>
379
380<p>This attribute describes which language localizations are
381included in the PPD. The "locale list" string is a space-delimited
b94498cf 382list of locale names ("en", "en_US", "fr_CA", etc.)</p>
a4d04587 383
384<p>Example:</p>
385
386<pre class='command'>
387<em>*% Specify Canadian, UK, and US English, and Candian and French French</em>
b94498cf 388*cupsLanguages: "en_CA en_UK en_US fr_CA fr_CA"
a4d04587 389</pre>
390
ef416fc2 391<h3>cupsManualCopies</h3>
392
a4d04587 393<p class='summary'>*cupsManualCopies: boolean</p>
394
ef416fc2 395<p>This boolean attribute notifies the RIP filters that the
396destination printer does not support copy generation in
a4d04587 397hardware. The default value is <code>false</code>.</p>
ef416fc2 398
399<p>Example:</p>
400
401<pre class='command'>
402<em>*% Tell the RIP filters to generate the copies for us</em>
403*cupsManualCopies: true
404</pre>
405
406<h3>cupsModelNumber</h3>
407
a4d04587 408<p class='summary'>*cupsModelNumber: number</p>
409
ef416fc2 410<p>This integer attribute specifies a printer-specific model
411number. This number can be used by a filter program to adjust
412the output for a specific model of printer.</p>
413
414<p>Example:</p>
415
416<pre class='command'>
417<em>*% Specify an integer for a driver-specific model number</em>
418*cupsModelNumber: 1234
419</pre>
420
f7deaa1a 421
422<h3>cupsPJLCharset</h3>
423
424<p class='summary'>*cupsPJLCharset: "ISO character set name"</p>
425
426<p>This string attribute specifies the character set that is used
427for strings in PJL commands. If not specified, US-ASCII is
428assumed.</p>
429
430<p>Example:</p>
431
432<pre class='command'>
433<em>*% Specify UTF-8 is used in PJL strings</em>
434*cupsPJLCharset: "UTF-8"
435</pre>
436
437
ef416fc2 438<h3>cupsPortMonitor</h3>
439
a4d04587 440<p class='summary'>*cupsPortMonitor urischeme/Descriptive Text: "port monitor"</p>
441
ef416fc2 442<p>This string attribute specifies printer-specific "port
443monitor" filters that may be used with the printer. The CUPS
444scheduler also looks for the <tt>Protocols</tt> attribute to see
445if the <tt>BCP</tt> or <tt>TBCP</tt> protocols are supported. If
446so, the corresponding port monitor ("bcp" and "tbcp",
447respectively) is listed in the printer's
448<tt>port-monitor-supported</tt> attribute.</p>
449
a4d04587 450<p>The "urischeme" portion of the attribute specifies the URI scheme
451that this port monitor should be used for. Typically this is used to
452pre-select a particular port monitor for each type of connection that
453is supported by the printer. The "port monitor" string can be "none"
454to disable the port monitor for the given URI scheme.</p>
455
ef416fc2 456<p>Examples:</p>
457
458<pre class='command'>
459<em>*% Specify a PostScript printer that supports the TBCP protocol</em>
460*Protocols: TBCP PJL
461
a4d04587 462<em>*% Specify that TBCP should be used for socket connections but not USB</em>
463*cupsPortMonitor socket/AppSocket Printing: "tbcp"
464*cupsPortMonitor usb/USB Printing: "none"
465
ef416fc2 466<em>*% Specify a printer-specific port monitor for an Epson USB printer</em>
a4d04587 467*cupsPortMonitor usb/USB Status Monitor: "epson-usb"
ef416fc2 468</pre>
469
f7deaa1a 470<h3>cupsPreFilter</h3>
471
472<p class='summary'>*cupsPreFilter: "source/type cost program"</p>
473
474<p>This string attribute provides a pre-filter rule. The pre-filter
475program will be inserted in the conversion chain immediately
476before the filter that accepts the given MIME type.</p>
477
478<p>Examples:</p>
479
480<pre class='command'>
481<em>*% PDF pre-filter</em>
482*cupsPreFilter: "application/pdf 100 mypdfprefilter"
483
484<em>*% PNG pre-filter</em>
485*cupsPreFilter: "image/png 0 mypngprefilter"
486</pre>
487
ef416fc2 488<h3>cupsVersion</h3>
489
a4d04587 490<p class='summary'>*cupsVersion: major.minor</p>
491
ef416fc2 492<p>This required attribute describes which version of the CUPS
493PPD file extensions was used. Currently it must be the string
494"1.0", "1.1", or "1.2".</p>
495
496<p>Example:</p>
497
498<pre class='command'>
499<em>*% Specify a CUPS 1.2 driver</em>
500*cupsVersion: "1.2"
501</pre>
502
ef416fc2 503<h2 class='title'><a name='OPTIONS'>Custom Options</a></h2>
504
505<p>CUPS supports custom options using an extension of the
506<tt>CustomPageSize</tt> and <tt>ParamCustomPageSize</tt>
507syntax:</p>
508
509<pre class='command'>
510*CustomFoo True: "command"
511*ParamCustomFoo Name1/Text 1: order type minimum maximum
512*ParamCustomFoo Name2/Text 2: order type minimum maximum
513...
514*ParamCustomFoo NameN/Text N: order type minimum maximum
515</pre>
516
517<p>When the base option is part of the <tt>JCLSetup</tt> section,
518the "command" string contains JCL commands with "\order"
519placeholders for each numbered parameter. The CUPS API handles
a4d04587 520any necessary value quoting for HP-PJL commands. For example, if
521the JCL command string is "@PJL SET PASSCODE=\1" and the first
522option value is "1234" then CUPS will output the string
523"@PJL SET PASSCODE=1234".</p>
ef416fc2 524
525<p>For non-<tt>JCLSetup</tt> options, the "order" value is a
526number from 1 to N and specifies the order of values as they are
a4d04587 527placed on the stack before the command. For example, if the
528PostScript command string is
529"&lt;&lt;/cupsReal1 2 1 roll&gt;&gt;setpagedevice" and the
530option value is "2.0" then CUPS will output the string
531"2.0 &lt;&lt;/cupsReal1 2 1 roll&gt;&gt;setpagedevice".</p>
ef416fc2 532
533<p>The "type" is one of the following keywords:</p>
534
535<ul>
536
537 <li><tt>curve</tt> - a real value from "minimum" to
538 "maximum" representing a gamma correction curve using the
539 function: f(x) = x <sup>value</sup></li>
540
541 <li><tt>int</tt> - an integer value from "minimum" to
542 "maximum"</li>
543
544 <li><tt>invcurve</tt> - a real value from "minimum" to
545 "maximum" representing a gamma correction curve using the
546 function: f(x) = x <sup>1 / value</sup></li>
547
548 <li><tt>passcode</tt> - a string of numbers value with a
549 minimum of "minimum" numbers and a maximum of "maximum"
a4d04587 550 numbers ("minimum" and "maximum" are numbers and passcode
551 strings are not displayed in the user interface)</li>
ef416fc2 552
553 <li><tt>password</tt> - a string value with a minimum of
554 "minimum" characters and a maximum of "maximum"
a4d04587 555 characters ("minimum" and "maximum" are numbers and password
556 strings are not displayed in the user interface)</li>
ef416fc2 557
558 <li><tt>points</tt> - a measurement value in points from
559 "minimum" to "maximum"</li>
560
561 <li><tt>real</tt> - a real value from "minimum" to
562 "maximum"</li>
563
564 <li><tt>string</tt> - a string value with a minimum of
565 "minimum" characters and a maximum of "maximum"
a4d04587 566 characters ("minimum" and "maximum" are numbers)</li>
ef416fc2 567
568</ul>
569
570<p>Examples:</p>
571
572<pre class='command'>
573<em>*% Base JCL key code option</em>
574*OpenUI JCLPasscode/Key Code: PickOne
575*OrderDependency: 10 JCLSetup *JCLPasscode
576*DefaultJCLPasscode: None
577*JCLPasscode None/No Code: ""
578*JCLPasscode 1111: "@PJL SET PASSCODE = 1111&lt;0A&gt;"
579*JCLPasscode 2222: "@PJL SET PASSCODE = 2222&lt;0A&gt;"
580*JCLPasscode 3333: "@PJL SET PASSCODE = 3333&lt;0A&gt;"
581*JCLCloseUI: *JCLPasscode
582
583<em>*% Custom JCL key code option</em>
584*CustomJCLPasscode True: "@PJL SET PASSCODE = \1&lt;0A&gt;"
585*ParamCustomJCLPasscode Code/Key Code: 1 passcode 4 4
586
587
a4d04587 588<em>*% Base PostScript watermark option</em>
589*OpenUI WatermarkText/Watermark Text: PickOne
590*OrderDependency: 10 AnySetup *WatermarkText
591*DefaultWatermarkText: None
592*WatermarkText None: ""
593*WatermarkText Draft: "&lt;&lt;/cupsString1(Draft)&gt;&gt;setpagedevice"
594*CloseUI: *WatermarkText
595
596<em>*% Custom PostScript watermark option</em>
b86bc4cf 597*CustomWatermarkText True: "&lt;&lt;/cupsString1 3 -1 roll&gt;&gt;setpagedevice"
a4d04587 598*ParamCustomWatermarkText Text: 1 string 0 32
599
600
ef416fc2 601<em>*% Base PostScript gamma/density option</em>
602*OpenUI GammaDensity/Gamma and Density: PickOne
603*OrderDependency: 10 AnySetup *GammaDensity
604*DefaultGammaDensity: Normal
605*GammaDensity Normal/Normal: "&lt;&lt;/cupsReal1 1.0/cupsReal2 1.0&gt;&gt;setpagedevice"
606*GammaDensity Light/Lighter: "&lt;&lt;/cupsReal1 0.9/cupsReal2 0.67&gt;&gt;setpagedevice"
607*GammaDensity Dark/Darker: "&lt;&lt;/cupsReal1 1.1/cupsReal2 1.5&gt;&gt;setpagedevice"
a4d04587 608*CloseUI: *GammaDensity
ef416fc2 609
610<em>*% Custom PostScript gamma/density option</em>
b86bc4cf 611*CustomGammaDensity True: "&lt;&lt;/cupsReal1 3 -1 roll/cupsReal2 5 -1&gt;&gt;setpagedevice"
ef416fc2 612*ParamCustomGammaDensity Gamma: 1 curve 0.1 10
613*ParamCustomGammaDensity Density: 2 real 0 2
614</pre>
615
616
617<h2 class='title'><a name='PROFILES'>Color Profiles</a></h2>
618
a4d04587 619<p>CUPS supports two types of color profiles. The first type is
620based on sRGB and is used by the standard CUPS raster filters and
621ESP Ghostscript. The second type is based on ICC profiles and is
622used by the Core Graphics-based filters on MacOS X.</p>
623
624<blockquote><b>Note:</b> At this time, none of the CUPS raster
625filters support ICC profiles. This will be addressed as time
626and resources permit.</blockquote>
627
ef416fc2 628<h3>cupsColorProfile</h3>
629
a4d04587 630<p class='summary'>*cupsColorProfile Resolution/MediaType: "density
631gamma m00 m01 m02 m10 m11 m12 m20 m21 m22"</p>
ef416fc2 632
a4d04587 633<p>This string attribute specifies an sRGB-based color profile
634consisting of gamma and density controls and a 3x3 CMY color
635transform matrix.</p>
ef416fc2 636
637<p>The <i>Resolution</i> and <i>MediaType</i> values may be "-"
638to act as a wildcard. Otherwise they must match one of the
639<tt>Resolution</tt> or <tt>MediaType</tt> attributes defined in
640the PPD file.</p>
641
642<p>The <i>density</i> and <i>gamma</i> values define gamma and
643density adjustment function such that:</p>
644
645<pre class='command'>
646f(x) = density * x <sup style='font-size: 100%'>gamma</sup>
647</pre>
648
649<p>The <i>m00</i> through <i>m22</i> values define a 3x3
650transformation matrix for the CMY color values. The density
651function is applied <i>after</i> the CMY transformation:</p>
652
653<pre class='command'>
654| m00 m01 m02 |
655| m10 m11 m12 |
656| m20 m21 m22 |
657</pre>
658
659<p>Examples:</p>
660
661<pre class='command'>
662<em>*% Specify a profile for printing at 360dpi on all media types</em>
663*cupsColorProfile 360dpi/-: "1.0 1.5 1.0 0.0 -0.2 -0.4 1.0 0.0 -0.2 0.0 1.0"
664
665<em>*% Specify a profile for printing at 720dpi on Glossy media</em>
666*cupsColorProfile 720dpi/Glossy: "1.0 2.5 1.0 0.0 -0.2 -0.4 1.0 0.0 -0.2 0.0 1.0"
667
668<em>*% Specify a default profile for printing at all other resolutions and media types</em>
669*cupsColorProfile -/-: "0.9 2.0 1.0 0.0 -0.2 -0.4 1.0 0.0 -0.2 0.0 1.0"
670</pre>
671
672<h3>cupsICCProfile</h3>
673
a4d04587 674<p class='summary'>*cupsICCProfile
675ColorModel.MediaType.Resolution/Description: "filename"</p>
ef416fc2 676
a4d04587 677<p>This attribute specifies an ICC color profile that is
678used to convert the document colors to the device
679colorspace. The <tt>ColorModel</tt>, <tt>MediaType</tt>, and
ef416fc2 680<tt>Resolution</tt> keywords specify a selector for color
681profiles. If omitted, the color profile will match any option
682keyword for the corresponding main keyword.</p>
683
684<p>The <tt>Description</tt> specifies human-readable text that
685is associated with the color profile. The <tt>filename</tt>
686portion specifies the ICC color profile to use; if the filename
687is not absolute, it is loaded relative to the
688<var>/usr/share/cups/profiles</var> directory.</p>
689
690<p>Examples:</p>
691
692<pre class='command'>
693<em>*% Specify a profile for CMYK printing at 360dpi on all media types</em>
694*cupsICCProfile CMYK..360dpi/360dpi CMYK: "vendor/foo-360-cmyk.icc"
695
696<em>*% Specify a profile for RGB printing at 720dpi on Glossy media</em>
697*cupsColorProfile RGB.Glossy.720dpi/720dpi Glossy: "vendor/foo-720-glossy-rgb.icc"
698
699<em>*% Specify a default profile for printing at all other resolutions and media types</em>
fa73b229 700*cupsICCProfile ../Default: "vendor/foo-default.icc"
ef416fc2 701</pre>
702
703<h4>Customizing the Profile Selection Keywords</h4>
704
a9252913 705<p>The <tt>MediaType</tt> and <tt>Resolution</tt> keywords can be
706reassigned to different main keywords, allowing drivers to do
707color profile selection based on different parameters. The
708<tt>cupsICCQualifier2</tt> and <tt>cupsICCQualifier3</tt>
ef416fc2 709attributes define the mapping from selector to main keyword:</p>
710
711<pre class='command'>
a9252913 712*cupsICCQualifier2: MainKeyword2
713*cupsICCQualifier3: MainKeyword3
ef416fc2 714</pre>
715
716<p>The default mapping is as follows:</p>
717
718<pre class='command'>
ef416fc2 719*cupsICCQualifier2: MediaType
720*cupsICCQualifier3: Resolution
721</pre>
722
723
ecdc0628 724<h2 class='title'><a name='I18N'>Globalized PPD Support</a></h2>
ef416fc2 725
726<p>CUPS 1.2 and higher adds support for PPD files containing multiple
a4d04587 727languages by following the following additional rules:</p>
ef416fc2 728
729<ol>
730
a4d04587 731 <li>The <tt>LanguageVersion</tt> MUST be <tt>English</tt></li>
732
733 <li>The <tt>LanguageEncoding</tt> MUST be <tt>ISOLatin1</tt></li>
734
735 <li>The <tt>cupsLanguages</tt> attribute MUST be provided and
736 list each of the supported locales in the PPD file</li>
737
738 <li>Main and option keywords MUST NOT exceed 34 (instead of 40)
739 characters to allow room for the locale prefixes in translation
740 attributes</li>
ef416fc2 741
a4d04587 742 <li>The main keyword "Translation" MUST NOT be used</li>
ef416fc2 743
a4d04587 744 <li>Translation strings included with the main and option
745 keywords MUST NOT contain characters outside the ASCII
746 subset of ISOLatin1 and UTF-8; developers wishing to use
747 characters outside ASCII MUST provide a separate set of
748 English localization attributes for the affected keywords.</li>
ef416fc2 749
a4d04587 750 <li>Localizations are specified using a locale prefix of
ef416fc2 751 the form "ll" or "ll_CC." where "ll" is the 2-letter ISO
752 language code and "CC" is the 2-letter ISO country
b94498cf 753 code<ul>
754 <li>A generic language translation ("ll") SHOULD be provided with country-specific differences ("ll_CC") provided only as needed</li>
755 <li>For historical reasons, the "zh" and "zh_CN" locales map to Simplified Chinese while the "zh_TW" locale maps to Traditional Chinese</li>
756 </ul></li>
ef416fc2 757
a4d04587 758 <li>Locale-specific translation strings MUST be encoded
759 using UTF-8.</li>
ef416fc2 760
a4d04587 761 <li>Main keywords MUST be localized using one of the
ef416fc2 762 following forms:
763 <p><tt>*ll.Translation MainKeyword/translation
764 text: ""</tt><br />
765 <tt>*ll_CC.Translation MainKeyword/translation
766 text: ""</tt></p></li>
767
a4d04587 768 <li>Option keywords MUST be localized using one of the
ef416fc2 769 following forms:
770 <p><tt>*ll.MainKeyword OptionKeyword/translation
771 text: ""</tt><br />
772 <tt>*ll_CC.MainKeyword OptionKeyword/translation
773 text: ""</tt></p></li>
774
a4d04587 775 <li>Localization attributes MAY appear anywhere after the
776 first line of the PPD file</li>
777
ef416fc2 778</ol>
779
a4d04587 780<blockquote><b>Note:</b>
781We use a <tt>LanguageEncoding</tt> value of <tt>ISOLatin1</tt>
782and limit the allowed base translation strings to ASCII to avoid
783character coding issues that would otherwise occur. In addition,
784requiring the base translation strings to be in English allows
785for easier fallback translation when no localization is provided
786in the PPD file for a given locale.</blockquote>
ef416fc2 787
a4d04587 788<p>Examples:</p>
ef416fc2 789
790<pre class='command'>
791*LanguageVersion: English
792*LanguageEncoding: ISOLatin1
b94498cf 793*cupsLanguages: "de fr_CA"
ef416fc2 794*ModelName: "Foobar Laser 9999"
795
a4d04587 796<em>*% Localize ModelName for French and German</em>
b94498cf 797*fr_CA.Translation ModelName/La Foobar Laser 9999: ""
798*de.Translation ModelName/Foobar LaserDrucken 9999: ""
ef416fc2 799
4744bd90 800*cupsIPPReason com.vendor-error/A serious error occurred: "/help/com.vendor/error.html"
b423cd4c 801<em>*% Localize printer-state-reason for French and German</em>
b94498cf 802*fr_CA.cupsIPPReason com.vendor-error/Une erreur s&egrave;rieuse s'est produite: "/help/com.vendor/error.html"
803*de.cupsIPPReason com.vendor-error/Eine ernste St&ouml;rung trat: "/help/com.vendor/error.html"
b423cd4c 804
ef416fc2 805...
806
807*OpenUI *InputSlot/Paper Source: PickOne
808*OrderDependency: 10 AnySetup *InputSlot
809*DefaultInputSlot: Auto
a4d04587 810<em>*% Localize InputSlot for French and German</em>
b94498cf 811*fr_CA.Translation InputSlot/Papier source: ""
812*de.Translation InputSlot/Papiereinzug: ""
ef416fc2 813*InputSlot Auto/Default: "&lt;&lt;/ManualFeed false&gt;&gt;setpagedevice"
a4d04587 814<em>*% Localize InputSlot=Auto for French and German</em>
b94498cf 815*fr_CA.InputSlot Auto/Par Defaut: ""
816*de.InputSlot Auto/Standard: ""
ef416fc2 817*InputSlot Manual/Manual Feed: "&lt;&lt;/ManualFeed true&gt;&gt;setpagedevice"
a4d04587 818<em>*% Localize InputSlot=Manual for French and German</em>
b94498cf 819*fr_CA.InputSlot Manual/Manuel mecanisme de alimentation: ""
820*de.InputSlot Manual/Manueller Einzug: ""
ef416fc2 821*CloseUI: *InputSlot
822</pre>
823
824
b86bc4cf 825<h2 class='title'><a name='RASTERPS'>Writing PostScript Option Commands for Raster Drivers</a></h2>
826
827<p>PPD files are used for both PostScript and non-PostScript printers. For CUPS raster drivers, you use a subset of the PostScript language to set page device attributes such as page size, resolution, and so forth. For example, the following code sets the page size to A4 size:</p>
828
829<pre class='command'>
830*PageSize A4: "&lt;&lt;/PageSize[595 842]&gt;&gt;setpagedevice"
831</pre>
832
833<p>Custom options typically use other operators to organize the values into a key/value dictionary for <tt>setpagedevice</tt>. For example, our previous <tt>CustomWatermarkText</tt> option code uses the <tt>roll</tt> operator to move the custom string value into the dictionary for <tt>setpagedevice</tt>:</p>
834
835<pre class='command'>
836*CustomWatermarkText True: "&lt;&lt;/cupsString1 3 -1 roll&gt;&gt;setpagedevice"
837</pre>
838
839<p>For a custom string value of "My Watermark", CUPS will produce the following PostScript code for the option:</p>
840
841<pre class='command'>
842(My Watermark)
843&lt;&lt;/cupsString1 3 -1 roll&gt;&gt;setpagedevice
844</pre>
845
846<p>The code moves the string value ("My Watermark") from the bottom of the stack to the top, creating a dictionary that looks like:</p>
847
848<pre class='command'>
849&lt;&lt;/cupsString1(My Watermark)&gt;&gt;setpagedevice
850</pre>
851
852<p>The resulting dictionary sets the page device attributes that are sent to your raster driver in the page header.</p>
853
09a101d6 854<h3>Custom Page Size Code</h3>
855
856<p>There are many possible implementations of the <tt>CustomPageSize</tt> code. For CUPS raster drivers, the following code is recommended:</p>
857
858<pre class='command'>
859*ParamCustomPageSize Width: 1 points <i>min-width max-width</i>
860*ParamCustomPageSize Height: 2 points <i>min-height max-height</i>
861*ParamCustomPageSize WidthOffset: 3 points 0 0
862*ParamCustomPageSize HeightOffset: 4 points 0 0
863*ParamCustomPageSize Orientation: 5 int 0 0
864*CustomPageSize True: "pop pop pop &lt;&lt;/PageSize[5 -2 roll]/ImagingBBox null&gt;&gt;setpagedevice"
865</pre>
866
b86bc4cf 867<h3>Supported PostScript Operators</h3>
868
869<p>CUPS supports the following PostScript operators in addition to the usual PostScript number, string (literal and hex-encoded), boolean, null, and name values:</p>
870
871<ul>
872
873 <li><tt>&lt;&lt;</tt> - Start a dictionary.</li>
874
875 <li><tt>&gt;&gt;</tt> - End a dictionary.</li>
876
877 <li><tt>[</tt> - Start an array.</li>
878
879 <li><tt>]</tt> - End an array.</li>
880
881 <li><tt>copy</tt> - Copy the top N objects on the stack.</li>
882
883 <li><tt>dup</tt> - Copy the top object on the stack.</li>
884
885 <li><tt>index</tt> - Copy the Nth from the top object on the stack.</li>
886
887 <li><tt>pop</tt> - Pop the top object on the stack.</li>
888
889 <li><tt>roll</tt> - Shift the top N objects on the stack.</li>
890
891 <li><tt>setpagedevice</tt> - Set the page header values according to the key/value dictionary on the stack.</li>
892
893</ul>
894
09a101d6 895<blockquote><b>Note:</b> <em>Never<em> use the unsupported <tt>dict</tt> or <tt>put</tt> operators in your option code. These operators are typically used in option code dating back to Level 1 PostScript printers, which did not support the simpler <tt>&lt;&lt;</tt> or <tt>&gt;&gt;</tt> operators. If you have old option code using <tt>dict</tt> or <tt>put</tt>, you can rewrite it very easily to use the newer <tt>&lt;&lt;</tt> and <tt>&gt;&gt;</tt> operators instead. For example, the following code to set the page size:
896
897<style type='text/css'><!--
898PRE B {
899 background: #000000;
900 color: #ffffff;
901 padding: 2px 5px;
902}
903--></style>
904
905<pre class='command'>
906<b>1 dict dup</b> /PageSize [612 792] <b>put</b> setpagedevice
907</pre>
908
909<p>can be rewritten as:</p>
910
911<pre class='command'>
912<b>&lt;&lt;</b> /PageSize [612 792] <b>&gt;&gt;</b> setpagedevice
913</pre>
914
915</blockquote>
916
b86bc4cf 917<h3>Supported Page Device Attributes</h3>
918
09a101d6 919<p>Table 2 shows the supported page device attributes along with PostScript code examples.</p>
b86bc4cf 920
921<div class='table'>
922<table summary='Supported Page Device Attributes'>
09a101d6 923<caption>Table 2: <a name='TABLE_2'>Supported Page Device Attributes</a></caption>
b86bc4cf 924<thead>
925<tr>
926 <th>Name(s)</th>
927 <th>Type</th>
928 <th>Description</th>
929 <th>Example(s)</th>
930</tr>
931</thead>
932<tbody>
933<tr valign='top'>
934 <td><tt>AdvanceDistance</tt></td>
935 <td>Integer</td>
936 <td>Specifies the number of points to advance roll media after printing.</td>
937 <td><tt>&lt;&lt;/AdvanceDistance 18&gt;&gt;setpagedevice</tt></td>
938</tr>
939<tr valign='top'>
940 <td><tt>AdvanceMedia</tt></td>
941 <td>Integer</td>
942 <td>Specifies when to advance the media: 0 = never, 1 = after the file, 2 = after the job, 3 = after the set, and 4 = after the page.</td>
943 <td><tt>&lt;&lt;/AdvanceMedia 4&gt;&gt;setpagedevice</tt></td>
944</tr>
945<tr valign='top'>
946 <td><tt>Collate</tt></td>
947 <td>Boolean</td>
948 <td>Specifies whether collated copies are required.</td>
949 <td><tt>&lt;&lt;/Collate true&gt;&gt;setpagedevice</tt></td>
950</tr>
951<tr valign='top'>
952 <td><tt>CutMedia</tt></td>
953 <td>Integer</td>
954 <td>Specifies when to cut the media: 0 = never, 1 = after the file, 2 = after the job, 3 = after the set, and 4 = after the page.</td>
955 <td><tt>&lt;&lt;/CutMedia 1&gt;&gt;setpagedevice</tt></td>
956</tr>
957<tr valign='top'>
958 <td><tt>Duplex</tt></td>
959 <td>Boolean</td>
960 <td>Specifies whether 2-sided printing is required.</td>
961 <td><tt>&lt;&lt;/Duplex true&gt;&gt;setpagedevice</tt></td>
962</tr>
963<tr valign='top'>
964 <td><tt>HWResolution</tt></td>
965 <td>Integer Array</td>
966 <td>Specifies the resolution of the page image in pixels per inch.</td>
967 <td><tt>&lt;&lt;/HWResolution[1200 1200]&gt;&gt;setpagedevice</tt></td>
968</tr>
969<tr valign='top'>
970 <td><tt>InsertSheet</tt></td>
971 <td>Boolean</td>
972 <td>Specifies whether to insert a blank sheet before the job.</td>
973 <td><tt>&lt;&lt;/InsertSheet true&gt;&gt;setpagedevice</tt></td>
974</tr>
975<tr valign='top'>
976 <td><tt>Jog</tt></td>
977 <td>Integer</td>
978 <td>Specifies when to shift the media in the output bin: 0 = never, 1 = after the file, 2 = after the job, 3 = after the set, and 4 = after the page.</td>
979 <td><tt>&lt;&lt;/Jog 2&gt;&gt;setpagedevice</tt></td>
980</tr>
981<tr valign='top'>
982 <td><tt>LeadingEdge</tt></td>
983 <td>Integer</td>
984 <td>Specifies the leading edge of the media: 0 = top, 1 = right, 2 = bottom, 3 = left.</td>
985 <td><tt>&lt;&lt;/LeadingEdge 0&gt;&gt;setpagedevice</tt></td>
986</tr>
987<tr valign='top'>
988 <td><tt>ManualFeed</tt></td>
989 <td>Boolean</td>
990 <td>Specifies whether media should be drawn from the manual feed tray. Note: The <tt>MediaPosition</tt> attribute is preferred over the <tt>ManualFeed</tt> attribute.</td>
991 <td><tt>&lt;&lt;/ManualFeed true&gt;&gt;setpagedevice</tt></td>
992</tr>
993<tr valign='top'>
994 <td><tt>MediaClass</tt></td>
995 <td>String</td>
996 <td>Specifies a named media.</td>
997 <td><tt>&lt;&lt;/MediaClass (Invoices)&gt;&gt;setpagedevice</tt></td>
998</tr>
999<tr valign='top'>
1000 <td><tt>MediaColor</tt></td>
1001 <td>String</td>
1002 <td>Specifies the color of the media.</td>
1003 <td><tt>&lt;&lt;/MediaColor &gt;&gt;setpagedevice</tt></td>
1004</tr>
1005<tr valign='top'>
1006 <td><tt>MediaPosition</tt></td>
1007 <td>Integer</td>
1008 <td>Specifies the tray or source of the media.</td>
1009 <td><tt>&lt;&lt;/MediaPosition 12&gt;&gt;setpagedevice</tt></td>
1010</tr>
1011<tr valign='top'>
1012 <td><tt>MediaType</tt></td>
1013 <td>String</td>
1014 <td>Specifies the general media type.</td>
1015 <td><tt>&lt;&lt;/MediaType (Glossy)&gt;&gt;setpagedevice</tt></td>
1016</tr>
1017<tr valign='top'>
1018 <td><tt>MediaWeight</tt></td>
1019 <td>Integer</td>
1020 <td>Specifies the media weight in grams per meter<sup>2</sup>.</td>
1021 <td><tt>&lt;&lt;/MediaWeight 100&gt;&gt;setpagedevice</tt></td>
1022</tr>
1023<tr valign='top'>
1024 <td><tt>MirrorPrint</tt></td>
1025 <td>Boolean</td>
1026 <td>Specifies whether to flip the output image horizontally.</td>
1027 <td><tt>&lt;&lt;/MirrorPrint true&gt;&gt;setpagedevice</tt></td>
1028</tr>
1029<tr valign='top'>
1030 <td><tt>NegativePrint</tt></td>
1031 <td>Boolean</td>
1032 <td>Specifies whether to invert the output image.</td>
1033 <td><tt>&lt;&lt;/NegativePrint true&gt;&gt;setpagedevice</tt></td>
1034</tr>
1035<tr valign='top'>
1036 <td><tt>NumCopies</tt></td>
1037 <td>Integer</td>
1038 <td>Specifies the number of copies to produce of each page.</td>
1039 <td><tt>&lt;&lt;/NumCopies 100&gt;&gt;setpagedevice</tt></td>
1040</tr>
1041<tr valign='top'>
1042 <td><tt>Orientation</tt></td>
1043 <td>Integer</td>
1044 <td>Specifies the orientation of the output: 0 = portrait, 1 = landscape rotated counter-clockwise, 2 = upside-down, 3 = landscape rotated clockwise.</td>
1045 <td><tt>&lt;&lt;/Orientation 3&gt;&gt;setpagedevice</tt></td>
1046</tr>
1047<tr valign='top'>
1048 <td><tt>OutputFaceUp</tt></td>
1049 <td>Boolean</td>
1050 <td>Specifies whether to place the media face-up in the output bin/tray.</td>
1051 <td><tt>&lt;&lt;/OutputFaceUp true&gt;&gt;setpagedevice</tt></td>
1052</tr>
1053<tr valign='top'>
1054 <td><tt>OutputType</tt></td>
1055 <td>String</td>
1056 <td>Specifies the output type name.</td>
1057 <td><tt>&lt;&lt;/OutputType (Photo)&gt;&gt;setpagedevice</tt></td>
1058</tr>
1059<tr valign='top'>
1060 <td><tt>PageSize</tt></td>
1061 <td>Integer/Real Array</td>
1062 <td>Specifies the width and length/height of the page in points.</td>
1063 <td><tt>&lt;&lt;/PageSize[595 842]&gt;&gt;setpagedevice</tt></td>
1064</tr>
1065<tr valign='top'>
1066 <td><tt>Separations</tt></td>
1067 <td>Boolean</td>
1068 <td>Specifies whether to produce color separations.</td>
1069 <td><tt>&lt;&lt;/Separations true&gt;&gt;setpagedevice</tt></td>
1070</tr>
1071<tr valign='top'>
1072 <td><tt>TraySwitch</tt></td>
1073 <td>Boolean</td>
1074 <td>Specifies whether to switch trays automatically.</td>
1075 <td><tt>&lt;&lt;/TraySwitch true&gt;&gt;setpagedevice</tt></td>
1076</tr>
1077<tr valign='top'>
1078 <td><tt>Tumble</tt></td>
1079 <td>Boolean</td>
1080 <td>Specifies whether the back sides of pages are rotated 180 degrees.</td>
1081 <td><tt>&lt;&lt;/Tumble true&gt;&gt;setpagedevice</tt></td>
1082</tr>
1083<tr valign='top'>
1084 <td><tt>cupsBorderlessScalingFactor</tt></td>
1085 <td>Real</td>
1086 <td>Specifies the amount to scale the page image dimensions.</td>
1087 <td><tt>&lt;&lt;/cupsBorderlessScalingFactor 1.01&gt;&gt;setpagedevice</tt></td>
1088</tr>
1089<tr valign='top'>
1090 <td><tt>cupsColorOrder</tt></td>
1091 <td>Integer</td>
1092 <td>Specifies the order of colors: 0 = chunked, 1 = banded, 2 = planar.</td>
1093 <td><tt>&lt;&lt;/cupsColorOrder 0&gt;&gt;setpagedevice</tt></td>
1094</tr>
1095<tr valign='top'>
1096 <td><tt>cupsColorSpace</tt></td>
1097 <td>Integer</td>
1098 <td>Specifies the page image colorspace: 0 = W, 1 = RGB, 2 = RGBA, 3 = K, 4 = CMY, 5 = YMC, 6 = CMYK, 7 = YMCK, 8 = KCMY, 9 = KCMYcm, 10 = GMCK, 11 = GMCS, 12 = White, 13 = Gold, 14 = Silver, 15 = CIE XYZ, 16 = CIE Lab, 17 = RGBW, 32 to 46 = CIE Lab (1 to 15 inks)</td>
1099 <td><tt>&lt;&lt;/cupsColorSpace &gt;&gt;setpagedevice</tt></td>
1100</tr>
1101<tr valign='top'>
1102 <td><tt>cupsCompression</tt></td>
1103 <td>Integer</td>
1104 <td>Specifies a driver compression type/mode.</td>
1105 <td><tt>&lt;&lt;/cupsCompression 2&gt;&gt;setpagedevice</tt></td>
1106</tr>
1107<tr valign='top'>
1108 <td><tt>cupsInteger0<br>
1109 ...<br>
1110 cupsInteger15</tt></td>
1111 <td>Integer</td>
1112 <td>Specifies driver integer values.</td>
1113 <td><tt>&lt;&lt;/cupsInteger11 1234&gt;&gt;setpagedevice</tt></td>
1114</tr>
1115<tr valign='top'>
1116 <td><tt>cupsMarkerType</tt></td>
1117 <td>String</td>
1118 <td>Specifies the type of ink/toner to use.</td>
1119 <td><tt>&lt;&lt;/cupsMarkerType (Black+Color)&gt;&gt;setpagedevice</tt></td>
1120</tr>
1121<tr valign='top'>
1122 <td><tt>cupsMediaType</tt></td>
1123 <td>Integer</td>
1124 <td>Specifies a numeric media type.</td>
1125 <td><tt>&lt;&lt;/cupsMediaType 999&gt;&gt;setpagedevice</tt></td>
1126</tr>
1127<tr valign='top'>
1128 <td><tt>cupsPageSizeName</tt></td>
1129 <td>String</td>
1130 <td>Specifies the name of the page size.</td>
1131 <td><tt>&lt;&lt;/cupsPageSizeName (A4.Full)&gt;&gt;setpagedevice</tt></td>
1132</tr>
1133<tr valign='top'>
1134 <td><tt>cupsPreferredBitsPerColor</tt></td>
1135 <td>Integer</td>
1136 <td>Specifies the preferred number of bits per color, typically 8 or 16.</td>
1137 <td><tt>&lt;&lt;/cupsPreferredBitsPerColor 16&gt;&gt;setpagedevice</tt></td>
1138</tr>
1139<tr valign='top'>
1140 <td><tt>cupsReal0<br>
1141 ...<br>
1142 cupsReal15</tt></td>
1143 <td>Real</td>
1144 <td>Specifies driver real number values.</td>
1145 <td><tt>&lt;&lt;/cupsReal15 1.234&gt;&gt;setpagedevice</tt></td>
1146</tr>
1147<tr valign='top'>
1148 <td><tt>cupsRenderingIntent</tt></td>
1149 <td>String</td>
1150 <td>Specifies the color rendering intent.</td>
1151 <td><tt>&lt;&lt;/cupsRenderingIntent (AbsoluteColorimetric)&gt;&gt;setpagedevice</tt></td>
1152</tr>
1153<tr valign='top'>
1154 <td><tt>cupsRowCount</tt></td>
1155 <td>Integer</td>
1156 <td>Specifies the number of rows of raster data to print on each line for some drivers.</td>
1157 <td><tt>&lt;&lt;/cupsRowCount 24&gt;&gt;setpagedevice</tt></td>
1158</tr>
1159<tr valign='top'>
1160 <td><tt>cupsRowFeed</tt></td>
1161 <td>Integer</td>
1162 <td>Specifies the number of rows to feed between passes for some drivers.</td>
1163 <td><tt>&lt;&lt;/cupsRowFeed 17&gt;&gt;setpagedevice</tt></td>
1164</tr>
1165<tr valign='top'>
1166 <td><tt>cupsRowStep</tt></td>
1167 <td>Integer</td>
1168 <td>Specifies the number of lines between columns/rows on the print head for some drivers.</td>
1169 <td><tt>&lt;&lt;/cupsRowStep 2&gt;&gt;setpagedevice</tt></td>
1170</tr>
1171<tr valign='top'>
1172 <td><tt>cupsString0<br>
1173 ...<br>
1174 cupsString15</tt></td>
1175 <td>String</td>
1176 <td>Specifies driver string values.</td>
1177 <td><tt>&lt;&lt;/cupsString0(String Value)&gt;&gt;setpagedevice</tt></td>
1178</tr>
1179</tbody>
1180</table></div>
1181
1182
ef416fc2 1183<h2 class='title'><a name='HISTORY'>Change History</a></h2>
1184
f7deaa1a 1185<h3>Changes in CUPS 1.3</h3>
1186
1187<ul>
1188
bc44d920 1189 <li>Added <tt>cupsBackSide</tt> and deprecated <tt>cupsFlipDuplex</tt>.</li>
1190
1191 <li>Added text URI information to <tt>cupsIPPReason</tt> documentation.</li>
1192
09a101d6 1193 <li>Added <tt>APPrinterPreset</tt>, <tt>cupsIPPFinishings</tt>, and <tt>cupsPreFilter</tt> attributes.</li>
1194
1195 <li>Added discussion of custom option code, sample <tt>CustomPageSize</tt> code, and "do not use dict and put" note.</li>
f7deaa1a 1196
1197</ul>
1198
b86bc4cf 1199<h3>Changes in CUPS 1.2.8</h3>
1200
1201<ul>
1202
1203 <li>Added section on supported PostScript commands for raster
1204 drivers</li>
1205
1206</ul>
1207
ef416fc2 1208<h3>Changes in CUPS 1.2</h3>
1209
1210<ul>
1211
ecdc0628 1212 <li>Added globalization support attributes</li>
ef416fc2 1213
1214 <li>Added custom option values support</li>
1215
4744bd90 1216 <li>Added <tt>APBookFile</tt> attribute</li>
1217
a4d04587 1218 <li>Added <tt>APDuplexRequiresFlippedMargin</tt> attribute</li>
1219
ef416fc2 1220 <li>Added <tt>cupsICCProfile</tt> attribute</li>
1221
4744bd90 1222 <li>Added <tt>cupsIPPReason</tt> attribute</li>
1223
a4d04587 1224 <li>Added <tt>cupsLanguages</tt> attribute</li>
1225
ef416fc2 1226 <li>Added <tt>cupsPortMonitor</tt> attribute</li>
1227
1228 <li>Removed <tt>cupsProtocol</tt> attribute</li>
1229
1230</ul>
1231
1232<h3>Changes in CUPS 1.1</h3>
1233
1234<ul>
1235
1236 <li>Added <tt>cupsFlipDuplex</tt> attribute</li>
1237
1238 <li>Added <tt>cupsProtocol</tt> attribute</li>
1239
1240</ul>
1241
1242</body>
1243</html>