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