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