]> git.ipfire.org Git - thirdparty/cups.git/blob - doc/help/spec-ppd.html
58c50f7cc95044fe14b1d59e410c1c927d37c020
[thirdparty/cups.git] / doc / help / spec-ppd.html
1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
2 <html>
3 <!-- SECTION: Specifications -->
4 <head>
5 <title>CUPS PPD Extensions </title>
6 <meta name="keywords" content="Specifications">
7 <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
8 <meta name="creator" content="Mini-XML v2.7">
9 <style type="text/css"><!--
10 BODY {
11 font-family: lucida grande, geneva, helvetica, arial, sans-serif;
12 }
13
14 H1, H2, H3, H4, H5, H6, P, TD, TH {
15 font-family: lucida grande, geneva, helvetica, arial, sans-serif;
16 }
17
18 KBD {
19 font-family: monaco, courier, monospace;
20 font-weight: bold;
21 }
22
23 PRE {
24 font-family: monaco, courier, monospace;
25 }
26
27 PRE.command {
28 border: dotted thin #7f7f7f;
29 margin-left: 36pt;
30 padding: 10px;
31 }
32
33 P.compact {
34 margin: 0;
35 }
36
37 P.example {
38 font-style: italic;
39 margin-left: 36pt;
40 }
41
42 DL.man DD {
43 margin-left: 5em;
44 }
45
46 DL.man DT {
47 margin-left: 0;
48 }
49
50 PRE.man {
51 margin: 0;
52 }
53
54 PRE.example {
55 background: #eeeeee;
56 border: dotted thin #999999;
57 margin-left: 36pt;
58 padding: 10pt;
59 }
60
61 PRE.command EM, PRE.example EM {
62 font-family: lucida grande, geneva, helvetica, arial, sans-serif;
63 }
64
65 P.command {
66 font-family: monaco, courier, monospace;
67 margin-left: 36pt;
68 }
69
70 P.formula {
71 font-style: italic;
72 margin-left: 36pt;
73 }
74
75 BLOCKQUOTE {
76 background: #eeeeee;
77 border: solid thin #999999;
78 padding: 10pt;
79 }
80
81 A IMG {
82 border: none;
83 }
84
85 A:link:hover IMG {
86 background: #f0f0f0;
87 border-radius: 10px;
88 -moz-border-radius: 10px;
89 }
90
91 A:link, A:visited {
92 font-weight: inherit;
93 text-decoration: none;
94 }
95
96 A:link:hover, A:visited:hover, A:active {
97 text-decoration: underline;
98 }
99
100 SUB, SUP {
101 font-size: 50%;
102 }
103
104 TR.data, TD.data, TR.data TD {
105 margin-top: 10pt;
106 padding: 5pt;
107 border-bottom: solid 1pt #999999;
108 }
109
110 TR.data TH {
111 border-bottom: solid 1pt #999999;
112 padding-top: 10pt;
113 padding-left: 5pt;
114 text-align: left;
115 }
116
117 DIV.table TABLE {
118 border: solid thin #999999;
119 border-collapse: collapse;
120 border-spacing: 0;
121 margin-left: auto;
122 margin-right: auto;
123 }
124
125 DIV.table CAPTION {
126 caption-side: top;
127 font-size: 120%;
128 font-style: italic;
129 font-weight: bold;
130 margin-left: auto;
131 margin-right: auto;
132 }
133
134 DIV.table TABLE TD {
135 border: solid thin #cccccc;
136 padding-top: 5pt;
137 }
138
139 DIV.table TABLE TH {
140 background: #cccccc;
141 border: none;
142 border-bottom: solid thin #999999;
143 }
144
145 DIV.figure TABLE {
146 margin-left: auto;
147 margin-right: auto;
148 }
149
150 DIV.figure CAPTION {
151 caption-side: bottom;
152 font-size: 120%;
153 font-style: italic;
154 font-weight: bold;
155 margin-left: auto;
156 margin-right: auto;
157 }
158
159 TH.label {
160 text-align: right;
161 vertical-align: top;
162 }
163
164 TH.sublabel {
165 text-align: right;
166 font-weight: normal;
167 }
168
169 HR {
170 border: solid thin;
171 }
172
173 SPAN.info {
174 background: black;
175 border: thin solid black;
176 color: white;
177 font-size: 80%;
178 font-style: italic;
179 font-weight: bold;
180 white-space: nowrap;
181 }
182
183 H2 SPAN.info, H3 SPAN.info, H4 SPAN.info {
184 float: right;
185 font-size: 100%;
186 }
187
188 H1.title {
189 }
190
191 H2.title, H3.title {
192 border-bottom: solid 2pt #000000;
193 }
194
195 DIV.indent, TABLE.indent {
196 margin-top: 2em;
197 margin-left: auto;
198 margin-right: auto;
199 width: 90%;
200 }
201
202 TABLE.indent {
203 border-collapse: collapse;
204 }
205
206 TABLE.indent TD, TABLE.indent TH {
207 padding: 0;
208 }
209
210 TABLE.list {
211 border-collapse: collapse;
212 margin-left: auto;
213 margin-right: auto;
214 width: 90%;
215 }
216
217 TABLE.list TH {
218 background: white;
219 border-bottom: solid thin #cccccc;
220 color: #444444;
221 padding-top: 10pt;
222 padding-left: 5pt;
223 text-align: left;
224 vertical-align: bottom;
225 white-space: nowrap;
226 }
227
228 TABLE.list TH A {
229 color: #4444cc;
230 }
231
232 TABLE.list TD {
233 border-bottom: solid thin #eeeeee;
234 padding-top: 5pt;
235 padding-left: 5pt;
236 }
237
238 TABLE.list TR:nth-child(even) {
239 background: #f8f8f8;
240 }
241
242 TABLE.list TR:nth-child(odd) {
243 background: #f4f4f4;
244 }
245
246 DT {
247 margin-left: 36pt;
248 margin-top: 12pt;
249 }
250
251 DD {
252 margin-left: 54pt;
253 }
254
255 DL.category DT {
256 font-weight: bold;
257 }
258
259 P.summary {
260 margin-left: 36pt;
261 font-family: monaco, courier, monospace;
262 }
263
264 DIV.summary TABLE {
265 border: solid thin #999999;
266 border-collapse: collapse;
267 border-spacing: 0;
268 margin: 10px;
269 }
270
271 DIV.summary TABLE TD, DIV.summary TABLE TH {
272 border: solid thin #999999;
273 padding: 5px;
274 text-align: left;
275 vertical-align: top;
276 }
277
278 DIV.summary TABLE THEAD TH {
279 background: #eeeeee;
280 }
281
282 /* API documentation styles... */
283 div.body h1 {
284 margin: 0;
285 }
286 div.body h2 {
287 margin-top: 1.5em;
288 }
289 div.body h3, div.body h4, div.body h5 {
290 margin-bottom: 0.5em;
291 margin-top: 1.5em;
292 }
293 .class, .enumeration, .function, .struct, .typedef, .union {
294 border-bottom: solid thin #999999;
295 margin-bottom: 0;
296 margin-top: 2em;
297 }
298 .description {
299 margin-top: 0.5em;
300 }
301 code, p.code, pre, ul.code li {
302 font-family: monaco, courier, monospace;
303 font-size: 90%;
304 }
305 ul.code, ul.contents, ul.subcontents {
306 list-style-type: none;
307 margin: 0;
308 padding-left: 0;
309 }
310 ul.code li {
311 margin: 0;
312 }
313 ul.contents > li {
314 margin-top: 1em;
315 }
316 ul.contents li ul.code, ul.contents li ul.subcontents {
317 padding-left: 2em;
318 }
319 div.body dl {
320 margin-left: 0;
321 margin-top: 0;
322 }
323 div.body dt {
324 font-style: italic;
325 margin-left: 0;
326 margin-top: 0;
327 }
328 div.body dd {
329 margin-bottom: 0.5em;
330 }
331
332 /* This is just for the HTML files generated with the framedhelp target */
333 div.contents {
334 background: #e8e8e8;
335 border: solid thin black;
336 padding: 10px;
337 }
338 div.contents h1 {
339 font-size: 110%;
340 }
341 div.contents h2 {
342 font-size: 100%;
343 }
344 div.contents ul.contents {
345 font-size: 80%;
346 }
347 div.contents ul.subcontents li {
348 margin-left: 1em;
349 text-indent: -1em;
350 }
351 --></style>
352 </head>
353 <body>
354 <div class='body'>
355 <!--
356 "$Id$"
357
358 PPD extension documentation for CUPS.
359
360 Copyright 2007-2011 by Apple Inc.
361 Copyright 1997-2007 by Easy Software Products.
362
363 These coded instructions, statements, and computer programs are the
364 property of Apple Inc. and are protected by Federal copyright
365 law. Distribution and use rights are outlined in the file "LICENSE.txt"
366 which should have been included with this file. If this file is
367 file is missing or damaged, see the license at "http://www.cups.org/".
368 -->
369
370 <H1 CLASS="title">CUPS PPD Extensions</H1>
371
372 <p>This specification describes the attributes and extensions that CUPS adds to <a href="http://partners.adobe.com/public/developer/en/ps/5003.PPD_Spec_v4.3.pdf" target="_blank">Adobe TechNote #5003: PostScript Printer Description File Format Specification Version 4.3</a>. PostScript Printer Description ("PPD") files describe the capabilities of each printer and are used by CUPS to support printer-specific features and intelligent filtering.</p>
373
374 <div class='summary'><table summary='General Information'>
375 <tbody>
376 <tr>
377 <th>See Also</th>
378 <td>Programming: <a href='postscript-driver.html'>Developing PostScript Printer Drivers</a><br>
379 Programming: <a href='raster-driver.html'>Developing Raster Printer Drivers</a><br>
380 Programming: <a href='api-filter.html'>Filter and Backend Programming</a><br>
381 Programming: <a href='ppd-compiler.html'>Introduction to the PPD Compiler</a><br>
382 Programming: <a href='api-raster.html'>Raster API</a><br>
383 References: <a href='ref-ppdcfile.html'>PPD Compiler Driver Information File Reference</a></td>
384 </tr>
385 </tbody>
386 </table></div>
387 <h2 class="title">Contents</h2>
388 <ul class="contents">
389 <li><a href="#SYNTAX">PPD File Syntax</a></li>
390 <li><a href="#AUTOCONFIG">Auto-Configuration</a><ul class="subcontents">
391 <li><a href="#APAutoSetupTool">APAutoSetupTool</a></li>
392 <li><a href="#QUERYKEYWORD">?MainKeyword</a></li>
393 <li><a href="#OID">OIDMainKeyword</a></li>
394 </ul></li>
395 <li><a href="#PROFILES">Color Profiles</a><ul class="subcontents">
396 <li><a href="#cupsColorProfile">cupsColorProfile</a></li>
397 <li><a href="#cupsICCProfile">cupsICCProfile</a></li>
398 <li><a href="#APCustom">Custom Color Matching Support</a></li>
399 </ul></li>
400 <li><a href="#CONSTRAINTS">Constraints</a><ul class="subcontents">
401 <li><a href="#cupsUIConstraints">cupsUIConstraints</a></li>
402 <li><a href="#cupsUIResolver">cupsUIResolver</a></li>
403 </ul></li>
404 <li><a href="#I18N">Globalized PPD Support</a></li>
405 <li><a href="#OPTIONS">CUPS 1.3/OS X 10.6Custom Options</a></li>
406 <li><a href="#RASTERPS">Writing PostScript Option Commands for Raster Drivers</a></li>
407 <li><a href="#MEDIA">Media Keywords</a><ul class="subcontents">
408 <li><a href="#cupsMediaQualifier2">cupsMediaQualifier2</a></li>
409 <li><a href="#cupsMediaQualifier3">cupsMediaQualifier3</a></li>
410 <li><a href="#cupsMinSize">cupsMinSize</a></li>
411 <li><a href="#cupsMaxSize">cupsMaxSize</a></li>
412 <li><a href="#cupsPageSizeCategory">cupsPageSizeCategory</a></li>
413 </ul></li>
414 <li><a href="#ATTRIBUTES">General Attributes</a><ul class="subcontents">
415 <li><a href="#cupsBackSide">cupsBackSide</a></li>
416 <li><a href="#cupsCommands">cupsCommands</a></li>
417 <li><a href="#cupsEvenDuplex">cupsEvenDuplex</a></li>
418 <li><a href="#cupsFax">cupsFax</a></li>
419 <li><a href="#cupsFilter">cupsFilter</a></li>
420 <li><a href="#cupsFilter2">cupsFilter2</a></li>
421 <li><a href="#cupsFlipDuplex">cupsFlipDuplex</a></li>
422 <li><a href="#cupsIPPFinishings">cupsIPPFinishings</a></li>
423 <li><a href="#cupsIPPReason">cupsIPPReason</a></li>
424 <li><a href="#cupsIPPSupplies">cupsIPPSupplies</a></li>
425 <li><a href="#cupsJobAccountId">cupsJobAccountId</a></li>
426 <li><a href="#cupsJobAccountingUserId">cupsJobAccountingUserId</a></li>
427 <li><a href="#cupsJobPassword">cupsJobPassword</a></li>
428 <li><a href="#cupsLanguages">cupsLanguages</a></li>
429 <li><a href="#cupsMandatory">cupsMandatory</a></li>
430 <li><a href="#cupsManualCopies">cupsManualCopies</a></li>
431 <li><a href="#cupsMarkerName">cupsMarkerName</a></li>
432 <li><a href="#cupsMarkerNotice">cupsMarkerNotice</a></li>
433 <li><a href="#cupsMaxCopies">cupsMaxCopies</a></li>
434 <li><a href="#cupsModelNumber">cupsModelNumber</a></li>
435 <li><a href="#cupsPJLCharset">cupsPJLCharset</a></li>
436 <li><a href="#cupsPJLDisplay">cupsPJLDisplay</a></li>
437 <li><a href="#cupsPortMonitor">cupsPortMonitor</a></li>
438 <li><a href="#cupsPreFilter">cupsPreFilter</a></li>
439 <li><a href="#cupsPrintQuality">cupsPrintQuality</a></li>
440 <li><a href="#cupsSingleFile">cupsSingleFile</a></li>
441 <li><a href="#cupsSNMPSupplies">cupsSNMPSupplies</a></li>
442 <li><a href="#cupsVersion">cupsVersion</a></li>
443 <li><a href="#JCLToPDFInterpreter">JCLToPDFInterpreter</a></li>
444 </ul></li>
445 <li><a href="#MACOSX">OS X Attributes</a><ul class="subcontents">
446 <li><a href="#APDialogExtension">APDialogExtension</a></li>
447 <li><a href="#APDuplexRequiresFlippedMargin">APDuplexRequiresFlippedMargin</a></li>
448 <li><a href="#APHelpBook">APHelpBook</a></li>
449 <li><a href="#APICADriver">APICADriver</a></li>
450 <li><a href="#APPrinterIconPath">APPrinterIconPath</a></li>
451 <li><a href="#APPrinterLowInkTool">APPrinterLowInkTool</a></li>
452 <li><a href="#APPrinterPreset">APPrinterPreset</a></li>
453 <li><a href="#APPrinterUtilityPath">APPrinterUtilityPath</a></li>
454 <li><a href="#APScannerOnly">APScannerOnly</a></li>
455 <li><a href="#APScanAppBundleID">APScanAppBundleID</a></li>
456 </ul></li>
457 <li><a href="#HISTORY">Change History</a></li>
458 </ul>
459 <h2 class='title'><a name='SYNTAX'>PPD File Syntax</a></h2>
460
461 <p>The PPD format is text-based and uses lines of up to 255 characters terminated by a carriage return, linefeed, or combination of carriage return and line feed. The following ABNF definition [<a href="http://tools.ietf.org/html/rfc5234" target="_blank">RFC5234</a>] defines the general format of lines in a PPD file:</p>
462
463 <pre class='command'>
464 PPD-FILE = HEADER +(DATA / COMMENT / LINE-END)
465
466 HEADER = "*PPD-Adobe:" *WSP DQUOTE VERSION DQUOTE LINE-END
467
468 VERSION = "4.0" / "4.1" / "4.2" / "4.3"
469
470 COMMENT = "*%" *TCHAR LINE-END
471
472 DATA = "*" 1*KCHAR [ WSP 1*KCHAR [ "/" 1*TCHAR ] ] ":"
473 1*(*WSP VALUE) LINE-END
474
475 VALUE = 1*TCHAR / DQUOTE 1*SCHAR DQUOTE
476
477 KCHAR = ALPHA / DIGIT / "_" / "." / "-"
478
479 SCHAR = LINE-END / WSP / %x21.23-7E.A0-FF
480
481 TCHAR = %x20-7E.A0-FF
482
483 LINE-END = CR / LF / CR LF
484 </pre>
485
486
487 <h2 class='title'><a name='AUTOCONFIG'>Auto-Configuration</a></h2>
488
489 <p>CUPS supports several methods of auto-configuration via PPD keywords.</p>
490
491 <h3><span class='info'>OS X 10.5</span><a name='APAutoSetupTool'>APAutoSetupTool</a></h3>
492
493 <p class='summary'>*APAutoSetupTool: "/LibraryPrinters/vendor/filename"</p>
494
495 <p>This OS X keyword defines a program that sets the default option choices. It is run when a printer is added from the <var>Add Printer</var> window or the <var>Nearby Printers</var> list in the <var>Print</var> dialog.</p>
496
497 <p>The program is provided with two arguments: the printer's device URI and the PPD file to be used for the printer. The program must write an updated PPD file to stdout.</p>
498
499 <p>Examples:</p>
500
501 <pre class='command'>
502 *% Use our setup tool when adding a printer
503 *APAutoSetupTool: "/Library/Printers/vendor/Tools/autosetuptool"
504 </pre>
505
506 <h3><span class='info'>OS X 10.2/CUPS 1.4</span><a name='QUERYKEYWORD'>?MainKeyword</a></h3>
507
508 <p class='summary'>*?<i>MainKeyword</i>: "<br>
509 PostScript query code that writes a message using the = operator...<br>
510 "<br>
511 *End</p>
512
513 <p>The <tt>?<i>MainKeyword</i></tt> keyword defines PostScript code that determines the currently selected/enabled option keyword (choice) for the main keyword (option). It is typically used when communicating with USB, serial, Appletalk, and AppSocket (port 9100) printers.</p>
514
515 <p>The PostScript code typically sends its response back using the <tt>=</tt> operator.</p>
516
517 <p>Example:</p>
518
519 <pre class='command'>
520 *OpenUI OptionDuplex/Duplexer Installed: Boolean
521 *DuplexOptionDuplex: False
522 *OptionDuplex False/Not Installed: ""
523 *OptionDuplex True/Installed: ""
524
525 <em>*% Query the printer for the presence of the duplexer option...</em>
526 *?OptionDuplex: "
527 currentpagedevice /Duplex known
528 {(True)} {(False)} ifelse
529 = flush
530 "
531 *End
532 *CloseUI: OptionDuplex
533 </pre>
534
535 <h3><span class='info'>OS X 10.4/CUPS 1.5</span><a name='OID'>OIDMainKeyword</a></h3>
536
537 <p class='summary'>*?OID<i>MainKeyword</i>: ".n.n.n..."<br>
538 *OID<i>MainKeyword</i> <i>OptionKeyword1</i>: "value"<br>
539 ...<br>
540 *OID<i>MainKeyword</i> <i>OptionKeywordN</i>: "value"</p>
541
542 <p>The <tt>OID<i>MainKeyword</i></tt> keyword is used to define SNMP OIDs that map to installable options. The first (query) line defines the OID to lookup on the network device. The second and subsequent keywords define a mapping from OID value to option keyword. Since SNMP is an IP-based network protocol, this method is typically only used to configure AppSocket, IPP, and LPD network printers.</p>
543
544 <p>Examples:</p>
545
546 <pre class='command'>
547 *% Get the installed memory on the printer...
548 *?OIDInstalledMemory: ".1.3.6.1.2.1.25.2.2.0"
549 *OIDInstalledMemory 16MB: "16384 KBytes"
550 *OIDInstalledMemory 32MB: "32768 KBytes"
551 *OIDInstalledMemory 48MB: "49152 KBytes"
552 *OIDInstalledMemory 72MB: "73728 KBytes"
553 </pre>
554
555
556 <h2 class='title'><a name='PROFILES'>Color Profiles</a></h2>
557
558 <p>CUPS supports three types of color profiles. The first type is based on sRGB and is used by the standard CUPS raster filters and GPL Ghostscript. The second type is based on ICC profiles and is used by the Quartz-based filters on MacOS X. The final type is based on well-known colorspaces such as sRGB and Adobe RGB.</p>
559
560 <blockquote><b>Note:</b>
561
562 <p>At this time, none of the CUPS raster filters support ICC profiles. This will be addressed as time and resources permit.</p>
563
564 </blockquote>
565
566 <h3><span class='info'>Deprecated</span><a name='cupsColorProfile'>cupsColorProfile</a></h3>
567
568 <p class='summary'>*cupsColorProfile Resolution/MediaType: "density gamma m00 m01 m02 m10 m11 m12 m20 m21 m22"</p>
569
570 <p>This string keyword specifies an sRGB-based color profile consisting of gamma and density controls and a 3x3 CMY color transform matrix. <em>This keyword is not supported on OS X.</em></p>
571
572 <p>The <i>Resolution</i> and <i>MediaType</i> values may be "-" to act as a wildcard. Otherwise they must match one of the <tt>Resolution</tt> or <tt>MediaType</tt> option keywords defined in the PPD file.</p>
573
574 <p>The <i>density</i> and <i>gamma</i> values define gamma and
575 density adjustment function such that:</p>
576
577 <pre class='command'>
578 f(x) = density * x <sup style='font-size: 100%'>gamma</sup>
579 </pre>
580
581 <p>The <i>m00</i> through <i>m22</i> values define a 3x3 transformation matrix for the CMY color values. The density function is applied <i>after</i> the CMY transformation:</p>
582
583 <pre class='command'>
584 | m00 m01 m02 |
585 | m10 m11 m12 |
586 | m20 m21 m22 |
587 </pre>
588
589 <p>Examples:</p>
590
591 <pre class='command'>
592 <em>*% Specify a profile for printing at 360dpi on all media types</em>
593 *cupsColorProfile 360dpi/-: "1.0 1.5 1.0 0.0 -0.2 -0.4 1.0 0.0 -0.2 0.0 1.0"
594
595 <em>*% Specify a profile for printing at 720dpi on Glossy media</em>
596 *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"
597
598 <em>*% Specify a default profile for printing at all other resolutions and media types</em>
599 *cupsColorProfile -/-: "0.9 2.0 1.0 0.0 -0.2 -0.4 1.0 0.0 -0.2 0.0 1.0"
600 </pre>
601
602
603 <h3><span class='info'>OS X 10.3/CUPS 1.2</span><a name='cupsICCProfile'>cupsICCProfile</a></h3>
604
605 <p class='summary'>*cupsICCProfile ColorModel.MediaType.Resolution/Description: "filename"</p>
606
607 <p>This keyword specifies an ICC color profile that is used to convert the document colors to the device colorspace. The <tt>ColorModel</tt>, <tt>MediaType</tt>, and <tt>Resolution</tt> option keywords specify a selector for color profiles. If omitted, the color profile will match any option keyword for the corresponding main keyword.</p>
608
609 <p>The <tt>Description</tt> specifies human-readable text that is associated with the color profile. The <tt>filename</tt> portion specifies the ICC color profile to use; if the filename is not absolute, it is loaded relative to the <var>/usr/share/cups/profiles</var> directory.</p>
610
611 <p>Examples:</p>
612
613 <pre class='command'>
614 <em>*% Specify a profile for CMYK printing at 360dpi on all media types</em>
615 *cupsICCProfile CMYK..360dpi/360dpi CMYK: "/Library/Printers/vendor/Profiles/foo-360-cmyk.icc"
616
617 <em>*% Specify a profile for RGB printing at 720dpi on Glossy media</em>
618 *cupsColorProfile RGB.Glossy.720dpi/720dpi Glossy: "/Library/Printers/vendor/Profiles/foo-720-glossy-rgb.icc"
619
620 <em>*% Specify a default profile for printing at all other resolutions and media types</em>
621 *cupsICCProfile ../Default: "/Library/Printers/vendor/Profiles/foo-default.icc"
622 </pre>
623
624 <h4>Customizing the Profile Selection Keywords</h4>
625
626 <p>The <tt>ColorModel</tt>, <tt>MediaType</tt>, and <tt>Resolution</tt> main keywords can be reassigned to different main keywords, allowing drivers to do color profile selection based on different parameters. The <tt>cupsICCQualifier1</tt>, <tt>cupsICCQualifier2</tt>, and <tt>cupsICCQualifier3</tt> keywords define the mapping from selector to main keyword:</p>
627
628 <pre class='command'>
629 *cupsICCQualifier1: MainKeyword1
630 *cupsICCQualifier2: MainKeyword2
631 *cupsICCQualifier3: MainKeyword3
632 </pre>
633
634 <p>The default mapping is as follows:</p>
635
636 <pre class='command'>
637 *cupsICCQualifier1: ColorModel
638 *cupsICCQualifier2: MediaType
639 *cupsICCQualifier3: Resolution
640 </pre>
641
642 <h3><span class='info'>OS X 10.4</span><a name='APCustom'>Custom Color Matching Support</a></h3>
643
644 <p class='summary'>*<a href='#APSupportsCustomColorMatching'>APSupportsCustomColorMatching</a>: true<br>
645 *<a href='#APCustomColorMatchingName'>APCustomColorMatchingName</a> name/text: ""<br>
646 *<a href='#APCustomColorMatchingProfile'>APCustomColorMatchingProfile</a>: profile<br>
647 *<a href='#APDefaultCustomColorMatchingProfile'>APDefaultCustomColorMatchingProfile</a>: profile</p>
648
649 <p>These keywords tell the OS X raster filters that the printer driver provides its own custom color matching and that generic color profiles should be used when generating 1-, 3-, and 4-component raster data as requested by the driver. The <tt>APCustomColorMatchingProfile</tt> and <tt>APDefaultColorMatchingProfile</tt> keywords specify alternate color profiles (sRGB or AdobeRGB) to use for 3-color (RGB) raster data.</p>
650
651 <blockquote><b>Note:</b>
652
653 <p>Prior to OS X 10.6, the default RGB color space was Apple's "GenericRGB". The new default in OS X 10.6 and later is "sRGB". For more information, see <a href="http://support.apple.com/kb/HT3712">"OS X v10.6: About gamma 2.2"</a> on Apple's support site.</p>
654
655 </blockquote>
656
657 <h4><span class='info'>OS X 10.5</span><a name='APCustomColorMatchingName'>APCustomColorMatchingName</a></h4>
658
659 <p class='summary'>*APCustomColorMatchingName name/text: ""</p>
660
661 <p>This keyword defines an alternate name for the color matching provided by a driver in the <var>Color Matching</var> print panel. The default is to use the name "Vendor Matching" or its localized equivalent.</p>
662
663 <p>Examples:</p>
664
665 <pre class='command'>
666 *% Define the names for our color matching...
667 *APCustomColorMatchingName name/AcmeColor(tm): ""
668 *fr.APCustomColorMatchingName name/La AcmeColor(tm): ""
669 </pre>
670
671 <h4><span class='info'>OS X 10.5</span><a name='APCustomColorMatchingProfile'>APCustomColorMatchingProfile</a></h4>
672
673 <p class='summary'>*APCustomColorMatchingProfile: name</p>
674
675 <p>This keyword defines a supported RGB color profile that can be used when doing custom color matching. Currently only <tt>sRGB</tt>, <tt>AdobeRGB</tt>, and <tt>GenericRGB</tt> are supported. If not specified, RGB data will use the GenericRGB colorspace.</p>
676
677 <blockquote><b>Note:</b>
678
679 <p>If you provide multiple <tt>APCustomColorMatchingProfile</tt> keywords, you are responsible for providing the necessary user interface controls to select the profile in a <a href='#APDialogExtension'>print dialog pane</a>. Add the named profile to the print settings using the key <tt>kPMCustomColorMatchingProfileKey</tt>.</p>
680
681 </blockquote>
682
683 <p>Examples:</p>
684
685 <pre class='command'>
686 *% Use sRGB for RGB color by default, but support both sRGB and AdobeRGB
687 *APSupportsCustomColorMatching: true
688 *APDefaultCustomColorMatchingProfile: sRGB
689 *APCustomColorMatchingProfile: sRGB
690 *APCustomColorMatchingProfile: AdobeRGB
691 </pre>
692
693 <h4><span class='info'>OS X 10.5</span><a name='APDefaultCustomColorMatchingProfile'>APDefaultCustomColorMatchingProfile</a></h4>
694
695 <p class='summary'>*APDefaultCustomColorMatchingProfile: name</p>
696
697 <p>This keyword defines the default RGB color profile that will be used when doing custom color matching. Currently only <tt>sRGB</tt>, <tt>AdobeRGB</tt>, and <tt>GenericRGB</tt> are supported.</p>
698
699 <p>Examples:</p>
700
701 <pre class='command'>
702 *% Use sRGB for RGB color by default
703 *APSupportsCustomColorMatching: true
704 *APDefaultCustomColorMatchingProfile: sRGB
705 </pre>
706
707 <h4><span class='info'>OS X 10.4</span><a name='APSupportsCustomColorMatching'>APSupportsCustomColorMatching</a></h4>
708
709 <p class='summary'>*APSupportsCustomColorMatching: boolean</p>
710
711 <p>This keyword specifies that the driver provides its own custom color matching. When <tt>true</tt>, the default hand-off colorspace will be GenericGray, GenericRGB, or GenericCMYK depending on the number of components the driver requests. The <a href='#APDefaultCustomColorMatchingProfile'><tt>APDefaultCustomColorMatchingProfile</tt></a> keyword can be used to override the default 3-component (RGB) colorspace.</p>
712
713 <p>The default for <tt>APSupportsCustomColorMatching</tt> is <tt>false</tt>.</p>
714
715 <p>Examples:</p>
716
717 <pre class='command'>
718 *APSupportsCustomColorMatching: true
719 *APDefaultCustomColorMatchingProfile: sRGB
720 </pre>
721
722
723 <h2 class='title'><a name='CONSTRAINTS'>Constraints</a></h2>
724
725 <p>Constraints are option choices that are not allowed by the driver or device, for example printing 2-sided transparencies. All versions of CUPS support constraints defined by the legacy Adobe <tt>UIConstraints</tt> and <tt>NonUIConstraints</tt> keywords which support conflicts between any two option choices, for example:</p>
726
727 <pre class='command'>
728 *% Do not allow 2-sided printing on transparency media
729 *UIConstraints: "*Duplex *MediaType Transparency"
730 *UIConstraints: "*MediaType Transparency *Duplex"
731 </pre>
732
733 <p>While nearly all constraints can be expressed using these keywords, there are valid scenarios requiring constraints between more than two option choices. In addition, resolution of constraints is problematic since users and software have to guess how a particular constraint is best resolved.</p>
734
735 <p>CUPS 1.4 and higher define two new keywords for constraints, <tt>cupsUIConstraints</tt> and <tt>cupsUIResolver</tt>. Each <tt>cupsUIConstraints</tt> keyword points to a <tt>cupsUIResolver</tt> keyword which specifies alternate options that resolve the conflict condition. The same <tt>cupsUIResolver</tt> can be used by multiple <tt>cupsUIConstraints</tt>.</p>
736
737 <blockquote><b>Note:</b>
738
739 <p>When developing PPD files that contain constraints, it is very important to use the <a href="man-cupstestppd.html">cupstestppd(1)</a> program to verify that your constraints are accurate and cannot result in unresolvable option selections.</p>
740
741 </blockquote>
742
743 <h3><span class='info'>CUPS 1.4/OS X 10.6</span><a name='cupsUIConstraints'>cupsUIConstraints</a></h3>
744
745 <p class='summary'>*cupsUIConstraints resolver: "*Keyword1 *Keyword2 ..."<br>
746 *cupsUIConstraints resolver: "*Keyword1 OptionKeyword1 *Keyword2 ..."<br>
747 *cupsUIConstraints resolver: "*Keyword1 *Keyword2 OptionKeyword2 ..."<br>
748 *cupsUIConstraints resolver: "*Keyword1 OptionKeyword1 *Keyword2 OptionKeyword2 ..."<br>
749 *cupsUIConstraints: "*InstallableKeyword1 OptionKeyword1 *Keyword2 OptionKeyword2 ..."</p>
750
751 <p>Lists two or more options which conflict. The "resolver" string is a (possibly unique) keyword which specifies which options to change when the constraint exists. When no resolver is provided, CUPS first tries the default choice followed by testing each option choice to resolve the conflict.</p>
752
753 <p>Examples:</p>
754
755 <pre class='command'>
756 <em>*% Specify that 2-sided printing cannot happen on transparencies</em>
757 *cupsUIConstraints transparency: "*Duplex *MediaType Transparency"
758
759 <em>*% Specify that envelope printing cannot happen from the paper trays</em>
760 *cupsUIConstraints envelope: "*PageSize Env10 *InputSlot Tray1"
761 *cupsUIConstraints envelope: "*PageSize Env10 *InputSlot Tray1"
762 *cupsUIConstraints envelope: "*PageSize EnvDL *InputSlot Tray2"
763 *cupsUIConstraints envelope: "*PageSize EnvDL *InputSlot Tray2"
764
765 <em>*% Specify an installable option constraint for the envelope feeder</em>
766 *cupsUIConstraints: "*InputSlot EnvFeeder *InstalledEnvFeeder"
767
768 <em>*% Specify that photo printing cannot happen on plain paper or transparencies at 1200dpi</em>
769 *cupsUIConstraints photo: "*OutputMode Photo *MediaType Plain *Resolution 1200dpi"
770 *cupsUIConstraints photo: "*OutputMode Photo *MediaType Transparency *Resolution 1200dpi"
771 </pre>
772
773 <h3><span class='info'>CUPS 1.4/OS X 10.6</span><a name='cupsUIResolver'>cupsUIResolver</a></h3>
774
775 <p class='summary'>*cupsUIResolver resolver: "*Keyword1 OptionKeyword1 *Keyword2 OptionKeyword2 ..."</p>
776
777 <p>Specifies two or more options to mark/select to resolve a constraint. The "resolver" string identifies a particular action to take for one or more <a href='#cupsUIConstraints'><tt>cupsUIConstraints</tt></a>. The same action can be used for multiple constraints. The option keyword pairs are treated as an ordered list of option selections to try - only the first N selections will be used, where N is the minimum number of selections required. Because <a href="api-ppd.html#cupsResolveConflicts"><code>cupsResolveConflicts()</code></a> will not change the most recent option selection passed to it, at least two options from the constraints must be listed to avoid situations where conflicts cannot be resolved.</p>
778
779 <p>Examples:</p>
780
781 <pre class='command'>
782 <em>*% Specify the options to change for the 2-sided transparency constraint</em>
783 *cupsUIResolver transparency: "*Duplex None *MediaType Plain"
784
785 <em>*% Specify the options to change for the envelope printing constraints. Notice
786 *% that we try to change the InputSlot to either the envelope feeder or the
787 *% manual feed first, then we change the page size...</em>
788 *cupsUIResolver envelope: "*InputSlot EnvFeeder *InputSlot ManualFeed *PageSize Letter"
789
790 <em>*% Specify the options to change for the photo printing constraints</em>
791 *cupsUIResolver photo: "*OutputMode Best *Resolution 600dpi"
792 </pre>
793
794
795 <h2 class='title'><a name='I18N'>Globalized PPD Support</a></h2>
796
797 <p>CUPS 1.2 and higher adds support for PPD files containing multiple languages by following the following additional rules:</p>
798
799 <ol>
800
801 <li>The <tt>LanguageVersion</tt> MUST be <tt>English</tt></li>
802
803 <li>The <tt>LanguageEncoding</tt> MUST be <tt>ISOLatin1</tt></li>
804
805 <li>The <tt>cupsLanguages</tt> keyword MUST be provided and list each of the supported locales in the PPD file</li>
806
807 <li>Main and option keywords MUST NOT exceed 34 (instead of 40) characters to allow room for the locale prefixes in translation keywords</li>
808
809 <li>The main keyword "Translation" MUST NOT be used</li>
810
811 <li>Translation strings included with the main and option keywords MUST NOT contain characters outside the ASCII subset of ISOLatin1 and UTF-8; developers wishing to use characters outside ASCII MUST provide a separate set of English localization keywords for the affected keywords.</li>
812
813 <li>Localizations are specified using a locale prefix of the form "ll" or "ll_CC." where "ll" is the 2-letter ISO language code and "CC" is the 2-letter ISO country code<ul>
814 <li>A generic language translation ("ll") SHOULD be provided with country-specific differences ("ll_CC") provided only as needed</li>
815 <li>For historical reasons, the "zh" and "zh_CN" locales map to Simplified Chinese while the "zh_TW" locale maps to Traditional Chinese</li>
816 </ul></li>
817
818 <li>Locale-specific translation strings MUST be encoded using UTF-8.</li>
819
820 <li>Main keywords MUST be localized using one of the following forms:
821 <p><tt>*ll.Translation MainKeyword/translation text: ""</tt><br />
822 <tt>*ll_CC.Translation MainKeyword/translation text: ""</tt></p></li>
823
824 <li>Option keywords MUST be localized using one of the following forms:
825 <p><tt>*ll.MainKeyword OptionKeyword/translation text: ""</tt><br>
826 <tt>*ll_CC.MainKeyword OptionKeyword/translation text: ""</tt></p></li>
827
828 <li>Localization keywords MAY appear anywhere after the first line of the PPD file</li>
829
830 </ol>
831
832 <blockquote><b>Note:</b>
833
834 <p>We use a <tt>LanguageEncoding</tt> value of <tt>ISOLatin1</tt> and limit the allowed base translation strings to ASCII to avoid character coding issues that would otherwise occur. In addition, requiring the base translation strings to be in English allows for easier fallback translation when no localization is provided in the PPD file for a given locale.</p>
835
836 </blockquote>
837
838 <p>Examples:</p>
839
840 <pre class='command'>
841 *LanguageVersion: English
842 *LanguageEncoding: ISOLatin1
843 *cupsLanguages: "de fr_CA"
844 *ModelName: "Foobar Laser 9999"
845
846 <em>*% Localize ModelName for French and German</em>
847 *fr_CA.Translation ModelName/La Foobar Laser 9999: ""
848 *de.Translation ModelName/Foobar LaserDrucken 9999: ""
849
850 *cupsIPPReason com.vendor-error/A serious error occurred: "/help/com.vendor/error.html"
851 <em>*% Localize printer-state-reason for French and German</em>
852 *fr_CA.cupsIPPReason com.vendor-error/Une erreur s&egrave;rieuse s'est produite: "/help/com.vendor/error.html"
853 *de.cupsIPPReason com.vendor-error/Eine ernste St&ouml;rung trat: "/help/com.vendor/error.html"
854
855 ...
856
857 *OpenUI *InputSlot/Paper Source: PickOne
858 *OrderDependency: 10 AnySetup *InputSlot
859 *DefaultInputSlot: Auto
860 <em>*% Localize InputSlot for French and German</em>
861 *fr_CA.Translation InputSlot/Papier source: ""
862 *de.Translation InputSlot/Papiereinzug: ""
863 *InputSlot Auto/Default: "&lt;&lt;/ManualFeed false&gt;&gt;setpagedevice"
864 <em>*% Localize InputSlot=Auto for French and German</em>
865 *fr_CA.InputSlot Auto/Par Defaut: ""
866 *de.InputSlot Auto/Standard: ""
867 *InputSlot Manual/Manual Feed: "&lt;&lt;/ManualFeed true&gt;&gt;setpagedevice"
868 <em>*% Localize InputSlot=Manual for French and German</em>
869 *fr_CA.InputSlot Manual/Manuel mecanisme de alimentation: ""
870 *de.InputSlot Manual/Manueller Einzug: ""
871 *CloseUI: *InputSlot
872 </pre>
873
874
875 <h2 class='title'><a name='OPTIONS'><span class="info">CUPS 1.3/OS X 10.6</span>Custom Options</a></h2>
876
877 <p>CUPS supports custom options using an extension of the <tt>CustomPageSize</tt> and <tt>ParamCustomPageSize</tt> syntax:</p>
878
879 <pre class='command'>
880 *CustomFoo True: "command"
881 *ParamCustomFoo Name1/Text 1: order type minimum maximum
882 *ParamCustomFoo Name2/Text 2: order type minimum maximum
883 ...
884 *ParamCustomFoo NameN/Text N: order type minimum maximum
885 </pre>
886
887 <p>When the base option is part of the <tt>JCLSetup</tt> section, the "command" string contains JCL commands with "\order" placeholders for each numbered parameter. The CUPS API handles any necessary value quoting for HP-PJL commands. For example, if the JCL command string is "@PJL SET PASSCODE=\1" and the first
888 option value is "1234" then CUPS will output the string "@PJL SET PASSCODE=1234".</p>
889
890 <p>For non-<tt>JCLSetup</tt> options, the "order" value is a number from 1 to N and specifies the order of values as they are placed on the stack before the command. For example, if the PostScript command string is "&lt;&lt;/cupsReal1 2 1 roll&gt;&gt;setpagedevice" and the option value is "2.0" then CUPS will output the string "2.0 &lt;&lt;/cupsReal1 2 1 roll&gt;&gt;setpagedevice".</p>
891
892 <p>The "type" is one of the following keywords:</p>
893
894 <ul>
895
896 <li><tt>curve</tt> - a real value from "minimum" to "maximum" representing a gamma correction curve using the function: f(x) = x <sup>value</sup></li>
897
898 <li><tt>int</tt> - an integer value from "minimum" to "maximum"</li>
899
900 <li><tt>invcurve</tt> - a real value from "minimum" to "maximum" representing a gamma correction curve using the function: f(x) = x <sup>1 / value</sup></li>
901
902 <li><tt>passcode</tt> - a string of numbers value with a minimum of "minimum" numbers and a maximum of "maximum" numbers ("minimum" and "maximum" are numbers and passcode strings are not displayed in the user interface)</li>
903
904 <li><tt>password</tt> - a string value with a minimum of "minimum" characters and a maximum of "maximum" characters ("minimum" and "maximum" are numbers and password strings are not displayed in the user interface)</li>
905
906 <li><tt>points</tt> - a measurement value in points from "minimum" to "maximum"</li>
907
908 <li><tt>real</tt> - a real value from "minimum" to "maximum"</li>
909
910 <li><tt>string</tt> - a string value with a minimum of "minimum" characters and a maximum of "maximum" characters ("minimum" and "maximum" are numbers)</li>
911
912 </ul>
913
914 <p>Examples:</p>
915
916 <pre class='command'>
917 <em>*% Base JCL key code option</em>
918 *JCLOpenUI JCLPasscode/Key Code: PickOne
919 *OrderDependency: 10 JCLSetup *JCLPasscode
920 *DefaultJCLPasscode: None
921 *JCLPasscode None/No Code: ""
922 *JCLPasscode 1111: "@PJL SET PASSCODE = 1111&lt;0A&gt;"
923 *JCLPasscode 2222: "@PJL SET PASSCODE = 2222&lt;0A&gt;"
924 *JCLPasscode 3333: "@PJL SET PASSCODE = 3333&lt;0A&gt;"
925 *JCLCloseUI: *JCLPasscode
926
927 <em>*% Custom JCL key code option</em>
928 *CustomJCLPasscode True: "@PJL SET PASSCODE = \1&lt;0A&gt;"
929 *ParamCustomJCLPasscode Code/Key Code: 1 passcode 4 4
930
931
932 <em>*% Base PostScript watermark option</em>
933 *OpenUI WatermarkText/Watermark Text: PickOne
934 *OrderDependency: 10 AnySetup *WatermarkText
935 *DefaultWatermarkText: None
936 *WatermarkText None: ""
937 *WatermarkText Draft: "&lt;&lt;/cupsString1(Draft)&gt;&gt;setpagedevice"
938 *CloseUI: *WatermarkText
939
940 <em>*% Custom PostScript watermark option</em>
941 *CustomWatermarkText True: "&lt;&lt;/cupsString1 3 -1 roll&gt;&gt;setpagedevice"
942 *ParamCustomWatermarkText Text: 1 string 0 32
943
944
945 <em>*% Base PostScript gamma/density option</em>
946 *OpenUI GammaDensity/Gamma and Density: PickOne
947 *OrderDependency: 10 AnySetup *GammaDensity
948 *DefaultGammaDensity: Normal
949 *GammaDensity Normal/Normal: "&lt;&lt;/cupsReal1 1.0/cupsReal2 1.0&gt;&gt;setpagedevice"
950 *GammaDensity Light/Lighter: "&lt;&lt;/cupsReal1 0.9/cupsReal2 0.67&gt;&gt;setpagedevice"
951 *GammaDensity Dark/Darker: "&lt;&lt;/cupsReal1 1.1/cupsReal2 1.5&gt;&gt;setpagedevice"
952 *CloseUI: *GammaDensity
953
954 <em>*% Custom PostScript gamma/density option</em>
955 *CustomGammaDensity True: "&lt;&lt;/cupsReal1 3 -1 roll/cupsReal2 5 -1&gt;&gt;setpagedevice"
956 *ParamCustomGammaDensity Gamma: 1 curve 0.1 10
957 *ParamCustomGammaDensity Density: 2 real 0 2
958 </pre>
959
960
961 <h2 class='title'><a name='RASTERPS'>Writing PostScript Option Commands for Raster Drivers</a></h2>
962
963 <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 keywords such as page size, resolution, and so forth. For example, the following code sets the page size to A4 size:</p>
964
965 <pre class='command'>
966 *PageSize A4: "&lt;&lt;/PageSize[595 842]&gt;&gt;setpagedevice"
967 </pre>
968
969 <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>
970
971 <pre class='command'>
972 *CustomWatermarkText True: "&lt;&lt;/cupsString1 3 -1 roll&gt;&gt;setpagedevice"
973 </pre>
974
975 <p>For a custom string value of "My Watermark", CUPS will produce the following PostScript code for the option:</p>
976
977 <pre class='command'>
978 (My Watermark)
979 &lt;&lt;/cupsString1 3 -1 roll&gt;&gt;setpagedevice
980 </pre>
981
982 <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>
983
984 <pre class='command'>
985 &lt;&lt;/cupsString1(My Watermark)&gt;&gt;setpagedevice
986 </pre>
987
988 <p>The resulting dictionary sets the page device attributes that are sent to your raster driver in the page header.</p>
989
990 <h3>Custom Page Size Code</h3>
991
992 <p>There are many possible implementations of the <tt>CustomPageSize</tt> code. For CUPS raster drivers, the following code is recommended:</p>
993
994 <pre class='command'>
995 *ParamCustomPageSize Width: 1 points <i>min-width max-width</i>
996 *ParamCustomPageSize Height: 2 points <i>min-height max-height</i>
997 *ParamCustomPageSize WidthOffset: 3 points 0 0
998 *ParamCustomPageSize HeightOffset: 4 points 0 0
999 *ParamCustomPageSize Orientation: 5 int 0 0
1000 *CustomPageSize True: "pop pop pop &lt;&lt;/PageSize[5 -2 roll]/ImagingBBox null&gt;&gt;setpagedevice"
1001 </pre>
1002
1003 <h3>Supported PostScript Operators</h3>
1004
1005 <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>
1006
1007 <ul>
1008
1009 <li><tt>&lt;&lt;</tt> - Start a dictionary.</li>
1010
1011 <li><tt>&gt;&gt;</tt> - End a dictionary.</li>
1012
1013 <li><tt>[</tt> - Start an array.</li>
1014
1015 <li><tt>]</tt> - End an array.</li>
1016
1017 <li><tt>copy</tt> - Copy the top N objects on the stack.</li>
1018
1019 <li><tt>dup</tt> - Copy the top object on the stack.</li>
1020
1021 <li><tt>index</tt> - Copy the Nth from the top object on the stack.</li>
1022
1023 <li><tt>pop</tt> - Pop the top object on the stack.</li>
1024
1025 <li><tt>roll</tt> - Shift the top N objects on the stack.</li>
1026
1027 <li><tt>setpagedevice</tt> - Set the page header values according to the key/value dictionary on the stack.</li>
1028
1029 </ul>
1030
1031 <blockquote><b>Note:</b>
1032
1033 <p><em>Never</em> use the unsupported <tt>dict</tt> or <tt>put</tt>
1034 operators in your option code. These operators are typically used in
1035 option code dating back to Level 1 PostScript printers, which did not
1036 support the simpler <tt>&lt;&lt;</tt> or <tt>&gt;&gt;</tt> operators.
1037 If you have old option code using <tt>dict</tt> or <tt>put</tt>, you can
1038 rewrite it very easily to use the newer <tt>&lt;&lt;</tt> and
1039 <tt>&gt;&gt;</tt> operators instead. For example, the following code
1040 to set the page size:</p>
1041
1042 <style type='text/css'><!--
1043 PRE B {
1044 background: #000000;
1045 color: #ffffff;
1046 padding: 2px 5px;
1047 }
1048 --></style>
1049
1050 <pre class='command'>
1051 <b>1 dict dup</b> /PageSize [612 792] <b>put</b> setpagedevice
1052 </pre>
1053
1054 <p>can be rewritten as:</p>
1055
1056 <pre class='command'>
1057 <b>&lt;&lt;</b> /PageSize [612 792] <b>&gt;&gt;</b> setpagedevice
1058 </pre>
1059
1060 </blockquote>
1061
1062 <h3>Supported Page Device Attributes</h3>
1063
1064 <p>Table 2 shows the supported page device attributes along with PostScript code examples.</p>
1065
1066 <div class='table'>
1067 <table summary='Supported Page Device Attributes'>
1068 <caption>Table 2: <a name='TABLE_2'>Supported Page Device Attributes</a></caption>
1069 <thead>
1070 <tr>
1071 <th>Name(s)</th>
1072 <th>Type</th>
1073 <th>Description</th>
1074 <th>Example(s)</th>
1075 </tr>
1076 </thead>
1077 <tbody>
1078 <tr valign='top'>
1079 <td><tt>AdvanceDistance</tt></td>
1080 <td>Integer</td>
1081 <td>Specifies the number of points to advance roll media after printing.</td>
1082 <td><tt>&lt;&lt;/AdvanceDistance 18&gt;&gt;setpagedevice</tt></td>
1083 </tr>
1084 <tr valign='top'>
1085 <td><tt>AdvanceMedia</tt></td>
1086 <td>Integer</td>
1087 <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>
1088 <td><tt>&lt;&lt;/AdvanceMedia 4&gt;&gt;setpagedevice</tt></td>
1089 </tr>
1090 <tr valign='top'>
1091 <td><tt>Collate</tt></td>
1092 <td>Boolean</td>
1093 <td>Specifies whether collated copies are required.</td>
1094 <td><tt>&lt;&lt;/Collate true&gt;&gt;setpagedevice</tt></td>
1095 </tr>
1096 <tr valign='top'>
1097 <td><tt>CutMedia</tt></td>
1098 <td>Integer</td>
1099 <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>
1100 <td><tt>&lt;&lt;/CutMedia 1&gt;&gt;setpagedevice</tt></td>
1101 </tr>
1102 <tr valign='top'>
1103 <td><tt>Duplex</tt></td>
1104 <td>Boolean</td>
1105 <td>Specifies whether 2-sided printing is required.</td>
1106 <td><tt>&lt;&lt;/Duplex true&gt;&gt;setpagedevice</tt></td>
1107 </tr>
1108 <tr valign='top'>
1109 <td><tt>HWResolution</tt></td>
1110 <td>Integer Array</td>
1111 <td>Specifies the resolution of the page image in pixels per inch.</td>
1112 <td><tt>&lt;&lt;/HWResolution[1200 1200]&gt;&gt;setpagedevice</tt></td>
1113 </tr>
1114 <tr valign='top'>
1115 <td><tt>InsertSheet</tt></td>
1116 <td>Boolean</td>
1117 <td>Specifies whether to insert a blank sheet before the job.</td>
1118 <td><tt>&lt;&lt;/InsertSheet true&gt;&gt;setpagedevice</tt></td>
1119 </tr>
1120 <tr valign='top'>
1121 <td><tt>Jog</tt></td>
1122 <td>Integer</td>
1123 <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>
1124 <td><tt>&lt;&lt;/Jog 2&gt;&gt;setpagedevice</tt></td>
1125 </tr>
1126 <tr valign='top'>
1127 <td><tt>LeadingEdge</tt></td>
1128 <td>Integer</td>
1129 <td>Specifies the leading edge of the media: 0 = top, 1 = right, 2 = bottom, 3 = left.</td>
1130 <td><tt>&lt;&lt;/LeadingEdge 0&gt;&gt;setpagedevice</tt></td>
1131 </tr>
1132 <tr valign='top'>
1133 <td><tt>ManualFeed</tt></td>
1134 <td>Boolean</td>
1135 <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>
1136 <td><tt>&lt;&lt;/ManualFeed true&gt;&gt;setpagedevice</tt></td>
1137 </tr>
1138 <tr valign='top'>
1139 <td><tt>MediaClass</tt></td>
1140 <td>String</td>
1141 <td>Specifies a named media.</td>
1142 <td><tt>&lt;&lt;/MediaClass (Invoices)&gt;&gt;setpagedevice</tt></td>
1143 </tr>
1144 <tr valign='top'>
1145 <td><tt>MediaColor</tt></td>
1146 <td>String</td>
1147 <td>Specifies the color of the media.</td>
1148 <td><tt>&lt;&lt;/MediaColor &gt;&gt;setpagedevice</tt></td>
1149 </tr>
1150 <tr valign='top'>
1151 <td><tt>MediaPosition</tt></td>
1152 <td>Integer</td>
1153 <td>Specifies the tray or source of the media.</td>
1154 <td><tt>&lt;&lt;/MediaPosition 12&gt;&gt;setpagedevice</tt></td>
1155 </tr>
1156 <tr valign='top'>
1157 <td><tt>MediaType</tt></td>
1158 <td>String</td>
1159 <td>Specifies the general media type.</td>
1160 <td><tt>&lt;&lt;/MediaType (Glossy)&gt;&gt;setpagedevice</tt></td>
1161 </tr>
1162 <tr valign='top'>
1163 <td><tt>MediaWeight</tt></td>
1164 <td>Integer</td>
1165 <td>Specifies the media weight in grams per meter<sup>2</sup>.</td>
1166 <td><tt>&lt;&lt;/MediaWeight 100&gt;&gt;setpagedevice</tt></td>
1167 </tr>
1168 <tr valign='top'>
1169 <td><tt>MirrorPrint</tt></td>
1170 <td>Boolean</td>
1171 <td>Specifies whether to flip the output image horizontally.</td>
1172 <td><tt>&lt;&lt;/MirrorPrint true&gt;&gt;setpagedevice</tt></td>
1173 </tr>
1174 <tr valign='top'>
1175 <td><tt>NegativePrint</tt></td>
1176 <td>Boolean</td>
1177 <td>Specifies whether to invert the output image.</td>
1178 <td><tt>&lt;&lt;/NegativePrint true&gt;&gt;setpagedevice</tt></td>
1179 </tr>
1180 <tr valign='top'>
1181 <td><tt>NumCopies</tt></td>
1182 <td>Integer</td>
1183 <td>Specifies the number of copies to produce of each page.</td>
1184 <td><tt>&lt;&lt;/NumCopies 100&gt;&gt;setpagedevice</tt></td>
1185 </tr>
1186 <tr valign='top'>
1187 <td><tt>Orientation</tt></td>
1188 <td>Integer</td>
1189 <td>Specifies the orientation of the output: 0 = portrait, 1 = landscape rotated counter-clockwise, 2 = upside-down, 3 = landscape rotated clockwise.</td>
1190 <td><tt>&lt;&lt;/Orientation 3&gt;&gt;setpagedevice</tt></td>
1191 </tr>
1192 <tr valign='top'>
1193 <td><tt>OutputFaceUp</tt></td>
1194 <td>Boolean</td>
1195 <td>Specifies whether to place the media face-up in the output bin/tray.</td>
1196 <td><tt>&lt;&lt;/OutputFaceUp true&gt;&gt;setpagedevice</tt></td>
1197 </tr>
1198 <tr valign='top'>
1199 <td><tt>OutputType</tt></td>
1200 <td>String</td>
1201 <td>Specifies the output type name.</td>
1202 <td><tt>&lt;&lt;/OutputType (Photo)&gt;&gt;setpagedevice</tt></td>
1203 </tr>
1204 <tr valign='top'>
1205 <td><tt>PageSize</tt></td>
1206 <td>Integer/Real Array</td>
1207 <td>Specifies the width and length/height of the page in points.</td>
1208 <td><tt>&lt;&lt;/PageSize[595 842]&gt;&gt;setpagedevice</tt></td>
1209 </tr>
1210 <tr valign='top'>
1211 <td><tt>Separations</tt></td>
1212 <td>Boolean</td>
1213 <td>Specifies whether to produce color separations.</td>
1214 <td><tt>&lt;&lt;/Separations true&gt;&gt;setpagedevice</tt></td>
1215 </tr>
1216 <tr valign='top'>
1217 <td><tt>TraySwitch</tt></td>
1218 <td>Boolean</td>
1219 <td>Specifies whether to switch trays automatically.</td>
1220 <td><tt>&lt;&lt;/TraySwitch true&gt;&gt;setpagedevice</tt></td>
1221 </tr>
1222 <tr valign='top'>
1223 <td><tt>Tumble</tt></td>
1224 <td>Boolean</td>
1225 <td>Specifies whether the back sides of pages are rotated 180 degrees.</td>
1226 <td><tt>&lt;&lt;/Tumble true&gt;&gt;setpagedevice</tt></td>
1227 </tr>
1228 <tr valign='top'>
1229 <td><tt>cupsBorderlessScalingFactor</tt></td>
1230 <td>Real</td>
1231 <td>Specifies the amount to scale the page image dimensions.</td>
1232 <td><tt>&lt;&lt;/cupsBorderlessScalingFactor 1.01&gt;&gt;setpagedevice</tt></td>
1233 </tr>
1234 <tr valign='top'>
1235 <td><tt>cupsColorOrder</tt></td>
1236 <td>Integer</td>
1237 <td>Specifies the order of colors: 0 = chunked, 1 = banded, 2 = planar.</td>
1238 <td><tt>&lt;&lt;/cupsColorOrder 0&gt;&gt;setpagedevice</tt></td>
1239 </tr>
1240 <tr valign='top'>
1241 <td><tt>cupsColorSpace</tt></td>
1242 <td>Integer</td>
1243 <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>
1244 <td><tt>&lt;&lt;/cupsColorSpace 1 &gt;&gt;setpagedevice</tt></td>
1245 </tr>
1246 <tr valign='top'>
1247 <td><tt>cupsCompression</tt></td>
1248 <td>Integer</td>
1249 <td>Specifies a driver compression type/mode.</td>
1250 <td><tt>&lt;&lt;/cupsCompression 2&gt;&gt;setpagedevice</tt></td>
1251 </tr>
1252 <tr valign='top'>
1253 <td><tt>cupsInteger0<br>
1254 ...<br>
1255 cupsInteger15</tt></td>
1256 <td>Integer</td>
1257 <td>Specifies driver integer values.</td>
1258 <td><tt>&lt;&lt;/cupsInteger11 1234&gt;&gt;setpagedevice</tt></td>
1259 </tr>
1260 <tr valign='top'>
1261 <td><tt>cupsMarkerType</tt></td>
1262 <td>String</td>
1263 <td>Specifies the type of ink/toner to use.</td>
1264 <td><tt>&lt;&lt;/cupsMarkerType (Black+Color)&gt;&gt;setpagedevice</tt></td>
1265 </tr>
1266 <tr valign='top'>
1267 <td><tt>cupsMediaType</tt></td>
1268 <td>Integer</td>
1269 <td>Specifies a numeric media type.</td>
1270 <td><tt>&lt;&lt;/cupsMediaType 999&gt;&gt;setpagedevice</tt></td>
1271 </tr>
1272 <tr valign='top'>
1273 <td><tt>cupsPageSizeName</tt></td>
1274 <td>String</td>
1275 <td>Specifies the name of the page size.</td>
1276 <td><tt>&lt;&lt;/cupsPageSizeName (A4.Full)&gt;&gt;setpagedevice</tt></td>
1277 </tr>
1278 <tr valign='top'>
1279 <td><tt>cupsPreferredBitsPerColor</tt></td>
1280 <td>Integer</td>
1281 <td>Specifies the preferred number of bits per color, typically 8 or 16.</td>
1282 <td><tt>&lt;&lt;/cupsPreferredBitsPerColor 16&gt;&gt;setpagedevice</tt></td>
1283 </tr>
1284 <tr valign='top'>
1285 <td><tt>cupsReal0<br>
1286 ...<br>
1287 cupsReal15</tt></td>
1288 <td>Real</td>
1289 <td>Specifies driver real number values.</td>
1290 <td><tt>&lt;&lt;/cupsReal15 1.234&gt;&gt;setpagedevice</tt></td>
1291 </tr>
1292 <tr valign='top'>
1293 <td><tt>cupsRenderingIntent</tt></td>
1294 <td>String</td>
1295 <td>Specifies the color rendering intent.</td>
1296 <td><tt>&lt;&lt;/cupsRenderingIntent (AbsoluteColorimetric)&gt;&gt;setpagedevice</tt></td>
1297 </tr>
1298 <tr valign='top'>
1299 <td><tt>cupsRowCount</tt></td>
1300 <td>Integer</td>
1301 <td>Specifies the number of rows of raster data to print on each line for some drivers.</td>
1302 <td><tt>&lt;&lt;/cupsRowCount 24&gt;&gt;setpagedevice</tt></td>
1303 </tr>
1304 <tr valign='top'>
1305 <td><tt>cupsRowFeed</tt></td>
1306 <td>Integer</td>
1307 <td>Specifies the number of rows to feed between passes for some drivers.</td>
1308 <td><tt>&lt;&lt;/cupsRowFeed 17&gt;&gt;setpagedevice</tt></td>
1309 </tr>
1310 <tr valign='top'>
1311 <td><tt>cupsRowStep</tt></td>
1312 <td>Integer</td>
1313 <td>Specifies the number of lines between columns/rows on the print head for some drivers.</td>
1314 <td><tt>&lt;&lt;/cupsRowStep 2&gt;&gt;setpagedevice</tt></td>
1315 </tr>
1316 <tr valign='top'>
1317 <td><tt>cupsString0<br>
1318 ...<br>
1319 cupsString15</tt></td>
1320 <td>String</td>
1321 <td>Specifies driver string values.</td>
1322 <td><tt>&lt;&lt;/cupsString0(String Value)&gt;&gt;setpagedevice</tt></td>
1323 </tr>
1324 </tbody>
1325 </table></div>
1326
1327
1328 <h2 class='title'><a name='MEDIA'>Media Keywords</a></h2>
1329
1330 <p>The CUPS media keywords allow drivers to specify alternate custom page
1331 size limits based on up to two options.</p>
1332
1333 <h3><span class='info'>CUPS 1.4/OS X 10.6</span><a name='cupsMediaQualifier2'>cupsMediaQualifier2</a></h3>
1334
1335 <p class='summary'>*cupsMediaQualifier2: MainKeyword</p>
1336
1337 <p>This keyword specifies the second option to use for overriding the
1338 custom page size limits.</p>
1339
1340 <p>Example:</p>
1341
1342 <pre class='command'>
1343 <em>*% Specify alternate custom page size limits based on InputSlot and Quality</em>
1344 *cupsMediaQualifier2: InputSlot
1345 *cupsMediaQualifier3: Quality
1346 *cupsMaxSize .Manual.: "1000 1000"
1347 *cupsMinSize .Manual.: "100 100"
1348 *cupsMinSize .Manual.Photo: "200 200"
1349 *cupsMinSize ..Photo: "300 300"
1350 </pre>
1351
1352 <h3><span class='info'>CUPS 1.4/OS X 10.6</span><a name='cupsMediaQualifier3'>cupsMediaQualifier3</a></h3>
1353
1354 <p class='summary'>*cupsMediaQualifier3: MainKeyword</p>
1355
1356 <p>This keyword specifies the third option to use for overriding the
1357 custom page size limits.</p>
1358
1359 <p>Example:</p>
1360
1361 <pre class='command'>
1362 <em>*% Specify alternate custom page size limits based on InputSlot and Quality</em>
1363 *cupsMediaQualifier2: InputSlot
1364 *cupsMediaQualifier3: Quality
1365 *cupsMaxSize .Manual.: "1000 1000"
1366 *cupsMinSize .Manual.: "100 100"
1367 *cupsMinSize .Manual.Photo: "200 200"
1368 *cupsMinSize ..Photo: "300 300"
1369 </pre>
1370
1371 <h3><span class='info'>CUPS 1.4/OS X 10.6</span><a name='cupsMinSize'>cupsMinSize</a></h3>
1372
1373 <p class='summary'>*cupsMinSize .Qualifier2.Qualifier3: "width length"<br>
1374 *cupsMinSize .Qualifier2.: "width length"<br>
1375 *cupsMinSize ..Qualifier3: "width length"</p>
1376
1377 <p>This keyword specifies alternate minimum custom page sizes in points.
1378 The <a href='#cupsMediaQualifier2'><tt>cupsMediaQualifier2</tt></a> and
1379 <a href='#cupsMediaQualifier3'><tt>cupsMediaQualifier3</tt></a> keywords
1380 are used to identify options to use for matching.</p>
1381
1382 <p>Example:</p>
1383
1384 <pre class='command'>
1385 <em>*% Specify alternate custom page size limits based on InputSlot and Quality</em>
1386 *cupsMediaQualifier2: InputSlot
1387 *cupsMediaQualifier3: Quality
1388 *cupsMaxSize .Manual.: "1000 1000"
1389 *cupsMinSize .Manual.: "100 100"
1390 *cupsMinSize .Manual.Photo: "200 200"
1391 *cupsMinSize ..Photo: "300 300"
1392 </pre>
1393
1394 <h3><span class='info'>CUPS 1.4/OS X 10.6</span><a name='cupsMaxSize'>cupsMaxSize</a></h3>
1395
1396 <p class='summary'>*cupsMaxSize .Qualifier2.Qualifier3: "width length"<br>
1397 *cupsMaxSize .Qualifier2.: "width length"<br>
1398 *cupsMaxSize ..Qualifier3: "width length"</p>
1399
1400 <p>This keyword specifies alternate maximum custom page sizes in points.
1401 The <a href='#cupsMediaQualifier2'><tt>cupsMediaQualifier2</tt></a> and
1402 <a href='#cupsMediaQualifier3'><tt>cupsMediaQualifier3</tt></a> keywords
1403 are used to identify options to use for matching.</p>
1404
1405 <p>Example:</p>
1406
1407 <pre class='command'>
1408 <em>*% Specify alternate custom page size limits based on InputSlot and Quality</em>
1409 *cupsMediaQualifier2: InputSlot
1410 *cupsMediaQualifier3: Quality
1411 *cupsMaxSize .Manual.: "1000 1000"
1412 *cupsMinSize .Manual.: "100 100"
1413 *cupsMinSize .Manual.Photo: "200 200"
1414 *cupsMinSize ..Photo: "300 300"
1415 </pre>
1416
1417
1418 <h3><span class='info'>CUPS 1.4/OS X 10.6</span><a name='cupsPageSizeCategory'>cupsPageSizeCategory</a></h3>
1419
1420 <p class="summary">*cupsPageSizeCategory name/text: "name name2 ... nameN"</p>
1421
1422 <p>This keyword lists related paper size names that should be grouped together in the Print or Page Setup dialogs. The "name" portion of the keyword specifies the root/default size for the grouping. On OS X the grouped paper sizes are shown in a submenu of the main paper size. When omitted, sizes with the same dimensions are automatically grouped together, for example "Letter" and "Letter.Borderless".</p>
1423
1424 <p>Example:</p>
1425
1426 <pre class="command">
1427 <em>*% Specify grouping of borderless/non-borderless sizes</em>
1428 *cupsPageSizeCategory Letter/US Letter: "Letter Letter.Borderless"
1429 *cupsPageSizeCategory A4/A4: "A4 A4.Borderless"
1430 </pre>
1431
1432
1433 <h2 class='title'><a name='ATTRIBUTES'>General Attributes</a></h2>
1434
1435 <h3><span class='info'>CUPS 1.3/OS X 10.5</span><a name='cupsBackSide'>cupsBackSide</a></h3>
1436
1437 <p class='summary'>*cupsBackSide: keyword</p>
1438
1439 <p>This keyword requests special handling of the back side of pages
1440 when doing duplexed (2-sided) output. <a href='#TABLE_1'>Table 1</a>
1441 shows the supported keyword values for this keyword and their effect
1442 on the raster data sent to your driver. For example, when <tt>cupsBackSide</tt>
1443 is <code>Rotated</code> and <tt>Tumble</tt> is <tt>false</tt>, your driver
1444 will receive print data starting at the bottom right corner of the page, with
1445 each line going right-to-left instead of left-to-right. The default value is
1446 <code>Normal</code>.</p>
1447
1448 <blockquote><b>Note:</b>
1449
1450 <p><tt>cupsBackSide</tt> replaces the older <tt>cupsFlipDuplex</tt>
1451 keyword - if <tt>cupsBackSide</tt> is specified, <tt>cupsFlipDuplex</tt>
1452 will be ignored.</p>
1453
1454 </blockquote>
1455
1456 <div class='table'>
1457 <table width='80%' summary='Back Side Raster Coordinate System'>
1458 <caption>Table 1: <a name='TABLE_1'>Back Side Raster Coordinate System</a></caption>
1459 <thead>
1460 <tr>
1461 <th>cupsBackSide</th>
1462 <th>Tumble Value</th>
1463 <th>Image Presentation</th>
1464 </tr>
1465 </thead>
1466 <tbody>
1467 <tr>
1468 <td><code>Normal</code></td>
1469 <td><code>false</code></td>
1470 <td>Left-to-right, top-to-bottom</td>
1471 </tr>
1472 <tr>
1473 <td><code>Normal</code></td>
1474 <td><code>true</code></td>
1475 <td>Left-to-right, top-to-bottom</td>
1476 </tr>
1477 <tr>
1478 <td><code>ManualTumble</code></td>
1479 <td><code>false</code></td>
1480 <td>Left-to-right, top-to-bottom</td>
1481 </tr>
1482 <tr>
1483 <td><code>ManualTumble</code></td>
1484 <td><code>true</code></td>
1485 <td>Right-to-left, bottom-to-top</td>
1486 </tr>
1487 <tr>
1488 <td><code>Rotated</code></td>
1489 <td><code>false</code></td>
1490 <td>Right-to-left, bottom-to-top</td>
1491 </tr>
1492 <tr>
1493 <td><code>Rotated</code></td>
1494 <td><code>true</code></td>
1495 <td>Right-to-left, top-to-bottom</td>
1496 </tr>
1497 <tr>
1498 <td><code>Flipped</code> *</td>
1499 <td><code>false</code></td>
1500 <td>Left-to-right, bottom-to-top</td>
1501 </tr>
1502 <tr>
1503 <td><code>Flipped</code> *</td>
1504 <td><code>true</code></td>
1505 <td>Right-to-left, top-to-bottom</td>
1506 </tr>
1507 </tbody>
1508 </table>
1509 </div>
1510
1511 <p><em>* - Not supported in OS X 10.5.x and earlier</em></p>
1512
1513 <div class='figure'><table summary='Back side images'>
1514 <caption>Figure 1: Back side images</caption>
1515 <tr><td><img src='../images/raster.png' width='624' height='448' alt='Back side images'></td></tr>
1516 </table></div>
1517
1518 <p>Examples:</p>
1519
1520 <pre class='command'>
1521 <em>*% Flip the page image for the back side of duplexed output</em>
1522 *cupsBackSide: Flipped
1523
1524 <em>*% Rotate the page image for the back side of duplexed output</em>
1525 *cupsBackSide: Rotated
1526 </pre>
1527
1528 <p>Also see the related <a href='#APDuplexRequiresFlippedMargin'><tt>APDuplexRequiresFlippedMargin</tt></a>
1529 keyword.</p>
1530
1531 <h3><span class='info'>CUPS 1.4/OS X 10.6</span><a name='cupsCommands'>cupsCommands</a></h3>
1532
1533 <p class='summary'>*cupsCommands: "name name2 ... nameN"</p>
1534
1535 <p>This string keyword specifies the commands that are supported by the
1536 CUPS command file filter for this device. The command names are separated
1537 by whitespace.</p>
1538
1539 <p>Example:</p>
1540
1541 <pre class='command'>
1542 <em>*% Specify the list of commands we support</em>
1543 *cupsCommands: "AutoConfigure Clean PrintSelfTestPage ReportLevels com.vendor.foo"
1544 </pre>
1545
1546
1547 <h3><span class='info'>CUPS 1.3/OS X 10.5</span><a name='cupsEvenDuplex'>cupsEvenDuplex</a></h3>
1548
1549 <p class='summary'>*cupsEvenDuplex: boolean</p>
1550
1551 <p>This boolean keyword notifies the RIP filters that the
1552 destination printer requires an even number of pages when 2-sided
1553 printing is selected. The default value is <code>false</code>.</p>
1554
1555 <p>Example:</p>
1556
1557 <pre class='command'>
1558 <em>*% Always send an even number of pages when duplexing</em>
1559 *cupsEvenDuplex: true
1560 </pre>
1561
1562 <h3><a name='cupsFax'>cupsFax</a></h3>
1563
1564 <p class='summary'>*cupsFax: boolean</p>
1565
1566 <p>This boolean keyword specifies whether the PPD defines a facsimile device. The default is <tt>false</tt>.</p>
1567
1568 <p>Examples:</p>
1569
1570 <pre class='command'>
1571 *cupsFax: true
1572 </pre>
1573
1574 <h3><a name='cupsFilter'>cupsFilter</a></h3>
1575
1576 <p class='summary'>*cupsFilter: "source/type cost program"</p>
1577
1578 <p>This string keyword provides a conversion rule from the
1579 given source type to the printer's native format using the
1580 filter "program". If a printer supports the source type directly,
1581 the special filter program "-" may be specified.</p>
1582
1583 <p>Examples:</p>
1584
1585 <pre class='command'>
1586 <em>*% Standard raster printer driver filter</em>
1587 *cupsFilter: "application/vnd.cups-raster 100 rastertofoo"
1588
1589 <em>*% Plain text filter</em>
1590 *cupsFilter: "text/plain 10 texttofoo"
1591
1592 <em>*% Pass-through filter for PostScript printers</em>
1593 *cupsFilter: "application/vnd.cups-postscript 0 -"
1594 </pre>
1595
1596 <h3><span class='info'>CUPS 1.5</span><a name='cupsFilter2'>cupsFilter2</a></h3>
1597
1598 <p class='summary'>*cupsFilter2: "source/type destination/type cost program"</p>
1599
1600 <p>This string keyword provides a conversion rule from the given source type to the printer's native format using the filter "program". If a printer supports the source type directly, the special filter program "-" may be specified. The destination type is automatically created as needed and is passed to the filters and backend as the FINAL_CONTENT_TYPE value.</p>
1601
1602 <blockquote><b>Note:</b>
1603
1604 <p>The presence of a single <code>cupsFilter2</code> keyword in the PPD file will hide any <code>cupsFilter</code> keywords from the CUPS scheduler. When using <code>cupsFilter2</code> to provide filters specific for CUPS 1.5 and later, provide a <code>cupsFilter2</code> line for every filter and a <code>cupsFilter</code> line for each filter that is compatible with older versions of CUPS.</p>
1605
1606 </blockquote>
1607
1608 <p>Examples:</p>
1609
1610 <pre class='command'>
1611 <em>*% Standard raster printer driver filter</em>
1612 *cupsFilter2: "application/vnd.cups-raster application/vnd.foo 100 rastertofoo"
1613
1614 <em>*% Plain text filter</em>
1615 *cupsFilter2: "text/plain application/vnd.foo 10 texttofoo"
1616
1617 <em>*% Pass-through filter for PostScript printers</em>
1618 *cupsFilter2: "application/vnd.cups-postscript application/postscript 0 -"
1619 </pre>
1620
1621 <h3><span class='info'>Deprecated</span><a name='cupsFlipDuplex'>cupsFlipDuplex</a></h3>
1622
1623 <p class='summary'>*cupsFlipDuplex: boolean</p>
1624
1625 <p>Due to implementation differences between OS X and Ghostscript,
1626 the <tt>cupsFlipDuplex</tt> keyword is deprecated. Instead, use
1627 the <a href='#cupsBackSide'><tt>cupsBackSide</tt></a> keyword to specify
1628 the coordinate system (pixel layout) of the page data on the back side of
1629 duplex pages.</p>
1630
1631 <p>The value <code>true</code> maps to a <tt>cupsBackSide</tt> value
1632 of <code>Rotated</code> on OS X and <code>Flipped</code> with
1633 Ghostscript.</p>
1634
1635 <p>The default value is <code>false</code>.</p>
1636
1637 <blockquote><b>Note:</b>
1638
1639 <p>OS X drivers that previously used
1640 <tt>cupsFlipDuplex</tt> may wish to provide both the old and
1641 new keywords for maximum compatibility, for example:</p>
1642
1643 <pre class='command'>
1644 *cupsBackSide: Rotated
1645 *cupsFlipDuplex: true
1646 </pre>
1647
1648 <p>Similarly, drivers written for other operating systems using
1649 Ghostscript can use:</p>
1650
1651 <pre class='command'>
1652 *cupsBackSide: Flipped
1653 *cupsFlipDuplex: true
1654 </pre></blockquote>
1655
1656 <h3><span class='info'>CUPS 1.3/OS X 10.5</span><a name='cupsIPPFinishings'>cupsIPPFinishings</a></h3>
1657
1658 <p class='summary'>*cupsIPPFinishings number/text: "*Option Choice ..."</p>
1659
1660 <p>This keyword defines a mapping from IPP <code>finishings</code>
1661 values to PPD options and choices.</p>
1662
1663 <p>Examples:</p>
1664
1665 <pre class='command'>
1666 *cupsIPPFinishings 4/staple: "*StapleLocation SinglePortrait"
1667 *cupsIPPFinishings 5/punch: "*PunchMedia Yes *PunchLocation LeftSide"
1668 *cupsIPPFinishings 20/staple-top-left: "*StapleLocation SinglePortrait"
1669 *cupsIPPFinishings 21/staple-bottom-left: "*StapleLocation SingleLandscape"
1670 </pre>
1671
1672 <h3><span class='info'>CUPS 1.3/OS X 10.5</span><a name='cupsIPPReason'>cupsIPPReason</a></h3>
1673
1674 <p class='summary'>*cupsIPPReason reason/Reason Text: "optional URIs"</p>
1675
1676 <p>This optional keyword maps custom
1677 <code>printer-state-reasons</code> keywords that are generated by
1678 the driver to human readable text. The optional URIs string
1679 contains zero or more URIs separated by a newline. Each URI can
1680 be a CUPS server absolute path to a help file under the
1681 scheduler's <code>DocumentRoot</code> directory, a full HTTP URL
1682 ("http://www.domain.com/path/to/help/page.html"), or any other
1683 valid URI which directs the user at additional information
1684 concerning the condition that is being reported.</p>
1685
1686 <p>Since the reason text is limited to 80 characters by the PPD specification, longer text strings can be included by URI-encoding the text with the "text" scheme, for example "text:some%20text". Multiple <code>text</code> URIs are combined by the <tt>ppdLocalizeIPPReason</tt> into a single string that can be displayed to the user.</p>
1687
1688 <p>Examples:</p>
1689
1690 <pre class='command'>
1691 <em>*% Map com.vendor-error to text but no page</em>
1692 *cupsIPPReason com.vendor-error/A serious error occurred: ""
1693
1694 <em>*% Map com.vendor-error to more than 80 characters of text but no page</em>
1695 *cupsIPPReason com.vendor-error/A serious error occurred: "text:Now%20is%20the%20time
1696 text:for%20all%20good%20men%20to%20come%20to%20the%20aid%20of%20their%20country."
1697
1698 <em>*% Map com.vendor-error to text and a local page</em>
1699 *cupsIPPReason com.vendor-error/A serious error occurred: "/help/com.vendor/error.html"
1700
1701 <em>*% Map com.vendor-error to text and a remote page</em>
1702 *cupsIPPReason com.vendor-error/A serious error occurred: "http://www.vendor.com/help"
1703
1704 <em>*% Map com.vendor-error to text and a local, Apple help book, and remote page</em>
1705 *APHelpBook: "file:///Library/Printers/vendor/Help.bundle"
1706 *cupsIPPReason com.vendor-error/A serious error occurred: "/help/com.vendor/error.html
1707 help:anchor='com.vendor-error'%20bookID=Vendor%20Help
1708 http://www.vendor.com/help"
1709 *End
1710 </pre>
1711
1712 <h3><span class='info'>CUPS 1.5</span><a name='cupsIPPSupplies'>cupsIPPSupplies</a></h3>
1713
1714 <p class='summary'>*cupsIPPSupplies: boolean</p>
1715
1716 <p>This keyword tells the IPP backend whether it should report the current marker-xxx supply attribute values. The default value is <code>True</code>.
1717
1718 <p>Example:</p>
1719
1720 <pre class='command'>
1721 <em>*% Do not use IPP marker-xxx attributes to report supply levels</em>
1722 *cupsIPPSupplies: False
1723 </pre>
1724
1725
1726 <h3><span class='info'>CUPS 1.7/OS X 10.9</span><a name='cupsJobAccountId'>cupsJobAccountId</a></h3>
1727
1728 <p class='summary'>*cupsJobAccountId: boolean</p>
1729
1730 <p>This keyword defines whether the printer accepts the job-account-id IPP attribute.</p>
1731
1732 <p>Example:</p>
1733
1734 <pre class='command'>
1735 <em>*% Specify the printer accepts the job-account-id IPP attribute.</em>
1736 *cupsJobAccountId: True
1737 </pre>
1738
1739
1740 <h3><span class='info'>CUPS 1.7/OS X 10.9</span><a name='cupsJobAccountingUserId'>cupsJobAccountingUserId</a></h3>
1741
1742 <p class='summary'>*cupsJobAccountingUserId: boolean</p>
1743
1744 <p>This keyword defines whether the printer accepts the job-accounting-user-id IPP attribute.</p>
1745
1746 <p>Example:</p>
1747
1748 <pre class='command'>
1749 <em>*% Specify the printer accepts the job-accounting-user-id IPP attribute.</em>
1750 *cupsJobAccountingUserId: True
1751 </pre>
1752
1753
1754 <h3><span class='info'>CUPS 1.7/OS X 10.9</span><a name='cupsJobPassword'>cupsJobPassword</a></h3>
1755
1756 <p class='summary'>*cupsJobPassword: "format"</p>
1757
1758 <p>This keyword defines the format of the job-password IPP attribute, if supported by the printer. Currently the only supported format is "1111" indicating a 4-digit PIN code.</p>
1759
1760 <p>Example:</p>
1761
1762 <pre class='command'>
1763 <em>*% Specify the printer supports 4-digit PIN codes.</em>
1764 *cupsJobPassword: "1111"
1765 </pre>
1766
1767
1768 <h3><span class='info'>CUPS 1.2/OS X 10.5</span><a name='cupsLanguages'>cupsLanguages</a></h3>
1769
1770 <p class='summary'>*cupsLanguages: "locale list"</p>
1771
1772 <p>This keyword describes which language localizations are
1773 included in the PPD. The "locale list" string is a space-delimited
1774 list of locale names ("en", "en_US", "fr_CA", etc.)</p>
1775
1776 <p>Example:</p>
1777
1778 <pre class='command'>
1779 <em>*% Specify Canadian, UK, and US English, and Canadian and French French</em>
1780 *cupsLanguages: "en_CA en_UK en_US fr_CA fr_FR"
1781 </pre>
1782
1783
1784 <h3><span class='info'>CUPS 1.7/OS X 10.9</span><a name='cupsMandatory'>cupsMandatory</a></h3>
1785
1786 <p class='summary'>*cupsMandatory: "attribute1 attribute2 ... attributeN"</p>
1787
1788 <p>This keyword defines a list of IPP attributes that must be provided when submitting a print job creation request.</p>
1789
1790 <p>Example:</p>
1791
1792 <pre class='command'>
1793 <em>*% Specify that the user must supply a job-password</em>
1794 *cupsMandatory: "job-password job-password-encryption"
1795 </pre>
1796
1797
1798 <h3><a name='cupsManualCopies'>cupsManualCopies</a></h3>
1799
1800 <p class='summary'>*cupsManualCopies: boolean</p>
1801
1802 <p>This boolean keyword notifies the RIP filters that the
1803 destination printer does not support copy generation in
1804 hardware. The default value is <code>false</code>.</p>
1805
1806 <p>Example:</p>
1807
1808 <pre class='command'>
1809 <em>*% Tell the RIP filters to generate the copies for us</em>
1810 *cupsManualCopies: true
1811 </pre>
1812
1813 <h3><span class='info'>CUPS 1.4/OS X 10.6</span><a name='cupsMarkerName'>cupsMarkerName</a></h3>
1814
1815 <p class='summary'>*cupsMarkerName/Name Text: ""</p>
1816
1817 <p>This optional keyword maps <code>marker-names</code> strings that are
1818 generated by the driver to human readable text.</p>
1819
1820 <p>Examples:</p>
1821
1822 <pre class='command'>
1823 <em>*% Map cyanToner to "Cyan Toner"</em>
1824 *cupsMarkerName cyanToner/Cyan Toner: ""
1825 </pre>
1826
1827 <h3><span class='info'>CUPS 1.4/OS X 10.6</span><a name='cupsMarkerNotice'>cupsMarkerNotice</a></h3>
1828
1829 <p class='summary'>*cupsMarkerNotice: "disclaimer text"</p>
1830
1831 <p>This optional keyword provides disclaimer text for the supply level
1832 information provided by the driver, typically something like "supply levels
1833 are approximate".</p>
1834
1835 <p>Examples:</p>
1836
1837 <pre class='command'>
1838 *cupsMarkerNotice: "Supply levels are approximate."
1839 </pre>
1840
1841 <h3><span class='info'>CUPS 1.6/OS X 10.8</span><a name='cupsMaxCopies'>cupsMaxCopies</a></h3>
1842
1843 <p class='summary'>*cupsMaxCopies: integer</p>
1844
1845 <p>This integer keyword notifies the filters that the destination printer supports up to N copies in hardware. The default value is <code>9999</code>.</p>
1846
1847 <p>Example:</p>
1848
1849 <pre class='command'>
1850 <em>*% Tell the RIP filters we can do up to 99 copies</em>
1851 *cupsMaxCopies: 99
1852 </pre>
1853
1854 <h3><a name='cupsModelNumber'>cupsModelNumber</a></h3>
1855
1856 <p class='summary'>*cupsModelNumber: number</p>
1857
1858 <p>This integer keyword specifies a printer-specific model
1859 number. This number can be used by a filter program to adjust
1860 the output for a specific model of printer.</p>
1861
1862 <p>Example:</p>
1863
1864 <pre class='command'>
1865 <em>*% Specify an integer for a driver-specific model number</em>
1866 *cupsModelNumber: 1234
1867 </pre>
1868
1869
1870 <h3><span class='info'>CUPS 1.3/OS X 10.5</span><a name='cupsPJLCharset'>cupsPJLCharset</a></h3>
1871
1872 <p class='summary'>*cupsPJLCharset: "ISO character set name"</p>
1873
1874 <p>This string keyword specifies the character set that is used
1875 for strings in PJL commands. If not specified, US-ASCII is
1876 assumed.</p>
1877
1878 <p>Example:</p>
1879
1880 <pre class='command'>
1881 <em>*% Specify UTF-8 is used in PJL strings</em>
1882 *cupsPJLCharset: "UTF-8"
1883 </pre>
1884
1885 <h3><span class='info'>CUPS 1.4/OS X 10.6</span><a name='cupsPJLDisplay'>cupsPJLDisplay</a></h3>
1886
1887 <p class='summary'>*cupsPJLDisplay: "what"</p>
1888
1889 <p>This optional keyword specifies which command is used to display the
1890 job ID, name, and user on the printer's control panel. "What" is either "none"
1891 to disable this functionality, "job" to use "@PJL JOB DISPLAY", or "rdymsg"
1892 to use "@PJL RDYMSG DISPLAY". The default is "job".</p>
1893
1894 <p>Examples:</p>
1895
1896 <pre class='command'>
1897 <em>*% Display job information using @PJL SET RDYMSG DISPLAY="foo"</em>
1898 *cupsPJLDisplay: "rdymsg"
1899
1900 <em>*% Display job information display</em>
1901 *cupsPJLDisplay: "none"
1902 </pre>
1903
1904 <h3><span class='info'>CUPS 1.2/OS X 10.5</span><a name='cupsPortMonitor'>cupsPortMonitor</a></h3>
1905
1906 <p class='summary'>*cupsPortMonitor urischeme/Descriptive Text: "port monitor"</p>
1907
1908 <p>This string keyword specifies printer-specific "port
1909 monitor" filters that may be used with the printer. The CUPS
1910 scheduler also looks for the <tt>Protocols</tt> keyword to see
1911 if the <tt>BCP</tt> or <tt>TBCP</tt> protocols are supported. If
1912 so, the corresponding port monitor ("bcp" and "tbcp",
1913 respectively) is listed in the printer's
1914 <tt>port-monitor-supported</tt> keyword.</p>
1915
1916 <p>The "urischeme" portion of the keyword specifies the URI scheme
1917 that this port monitor should be used for. Typically this is used to
1918 pre-select a particular port monitor for each type of connection that
1919 is supported by the printer. The "port monitor" string can be "none"
1920 to disable the port monitor for the given URI scheme.</p>
1921
1922 <p>Examples:</p>
1923
1924 <pre class='command'>
1925 <em>*% Specify a PostScript printer that supports the TBCP protocol</em>
1926 *Protocols: TBCP PJL
1927
1928 <em>*% Specify that TBCP should be used for socket connections but not USB</em>
1929 *cupsPortMonitor socket/AppSocket Printing: "tbcp"
1930 *cupsPortMonitor usb/USB Printing: "none"
1931
1932 <em>*% Specify a printer-specific port monitor for an Epson USB printer</em>
1933 *cupsPortMonitor usb/USB Status Monitor: "epson-usb"
1934 </pre>
1935
1936 <h3><span class='info'>CUPS 1.3/OS X 10.5</span><a name='cupsPreFilter'>cupsPreFilter</a></h3>
1937
1938 <p class='summary'>*cupsPreFilter: "source/type cost program"</p>
1939
1940 <p>This string keyword provides a pre-filter rule. The pre-filter
1941 program will be inserted in the conversion chain immediately
1942 before the filter that accepts the given MIME type.</p>
1943
1944 <p>Examples:</p>
1945
1946 <pre class='command'>
1947 <em>*% PDF pre-filter</em>
1948 *cupsPreFilter: "application/pdf 100 mypdfprefilter"
1949
1950 <em>*% PNG pre-filter</em>
1951 *cupsPreFilter: "image/png 0 mypngprefilter"
1952 </pre>
1953
1954
1955 <h3><span class='info'>CUPS 1.5</span><a name='cupsPrintQuality'>cupsPrintQuality</a></h3>
1956
1957 <p class='summary'>*cupsPrintQuality keyword/text: "code"</p>
1958
1959 <p>This UI keyword defines standard print qualities that directly map from the IPP "print-quality" job template keyword. Standard keyword values are "Draft", "Normal", and "High" which are mapped from the IPP "print-quality" values 3, 4, and 5 respectively. Each <code>cupsPrintQuality</code> option typically sets output mode and resolution parameters in the page device dictionary, eliminating the need for separate (and sometimes confusing) output mode and resolution options.</p>
1960
1961 <blockquote><b>Note:</b>
1962
1963 <p>Unlike all of the other keywords defined in this document, <code>cupsPrintQuality</code> is a UI keyword that MUST be enclosed inside the PPD <code>OpenUI</code> and <code>CloseUI</code> keywords.</p>
1964
1965 </blockquote>
1966
1967 <p>Examples:</p>
1968
1969 <pre class='command'>
1970 *OpenUI *cupsPrintQuality/Print Quality: PickOne
1971 *OrderDependency: 10 AnySetup *cupsPrintQuality
1972 *DefaultcupsPrintQuality: Normal
1973 *cupsPrintQuality Draft/Draft: "code"
1974 *cupsPrintQuality Normal/Normal: "code"
1975 *cupsPrintQuality High/Photo: "code"
1976 *CloseUI: *cupsPrintQuality
1977 </pre>
1978
1979 <h3><span class='info'>CUPS 1.5</span><a name='cupsSingleFile'>cupsSingleFile</a></h3>
1980
1981 <p class='summary'>*cupsSingleFile: Boolean</p>
1982
1983 <p>This boolean keyword tells the scheduler whether to print multiple files in a job together or singly. The default is "False" which uses a single instance of the backend for all files in the print job. Setting this keyword to "True" will result in separate instances of the backend for each file in the print job.</p>
1984
1985 <p>Examples:</p>
1986
1987 <pre class='command'>
1988 <em>*% Send all print data to a single backend</em>
1989 *cupsSingleFile: False
1990
1991 <em>*% Send each file using a separate backend</em>
1992 *cupsSingleFile: True
1993 </pre>
1994
1995 <h3><span class='info'>CUPS 1.4/OS X 10.6</span><a name='cupsSNMPSupplies'>cupsSNMPSupplies</a></h3>
1996
1997 <p class='summary'>*cupsSNMPSupplies: boolean</p>
1998
1999 <p>This keyword tells the standard network backends whether they should query
2000 the standard SNMP Printer MIB OIDs for supply levels. The default value is
2001 <code>True</code>.
2002
2003 <p>Example:</p>
2004
2005 <pre class='command'>
2006 <em>*% Do not use SNMP queries to report supply levels</em>
2007 *cupsSNMPSupplies: False
2008 </pre>
2009
2010 <h3><a name='cupsVersion'>cupsVersion</a></h3>
2011
2012 <p class='summary'>*cupsVersion: major.minor</p>
2013
2014 <p>This required keyword describes which version of the CUPS
2015 PPD file extensions was used. Currently it must be the string
2016 "1.0", "1.1", "1.2", "1.3", "1.4", "1.5", or "1.6".</p>
2017
2018 <p>Example:</p>
2019
2020 <pre class='command'>
2021 <em>*% Specify a CUPS 1.2 driver</em>
2022 *cupsVersion: "1.2"
2023 </pre>
2024
2025
2026 <h3><span class="info">CUPS 1.6/OS X 10.8</span><a name="JCLToPDFInterpreter">JCLToPDFInterpreter</a></h3>
2027
2028 <p class="summary">*JCLToPDFInterpreter: "JCL"</p>
2029
2030 <p>This keyword provides the JCL command to insert a PDF job file into a printer-ready data stream. The JCL command is added after the <tt>JCLBegin</tt> value and any commands for JCL options in the PPD file.</p>
2031
2032 <p>Example:</p>
2033
2034 <pre class='command'>
2035 <em>*% PJL command to start the PDF interpreter</em>
2036 *JCLToPDFInterpreter: "@PJL ENTER LANGUAGE = PDF&lt;0A&gt;"
2037 </pre>
2038
2039
2040 <h2 class='title'><a name='MACOSX'>OS X Attributes</a></h2>
2041
2042 <h3><span class='info'>OS X 10.3</span><a name='APDialogExtension'>APDialogExtension</a></h3>
2043
2044 <p class='summary'>*APDialogExtension: "/Library/Printers/vendor/filename.plugin"</p>
2045
2046 <p>This keyword defines additional option panes that are displayed in the
2047 print dialog. Each keyword adds one or more option panes. See the "OutputBinsPDE"
2048 example and <a href='http://developer.apple.com/qa/qa2004/qa1352.html'>Apple
2049 Technical Q&amp;A QA1352</a> for information on writing your own print dialog
2050 plug-ins.</p>
2051
2052 <blockquote><b>Note:</b>
2053
2054 <p>Starting with OS X 10.5, each plug-in must be compiled "4-way fat"
2055 (32-bit and 64-bit for both PowerPC and Intel) with garbage collection enabled
2056 in order to be usable with all applications.</p>
2057
2058 </blockquote>
2059
2060 <p>Examples:</p>
2061
2062 <pre class='command'>
2063 *% Add two panes for finishing and driver options
2064 *APDialogExtension: "/Library/Printers/vendor/finishing.plugin"
2065 *APDialogExtension: "/Library/Printers/vendor/options.plugin"
2066 </pre>
2067
2068 <h3><span class='info'>OS X 10.4</span><a name='APDuplexRequiresFlippedMargin'>APDuplexRequiresFlippedMargin</a></h3>
2069
2070 <p class='summary'>*APDuplexRequiresFlippedMargin: boolean</p>
2071
2072 <p>This boolean keyword notifies the RIP filters that the
2073 destination printer requires the top and bottom margins of the
2074 <tt>ImageableArea</tt> to be swapped for the back page. The
2075 default is <tt>true</tt> when <tt>cupsBackSide</tt> is <tt>Flipped</tt>
2076 and <tt>false</tt> otherwise. <a href='#TABLE_2'>Table 2</a> shows how
2077 <tt>APDuplexRequiresFlippedMargin</tt> interacts with <tt>cupsBackSide</tt>
2078 and the <tt>Tumble</tt> page attribute.</p>
2079
2080 <div class='table'>
2081 <table width='80%' summary='Margin Flipping Modes'>
2082 <caption>Table 2: <a name='TABLE_2'>Margin Flipping Modes</a></caption>
2083 <thead>
2084 <tr>
2085 <th>APDuplexRequiresFlippedMargin</th>
2086 <th>cupsBackSide</th>
2087 <th>Tumble Value</th>
2088 <th>Margins</th>
2089 </tr>
2090 </thead>
2091 <tbody>
2092 <tr>
2093 <td>false</td>
2094 <td>any</td>
2095 <td>any</td>
2096 <td>Normal</td>
2097 </tr>
2098 <tr>
2099 <td>any</td>
2100 <td>Normal</td>
2101 <td>any</td>
2102 <td>Normal</td>
2103 </tr>
2104 <tr>
2105 <td>true</td>
2106 <td>ManualDuplex</td>
2107 <td>false</td>
2108 <td>Normal</td>
2109 </tr>
2110 <tr>
2111 <td>true</td>
2112 <td>ManualDuplex</td>
2113 <td>true</td>
2114 <td>Flipped</td>
2115 </tr>
2116 <tr>
2117 <td>true</td>
2118 <td>Rotated</td>
2119 <td>false</td>
2120 <td>Flipped</td>
2121 </tr>
2122 <tr>
2123 <td>true</td>
2124 <td>Rotated</td>
2125 <td>true</td>
2126 <td>Normal</td>
2127 </tr>
2128 <tr>
2129 <td>true or unspecified</td>
2130 <td>Flipped</td>
2131 <td>any</td>
2132 <td>Flipped</td>
2133 </tr>
2134 </tbody>
2135 </table></div>
2136
2137 <p>Example:</p>
2138
2139 <pre class='command'>
2140 <em>*% Rotate the back side images</em>
2141 *cupsBackSide: Rotated
2142
2143 <em>*% Don't swap the top and bottom margins for the back side</em>
2144 *APDuplexRequiresFlippedMargin: false
2145 </pre>
2146
2147 <p>Also see the related <a href='#cupsBackSide'><tt>cupsBackSide</tt></a>
2148 keyword.</p>
2149
2150 <h3><a name='APHelpBook'>APHelpBook</a></h3>
2151
2152 <p class='summary'>*APHelpBook: "bundle URL"</p>
2153
2154 <p>This string keyword specifies the Apple help book bundle to use when
2155 looking up IPP reason codes for this printer driver. The
2156 <a href='#cupsIPPReason'><tt>cupsIPPReason</tt></a> keyword maps
2157 "help" URIs to this file.</p>
2158
2159 <p>Example:</p>
2160
2161 <pre class='command'>
2162 *APHelpBook: "file:///Library/Printers/vendor/Help.bundle"
2163 </pre>
2164
2165 <h3><span class='info'>OS X 10.6</span><a name='APICADriver'>APICADriver</a></h3>
2166
2167 <p class='summary'>*APICADriver: boolean</p>
2168
2169 <p>This keyword specifies whether the device has a matching Image Capture
2170 Architecture (ICA) driver for scanning. The default is <tt>False</tt>.</p>
2171
2172 <p>Examples:</p>
2173
2174 <pre class='command'>
2175 *APICADriver: True
2176 *APScanAppBundleID: "com.apple.ImageCaptureApp"
2177 </pre>
2178
2179 <h3><span class='info'>OS X 10.3</span><a name='APPrinterIconPath'>APPrinterIconPath</a></h3>
2180
2181 <p class='summary'>*APPrinterIconPath: "/Library/Printers/vendor/filename.icns"</p>
2182
2183 <p>This keyword defines the location of a printer icon file to use when
2184 displaying the printer. The file must be in the Apple icon format.</p>
2185
2186 <p>Examples:</p>
2187
2188 <pre class='command'>
2189 *% Apple icon file
2190 *APPrinterIconPath: "/Library/Printers/vendor/Icons/filename.icns"
2191 </pre>
2192
2193 <h3><span class='info'>OS X 10.4</span><a name='APPrinterLowInkTool'>APPrinterLowInkTool</a></h3>
2194
2195 <p class='summary'>*APPrinterLowInkTool: "/Library/Printers/vendor/program"</p>
2196
2197 <p>This keyword defines an program that checks the ink/toner/marker levels
2198 on a printer, returning an XML document with those levels. See the "InkTool"
2199 example and
2200 <a href='http://developer.apple.com/technotes/tn2005/tn2144.html'>Apple
2201 Technical Note TN2144</a> for more information.</p>
2202
2203 <p>Examples:</p>
2204
2205 <pre class='command'>
2206 *% Use a vendor monitoring program
2207 *APPrinterLowInkTool: "/Library/Printers/vendor/Tools/lowinktool"
2208 </pre>
2209
2210 <h3><span class='info'>OS X 10.5</span><a name='APPrinterPreset'>APPrinterPreset</a></h3>
2211
2212 <p class='summary'>*APPrinterPreset name/text: "*Option Choice ..."</p>
2213
2214 <p>This keyword defines presets for multiple options that show up
2215 in the print dialog of applications (such as iPhoto) that set the job
2216 style hint to <tt>NSPrintPhotoJobStyleHint</tt>. Each preset maps to one or
2217 more pairs of PPD options and choices as well as providing key/value data for
2218 the application. The following standard preset names are currently defined:</p>
2219
2220 <ul>
2221
2222 <li><code>General_with_Paper_Auto-Detect</code>; Normal quality general printing with auto-detected media.</li>
2223
2224 <li><code>General_with_Paper_Auto-Detect_-_Draft</code>; Draft quality general printing with auto-detected media.</li>
2225
2226 <li><code>General_on_Plain_Paper</code>; Normal quality general printing on plain paper.</li>
2227
2228 <li><code>General_on_Plain_Paper_-_Draft</code>; Draft quality general printing on plain paper.</li>
2229
2230 <li><code>Photo_with_Paper_Auto-Detect</code>; Normal quality photo printing with auto-detected media.</li>
2231
2232 <li><code>Photo_with_Paper_Auto-Detect_-_Fine</code>; High quality photo printing with auto-detected media.</li>
2233
2234 <li><code>Photo_on_Plain_Paper</code>; Normal quality photo printing on plain paper.</li>
2235
2236 <li><code>Photo_on_Plain_Paper_-_Fine</code>; High quality photo printing on plain paper.</li>
2237
2238 <li><code>Photo_on_Photo_Paper</code>; Normal quality photo printing on glossy photo paper.</li>
2239
2240 <li><code>Photo_on_Photo_Paper_-_Fine</code>; High quality photo printing on glossy photo paper.</li>
2241
2242 <li><code>Photo_on_Matte_Paper</code>; Normal quality photo printing on matte paper.</li>
2243
2244 <li><code>Photo_on_Matte_Paper_-_Fine</code>; High quality photo printing on matte paper.</li>
2245
2246 </ul>
2247
2248 <p>The value string consists of pairs of keywords, either an option name and
2249 choice (*MainKeyword OptionKeyword) or a preset identifier and value
2250 (com.apple.print.preset.foo value). The following preset identifiers are currently used:</p>
2251
2252 <ul>
2253
2254 <li><code>com.apple.print.preset.graphicsType</code>; specifies the type of printing used for this printing - "General" for general purpose printing and "Photo" for photo printing.</li>
2255
2256 <li><code>com.apple.print.preset.media-front-coating</code>; specifies the media type selected by this preset - "none" (plain paper), "glossy", "high-gloss", "semi-gloss", "satin", "matte", and "autodetect".</li>
2257
2258 <li><code>com.apple.print.preset.output-mode</code>; specifies the output mode for this preset - "color" (default for color printers) or "monochrome" (grayscale, default for B&amp;W printers).</li>
2259
2260 <li><code>com.apple.print.preset.quality</code>; specifies the overall print quality selected by this preset - "low" (draft), "mid" (normal), or "high".</li>
2261
2262 </ul>
2263
2264 <p>Presets, like options, can also be localized in multiple languages.</p>
2265
2266 <p>Examples:</p>
2267
2268 <pre class='command'>
2269 *APPrinterPreset Photo_on_Photo_Paper/Photo on Photo Paper: "
2270 *MediaType Glossy
2271 *ColorModel RGB
2272 *Resolution 300dpi
2273 com.apple.print.preset.graphicsType Photo
2274 com.apple.print.preset.quality mid
2275 com.apple.print.preset.media-front-coating glossy"
2276 *End
2277 *fr.APPrinterPreset Photo_on_Photo_Paper/Photo sur papier photographique: ""
2278 </pre>
2279
2280 <h3><span class='info'>OS X 10.3</span><a name='APPrinterUtilityPath'>APPrinterUtilityPath</a></h3>
2281
2282 <p class='summary'>*APPrinterPrinterUtilityPath: "/Library/Printers/vendor/filename.app"</p>
2283
2284 <p>This keyword defines a GUI application that can be used to do printer
2285 maintenance functions such as cleaning the print head(s). See ... for more
2286 information.</p>
2287
2288 <p>Examples:</p>
2289
2290 <pre class='command'>
2291 *% Define the printer utility application
2292 *APPrinterPrinterUtilityPath: "/Library/Printers/vendor/Tools/utility.app"
2293 </pre>
2294
2295 <h3><span class='info'>OS X 10.6</span><a name='APScannerOnly'>APScannerOnly</a></h3>
2296
2297 <p class='summary'>*APScannerOnly: boolean</p>
2298
2299 <p>This keyword specifies whether the device has scanning but no printing
2300 capabilities. The default is <tt>False</tt>.</p>
2301
2302 <p>Examples:</p>
2303
2304 <pre class='command'>
2305 *APICADriver: True
2306 *APScannerOnly: True
2307 </pre>
2308
2309 <h3><span class='info'>OS X 10.3</span><a name='APScanAppBundleID'>APScanAppBundleID</a></h3>
2310
2311 <p class='summary'>*APScanAppBundleID: "bundle ID"</p>
2312
2313 <p>This keyword defines the application to use when scanning pages from
2314 the device.</p>
2315
2316 <p>Examples:</p>
2317
2318 <pre class='command'>
2319 *APICADriver: True
2320 *APScanAppBundleID: "com.apple.ImageCaptureApp"
2321 </pre>
2322
2323
2324 <h2 class='title'><a name='HISTORY'>Change History</a></h2>
2325
2326 <h3>Changes in CUPS 1.7</h3>
2327
2328 <ul>
2329
2330 <li>Added <a href="#cupsJobAccountId"><tt>cupsJobAccountId</tt></a>,
2331 <a href="#cupsJobAccountingUserId"><tt>cupsJobAccountingUserId</tt></a>,
2332 <a href="#cupsJobPassword"><tt>cupsJobPassword</tt></a>,
2333 <a href="#cupsMandatory"><tt>cupsMandatory</tt></a> keywords.</li>
2334
2335 </ul>
2336
2337
2338 <h3>Changes in CUPS 1.6</h3>
2339
2340 <ul>
2341
2342 <li>Added <a href="#cupsPageSizeCategory"><tt>cupsPageSizeCategory</tt></a> keyword (originally defined in CUPS 1.4).</li>
2343
2344 <li>Added <a href="#cupsMaxCopies"><tt>cupsMaxCopies</tt></a> keyword.</li>
2345
2346 <li>Documented <a href="#JCLToPDFInterpreter"><tt>JCLToPDFInterpreter</tt></a> keyword.</li>
2347
2348 <li>Updated <a href="#cupsVersion"><tt>cupsVersion</tt></a> keyword documentation to list all current releases of CUPS.</li>
2349
2350 </ul>
2351
2352
2353 <h3>Changes in CUPS 1.5</h3>
2354
2355 <ul>
2356
2357 <li>Changes all instances of PPD attributes to PPD keywords, to be consistent with the parent specification from Adobe.</li>
2358
2359 </ul>
2360
2361
2362 <h3>Changes in CUPS 1.4.5</h3>
2363
2364 <ul>
2365
2366 <li>Added <a href='#cupsPrintQuality'><tt>cupsPrintQuality</tt></a> UI keyword.</li>
2367
2368 <li>Added new properties and values for the <a href='#APPrinterPreset'><tt>APPrinterPreset</tt></a> keyword.</li>
2369
2370 </ul>
2371
2372
2373 <h3>Changes in CUPS 1.4</h3>
2374
2375 <ul>
2376
2377 <li>Added <a href='#APICADriver'><tt>APICADriver</tt></a>
2378 keyword.</li>
2379
2380 <li>Added <a href='#cupsCommands'><tt>cupsCommands</tt></a>
2381 keyword.</li>
2382
2383 <li>Added <a href='#cupsMarkerName'><tt>cupsMarkerName</tt></a>
2384 keyword.</li>
2385
2386 <li>Added <a href='#cupsMarkerNotice'><tt>cupsMarkerNotice</tt></a>
2387 keyword.</li>
2388
2389 <li>Added <a href='#cupsPJLDisplay'><tt>cupsPJLDisplay</tt></a>
2390 keyword.</li>
2391
2392 <li>Added <a href='#cupsSNMPSupplies'><tt>cupsSNMPSupplies</tt></a>
2393 keyword.</li>
2394
2395 <li>Added <a href='#cupsUIResolver'><tt>cupsUIResolver</tt></a> and
2396 <a href='#cupsUIConstraints'><tt>cupsUIConstraints</tt></a>
2397 keywords.</li>
2398
2399 <li>Added
2400 <a href='#cupsMediaQualifier2'><tt>cupsMediaQualifier2</tt></a>,
2401 <a href='#cupsMediaQualifier3'><tt>cupsMediaQualifier3</tt></a>,
2402 <a href='#cupsMinSize'><tt>cupsMinSize</tt></a>, and
2403 <a href='#cupsMaxSize'><tt>cupsMaxSize</tt></a> keywords.</li>
2404
2405 </ul>
2406
2407
2408 <h3>Changes in CUPS 1.3.1</h3>
2409
2410 <ul>
2411
2412 <li>Added missing OS X <tt>AP</tt> keywords.</li>
2413
2414 <li>Added section on auto-configuration including the
2415 <tt>OID<i>MainKeyword</i></tt> and <tt>?<i>MainKeyword</i></tt>
2416 keywords.</li>
2417
2418 <li>Minor reorganization.</li>
2419
2420 </ul>
2421
2422
2423 <h3>Changes in CUPS 1.3</h3>
2424
2425 <ul>
2426
2427 <li>Added <a href='#cupsBackSide'><tt>cupsBackSide</tt></a> and
2428 deprecated <a href='#cupsFlipDuplex'><tt>cupsFlipDuplex</tt></a>.</li>
2429
2430 <li>Added text URI information to
2431 <a href='#cupsIPPReason'><tt>cupsIPPReason</tt></a> documentation.</li>
2432
2433 <li>Added <a href='#APPrinterPreset'><tt>APPrinterPreset</tt></a>,
2434 <a href='#cupsIPPFinishings'><tt>cupsIPPFinishings</tt></a>, and
2435 <a href='#cupsPreFilter'><tt>cupsPreFilter</tt></a> keywords.</li>
2436
2437 <li>Added discussion of custom option code, sample
2438 <tt>CustomPageSize</tt> code, and "do not use dict and put" note.</li>
2439
2440 </ul>
2441
2442 <h3>Changes in CUPS 1.2.8</h3>
2443
2444 <ul>
2445
2446 <li>Added section on supported PostScript commands for raster
2447 drivers</li>
2448
2449 </ul>
2450
2451 <h3>Changes in CUPS 1.2</h3>
2452
2453 <ul>
2454
2455 <li>Added globalization support keywords</li>
2456
2457 <li>Added custom option values support</li>
2458
2459 <li>Added <a href='#APHelpBook'><tt>APHelpBook</tt></a> keyword</li>
2460
2461 <li>Added <a href='#APDuplexRequiresFlippedMargin'><tt>APDuplexRequiresFlippedMargin</tt></a>
2462 keyword</li>
2463
2464 <li>Added <a href='#cupsICCProfile'><tt>cupsICCProfile</tt></a> keyword</li>
2465
2466 <li>Added <a href='#cupsIPPReason'><tt>cupsIPPReason</tt></a> keyword</li>
2467
2468 <li>Added <a href='#cupsLanguages'><tt>cupsLanguages</tt></a> keyword</li>
2469
2470 <li>Added <a href='#cupsPortMonitor'><tt>cupsPortMonitor</tt></a> keyword</li>
2471
2472 <li>Removed <tt>cupsProtocol</tt> keyword</li>
2473
2474 </ul>
2475
2476 <h3>Changes in CUPS 1.1</h3>
2477
2478 <ul>
2479
2480 <li>Added <a href='#cupsFlipDuplex'><tt>cupsFlipDuplex</tt></a> keyword</li>
2481
2482 <li>Added <tt>cupsProtocol</tt> keyword</li>
2483
2484 </ul>
2485 </div>
2486 </body>
2487 </html>