]> git.ipfire.org Git - thirdparty/cups.git/blame - doc/help/raster-driver.html
Save work on new CUPS Programming Manual.
[thirdparty/cups.git] / doc / help / raster-driver.html
CommitLineData
abacc52b 1<!doctype html>
8b450588 2<html>
e4572d57 3<!-- SECTION: Programming -->
abacc52b
MS
4 <head>
5 <title>Developing Raster Printer Drivers</title>
6 <meta name="keywords" content="Programming">
7 <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
8 <meta name="creator" content="Mini-XML v2.11">
9 <meta name="author" content="Unknown">
10 <meta name="copyright" content="Unknown">
11 <style type="text/css"><!--
8b450588
MS
12BODY {
13 font-family: lucida grande, geneva, helvetica, arial, sans-serif;
14}
15
16H1, H2, H3, H4, H5, H6, P, TD, TH {
17 font-family: lucida grande, geneva, helvetica, arial, sans-serif;
18}
19
20KBD {
21 font-family: monaco, courier, monospace;
22 font-weight: bold;
23}
24
25PRE {
26 font-family: monaco, courier, monospace;
27}
e4572d57 28
8b450588 29PRE.command {
10d09e33 30 border: dotted thin #7f7f7f;
8b450588 31 margin-left: 36pt;
10d09e33 32 padding: 10px;
8b450588
MS
33}
34
f11a948a
MS
35P.compact {
36 margin: 0;
37}
38
8b450588
MS
39P.example {
40 font-style: italic;
41 margin-left: 36pt;
42}
ca6b43fc 43
240214ef
MS
44DL.man DD {
45 margin-left: 5em;
46}
47
48DL.man DT {
49 margin-left: 0;
50}
51
52PRE.man {
53 margin: 0;
54}
55
8b450588
MS
56PRE.example {
57 background: #eeeeee;
58 border: dotted thin #999999;
59 margin-left: 36pt;
178cb736 60 padding: 10pt;
8b450588
MS
61}
62
63PRE.command EM, PRE.example EM {
64 font-family: lucida grande, geneva, helvetica, arial, sans-serif;
65}
66
67P.command {
68 font-family: monaco, courier, monospace;
69 margin-left: 36pt;
70}
71
72P.formula {
73 font-style: italic;
74 margin-left: 36pt;
75}
76
77BLOCKQUOTE {
178cb736 78 background: #eeeeee;
8b450588
MS
79 border: solid thin #999999;
80 padding: 10pt;
81}
82
83A IMG {
84 border: none;
85}
86
87A:link:hover IMG {
88 background: #f0f0f0;
89 border-radius: 10px;
90 -moz-border-radius: 10px;
91}
92
93A:link, A:visited {
ca6b43fc 94 font-weight: inherit;
8b450588
MS
95 text-decoration: none;
96}
97
98A:link:hover, A:visited:hover, A:active {
99 text-decoration: underline;
100}
101
102SUB, SUP {
103 font-size: 50%;
104}
105
106TR.data, TD.data, TR.data TD {
107 margin-top: 10pt;
108 padding: 5pt;
109 border-bottom: solid 1pt #999999;
110}
111
112TR.data TH {
113 border-bottom: solid 1pt #999999;
114 padding-top: 10pt;
115 padding-left: 5pt;
116 text-align: left;
117}
118
119DIV.table TABLE {
120 border: solid thin #999999;
121 border-collapse: collapse;
122 border-spacing: 0;
123 margin-left: auto;
124 margin-right: auto;
125}
126
127DIV.table CAPTION {
128 caption-side: top;
129 font-size: 120%;
130 font-style: italic;
131 font-weight: bold;
132 margin-left: auto;
133 margin-right: auto;
134}
135
136DIV.table TABLE TD {
137 border: solid thin #cccccc;
138 padding-top: 5pt;
139}
140
141DIV.table TABLE TH {
142 background: #cccccc;
143 border: none;
144 border-bottom: solid thin #999999;
145}
146
147DIV.figure TABLE {
148 margin-left: auto;
149 margin-right: auto;
150}
151
152DIV.figure CAPTION {
153 caption-side: bottom;
154 font-size: 120%;
155 font-style: italic;
156 font-weight: bold;
157 margin-left: auto;
158 margin-right: auto;
159}
160
161TH.label {
162 text-align: right;
163 vertical-align: top;
164}
165
166TH.sublabel {
167 text-align: right;
168 font-weight: normal;
169}
170
171HR {
172 border: solid thin;
173}
174
175SPAN.info {
176 background: black;
177 border: thin solid black;
178 color: white;
179 font-size: 80%;
180 font-style: italic;
181 font-weight: bold;
182 white-space: nowrap;
183}
184
185H2 SPAN.info, H3 SPAN.info, H4 SPAN.info {
186 float: right;
187 font-size: 100%;
188}
189
178cb736
MS
190H1.title {
191}
192
8b450588
MS
193H2.title, H3.title {
194 border-bottom: solid 2pt #000000;
195}
196
197DIV.indent, TABLE.indent {
198 margin-top: 2em;
199 margin-left: auto;
200 margin-right: auto;
201 width: 90%;
202}
203
204TABLE.indent {
205 border-collapse: collapse;
206}
207
208TABLE.indent TD, TABLE.indent TH {
209 padding: 0;
210}
211
212TABLE.list {
213 border-collapse: collapse;
214 margin-left: auto;
215 margin-right: auto;
216 width: 90%;
217}
218
219TABLE.list TH {
220 background: white;
221 border-bottom: solid thin #cccccc;
222 color: #444444;
223 padding-top: 10pt;
224 padding-left: 5pt;
225 text-align: left;
226 vertical-align: bottom;
227 white-space: nowrap;
228}
229
230TABLE.list TH A {
231 color: #4444cc;
232}
233
234TABLE.list TD {
235 border-bottom: solid thin #eeeeee;
236 padding-top: 5pt;
237 padding-left: 5pt;
238}
239
240TABLE.list TR:nth-child(even) {
241 background: #f8f8f8;
242}
243
244TABLE.list TR:nth-child(odd) {
245 background: #f4f4f4;
246}
247
248DT {
249 margin-left: 36pt;
250 margin-top: 12pt;
251}
252
253DD {
254 margin-left: 54pt;
255}
256
257DL.category DT {
258 font-weight: bold;
259}
260
261P.summary {
262 margin-left: 36pt;
263 font-family: monaco, courier, monospace;
264}
265
266DIV.summary TABLE {
267 border: solid thin #999999;
268 border-collapse: collapse;
269 border-spacing: 0;
270 margin: 10px;
271}
272
273DIV.summary TABLE TD, DIV.summary TABLE TH {
274 border: solid thin #999999;
275 padding: 5px;
276 text-align: left;
277 vertical-align: top;
278}
279
280DIV.summary TABLE THEAD TH {
281 background: #eeeeee;
282}
283
284/* API documentation styles... */
285div.body h1 {
286 margin: 0;
287}
288div.body h2 {
289 margin-top: 1.5em;
290}
291div.body h3, div.body h4, div.body h5 {
292 margin-bottom: 0.5em;
293 margin-top: 1.5em;
294}
295.class, .enumeration, .function, .struct, .typedef, .union {
296 border-bottom: solid thin #999999;
297 margin-bottom: 0;
298 margin-top: 2em;
299}
300.description {
301 margin-top: 0.5em;
302}
303code, p.code, pre, ul.code li {
304 font-family: monaco, courier, monospace;
305 font-size: 90%;
306}
307ul.code, ul.contents, ul.subcontents {
308 list-style-type: none;
309 margin: 0;
310 padding-left: 0;
311}
312ul.code li {
313 margin: 0;
314}
315ul.contents > li {
316 margin-top: 1em;
317}
318ul.contents li ul.code, ul.contents li ul.subcontents {
319 padding-left: 2em;
320}
321div.body dl {
322 margin-left: 0;
323 margin-top: 0;
324}
325div.body dt {
326 font-style: italic;
327 margin-left: 0;
328 margin-top: 0;
329}
330div.body dd {
331 margin-bottom: 0.5em;
332}
333
334/* This is just for the HTML files generated with the framedhelp target */
335div.contents {
336 background: #e8e8e8;
337 border: solid thin black;
338 padding: 10px;
339}
340div.contents h1 {
341 font-size: 110%;
342}
343div.contents h2 {
344 font-size: 100%;
345}
346div.contents ul.contents {
347 font-size: 80%;
348}
349div.contents ul.subcontents li {
350 margin-left: 1em;
351 text-indent: -1em;
352}
353--></style>
abacc52b
MS
354 </head>
355 <body>
10d09e33 356<!--
10d09e33
MS
357 Raster printer driver documentation for CUPS.
358
f3c17241 359 Copyright 2007-2012 by Apple Inc.
10d09e33
MS
360 Copyright 1997-2007 by Easy Software Products.
361
362 These coded instructions, statements, and computer programs are the
363 property of Apple Inc. and are protected by Federal copyright
364 law. Distribution and use rights are outlined in the file "LICENSE.txt"
365 which should have been included with this file. If this file is
366 file is missing or damaged, see the license at "http://www.cups.org/".
367-->
368
178cb736
MS
369<h1 class='title'>Developing Raster Printer Drivers</h1>
370
8072030b 371<p>This document describes how to develop printer drivers for raster printers. Topics include: <a href='#BASICS'>printer driver basics</a>, <a href='#CREATE'>creating new PPD files</a>, <a href='#FILTERS'>using filters</a>, <a href='#COLOR'>implementing color management</a>, and <a href='#MACOSX'>adding macOS features</a>.</p>
e4572d57
MS
372
373<div class='summary'><table summary='General Information'>
374<tbody>
375<tr>
376 <th>See Also</th>
377 <td>Programming: <a href='postscript-driver.html'>Developing PostScript Printer Drivers</a><br>
378 Programming: <a href='api-filter.html'>Filter and Backend Programming</a><br>
379 Programming: <a href='ppd-compiler.html'>Introduction to the PPD Compiler</a><br>
380 Programming: <a href='api-raster.html'>Raster API</a><br>
381 References: <a href='ref-ppdcfile.html'>PPD Compiler Driver Information File Reference</a><br>
382 Specifications: <a href='spec-ppd.html'>CUPS PPD Extensions</a></td>
383</tr>
384</tbody>
385</table></div>
abacc52b
MS
386 <div class="contents">
387 <h2 class="title">Contents</h2>
388 <ul class="contents">
389 <li><a href="#BASICS">Printer Driver Basics</a></li>
390 <li><a href="#CREATING">Creating New PPD Files</a></li>
391 <li><a href="#FILTERS">Using Filters</a></li>
392 <li><a href="#COLOR">Implementing Color Management</a></li>
393 <li><a href="#MACOSX">Adding macOS Features</a></li>
394 </ul>
395 </div>
396 <div class="body">
e4572d57
MS
397<h2 class='title'><a name='BASICS'>Printer Driver Basics</a></h2>
398
399<p>A CUPS raster printer driver consists of a PostScript Printer Description (PPD) file that describes the features and capabilities of the device, one or more <em>filter</em> programs that prepare print data for the device, and zero or more support files for color management, online help, and so forth. The PPD file includes references to all of the filters and support files used by the driver.</p>
400
401<p>Every time a user prints something the scheduler program, <a href='man-cupsd.html'>cupsd(8)</a>, determines the format of the print job and the programs required to convert that job into something the printer understands. CUPS includes filter programs for many common formats, for example to convert Portable Document Format (PDF) files into CUPS raster data. <a href='#FIGURE_1'>Figure 1</a> shows the data flow of a typical print job.</p>
402
403<div class='figure'><table summary='Raster Filter Chain'>
404<caption>Figure 1: <a name='FIGURE_1'>Raster Filter Chain</a></caption>
b0f6947b 405<tr><td><img src='../images/cups-raster-chain.png' width='700' height='150' alt='Raster Filter Chain'></td></tr>
e4572d57
MS
406</table></div>
407
408<p>The raster filter converts CUPS raster data into a format the printer understands, for example HP-PCL. CUPS includes several sample raster filters supporting standard page description languages (PDLs). <a href='#TABLE_1'>Table 1</a> shows the raster filters that are bundled with CUPS and the languages they support.</p>
409
410<div class='table'><table summary='Standard CUPS Raster Filters'>
411<caption>Table 1: <a name='TABLE_1'>Standard CUPS Raster Filters</a></caption>
412<thead>
413<tr><th>Filter</th><th>PDLs</th><th>ppdc DriverType</th><th>ppdc #include file</th></tr>
414</thead>
415<tbody>
416<tr><td>rastertoepson</td><td>ESC/P, ESC/P2</td><td>epson</td><td>epson.h</td></tr>
417<tr><td>rastertoescpx</td><td>ESC/P, ESC/P2, EPSON Remote Mode</td><td>escp</td><td>escp.h</td></tr>
418<tr><td>rastertohp</td><td>HP-PCL3, HP-PCL5</td><td>hp</td><td>hp.h</td></tr>
419<tr><td>rastertolabel</td><td>CPCL, Dymo, EPL1, EPL2, Intellitech PCL, ZPL</td><td>label</td><td>label.h</td></tr>
420<tr><td>rastertopclx</td><td>HP-RTL, HP-PCL3, HP-PCL3GUI, HP-PCL5, HP-PCL5c, HP-PCL5e</td><td>pcl</td><td>pcl.h</td></tr>
421</tbody>
422</table></div>
423
424<p>The optional port monitor handles interface-specific protocol or encoding issues. For example, some raster printers use the 1284.4 communications protocol.</p>
425
426<p>The backend handles communications with the printer, sending print data from the last filter to the printer and relaying back-channel data from the printer to the upstream filters. CUPS includes backend programs for common direct-connect interfaces and network protocols, and you can provide your own backend to support custom interfaces and protocols.</p>
427
428<p>The scheduler also supports a special "command" file format for sending maintenance commands and status queries to a printer or printer driver. Command print jobs typically use a single command filter program defined in the PPD file to generate the appropriate printer commands and handle any responses from the printer. <a href='#FIGURE_2'>Figure 2</a> shows the data flow of a typical command job.</p>
429
430<div class='figure'><table summary='Command Filter Chain'>
431<caption>Figure 2: <a name='FIGURE_2'>Command Filter Chain</a></caption>
b0f6947b 432<tr><td><img src='../images/cups-command-chain.png' width='575' height='150' alt='Command Filter Chain'></td></tr>
e4572d57
MS
433</table></div>
434
435<p>Raster printer drivers must provide their own command filter.</p>
436
437
438<h2 class='title'><a name='CREATING'>Creating New PPD Files</a></h2>
439
440<p>We recommend using the CUPS PPD compiler, <a href='man-ppdc.html'>ppdc(1)</a>, to create new PPD files since it manages many of the tedious (and error-prone!) details of paper sizes and localization for you. It also allows you to easily support multiple devices from a single source file. For more information see the "<a href='ppd-compiler.html'>Introduction to the PPD Compiler</a>" document. <a href='#LISTING_1'>Listing 1</a> shows a driver information file for several similar black-and-white HP-PCL5 laser printers.</p>
441
442<p class='example'>Listing 1: <a name='LISTING_1'>"examples/laserjet-basic.drv"</a></p>
443
444<pre class='example'>
445<I>// Include standard font and media definitions</I>
446<a href='ref-ppdcfile.html#_include'>#include</a> &lt;font.defs&gt;
447<a href='ref-ppdcfile.html#_include'>#include</a> &lt;media.defs&gt;
448
449<I>// Include HP-PCL driver definitions</I>
450<a href='ref-ppdcfile.html#_include'>#include</a> &lt;pcl.h&gt;
451
452<I>// Specify that this driver uses the HP-PCL driver...</I>
453<a href='ref-ppdcfile.html#DriverType'>DriverType</a> pcl
454
455<I>// Specify the driver options via the model number...</I>
456<a href='ref-ppdcfile.html#ModelNumber'>ModelNumber</a> ($PCL_PAPER_SIZE $PCL_PJL $PCL_PJL_RESOLUTION)
457
458<I>// List the fonts that are supported, in this case all standard fonts...</I>
459<a href='ref-ppdcfile.html#Font'>Font</a> *
460
461<I>// Manufacturer and driver version</I>
462<a href='ref-ppdcfile.html#Manufacturer'>Manufacturer</a> "HP"
463<a href='ref-ppdcfile.html#Version'>Version</a> 1.0
464
465<I>// Supported page sizes and their margins</I>
466<a href='ref-ppdcfile.html#HWMargins'>HWMargins</a> 18 12 18 12
467*<a href='ref-ppdcfile.html#MediaSize'>MediaSize</a> Letter
468<a href='ref-ppdcfile.html#MediaSize'>MediaSize</a> Legal
469<a href='ref-ppdcfile.html#MediaSize'>MediaSize</a> Executive
470<a href='ref-ppdcfile.html#MediaSize'>MediaSize</a> Monarch
471<a href='ref-ppdcfile.html#MediaSize'>MediaSize</a> Statement
472<a href='ref-ppdcfile.html#MediaSize'>MediaSize</a> FanFoldGermanLegal
473
474<a href='ref-ppdcfile.html#HWMargins'>HWMargins</a> 18 12.72 18 12.72
475<a href='ref-ppdcfile.html#MediaSize'>MediaSize</a> Env10
476
477<a href='ref-ppdcfile.html#HWMargins'>HWMargins</a> 9.72 12 9.72 12
478<a href='ref-ppdcfile.html#MediaSize'>MediaSize</a> A4
479<a href='ref-ppdcfile.html#MediaSize'>MediaSize</a> A5
480<a href='ref-ppdcfile.html#MediaSize'>MediaSize</a> B5
481<a href='ref-ppdcfile.html#MediaSize'>MediaSize</a> EnvC5
482<a href='ref-ppdcfile.html#MediaSize'>MediaSize</a> EnvDL
483<a href='ref-ppdcfile.html#MediaSize'>MediaSize</a> EnvISOB5
484<a href='ref-ppdcfile.html#MediaSize'>MediaSize</a> Postcard
485<a href='ref-ppdcfile.html#MediaSize'>MediaSize</a> DoublePostcard
486
487<I>// Only black-and-white output with mode 3 compression...</I>
488<a href='ref-ppdcfile.html#ColorModel'>ColorModel</a> Gray k chunky 3
489
490<I>// Supported resolutions</I>
491<a href='ref-ppdcfile.html#Resolution'>Resolution</a> - 1 0 0 0 "300dpi/300 DPI"
492*<a href='ref-ppdcfile.html#Resolution'>Resolution</a> - 8 0 0 0 "600dpi/600 DPI"
493
494<I>// Supported input slots</I>
495*<a href='ref-ppdcfile.html#InputSlot'>InputSlot</a> 7 "Auto/Automatic Selection"
496<a href='ref-ppdcfile.html#InputSlot'>InputSlot</a> 2 "Manual/Tray 1 - Manual Feed"
497<a href='ref-ppdcfile.html#InputSlot'>InputSlot</a> 4 "Upper/Tray 1"
498<a href='ref-ppdcfile.html#InputSlot'>InputSlot</a> 1 "Lower/Tray 2"
499<a href='ref-ppdcfile.html#InputSlot'>InputSlot</a> 5 "LargeCapacity/Tray 3"
500
501<I>// Tray 3 is an option...</I>
502<a href='ref-ppdcfile.html#Installable'>Installable</a> "OptionLargeCapacity/Tray 3 Installed"
503<a href='ref-ppdcfile.html#UIConstraints'>UIConstraints</a> "*OptionLargeCapacity False *InputSlot LargeCapacity"
504
505{
506 <I>// HP LaserJet 2100 Series</I>
507 <a href='ref-ppdcfile.html#Throughput'>Throughput</a> 10
508 <a href='ref-ppdcfile.html#ModelName'>ModelName</a> "LaserJet 2100 Series"
509 <a href='ref-ppdcfile.html#PCFileName'>PCFileName</a> "hpljt211.ppd"
510}
511
512{
513 <I>// LaserJet 2200 and 2300 series have duplexer option...</I>
514 <a href='ref-ppdcfile.html#Duplex'>Duplex</a> normal
515 <a href='ref-ppdcfile.html#Installable'>Installable</a> "OptionDuplex/Duplexer Installed"
516 <a href='ref-ppdcfile.html#UIConstraints'>UIConstraints</a> "*OptionDuplex False *Duplex"
517
518 {
519 <I>// HP LaserJet 2200 Series</I>
520 <a href='ref-ppdcfile.html#Throughput'>Throughput</a> 19
521 <a href='ref-ppdcfile.html#ModelName'>ModelName</a> "LaserJet 2200 Series"
522 <a href='ref-ppdcfile.html#PCFileName'>PCFileName</a> "hpljt221.ppd"
523 }
524
525 {
526 <I>// HP LaserJet 2300 Series</I>
527 <a href='ref-ppdcfile.html#Throughput'>Throughput</a> 25
528 <a href='ref-ppdcfile.html#ModelName'>ModelName</a> "LaserJet 2300 Series"
529 <a href='ref-ppdcfile.html#PCFileName'>PCFileName</a> "hpljt231.ppd"
530 }
531}
532</pre>
533
534
535<h2 class='title'><a name='FILTERS'>Using Filters</a></h2>
536
537<p>The standard CUPS raster filters can be specified using the
538<a href='ref-ppdcfile.html#DriverType'><tt>DriverType</tt></a> directive, for example:</p>
539
540<pre class='example'>
541<I>// Specify that this driver uses the HP-PCL driver...</I>
542<a href='ref-ppdcfile.html#DriverType'>DriverType</a> pcl
543</pre>
544
545<p><a href='#TABLE_1'>Table 1</a> shows the driver types for each of the standard CUPS raster filters. For drivers that do not use the standard raster filters, the "custom" type is used with <a href='ref-ppdcfile.html#Filter'><tt>Filter</tt></a> directives:</p>
546
547<pre class='example'>
548<a href='ref-ppdcfile.html#DriverType'>DriverType</a> custom
549<a href='ref-ppdcfile.html#Filter'>Filter</a> application/vnd.cups-raster 100 /path/to/raster/filter
550<a href='ref-ppdcfile.html#Filter'>Filter</a> application/vnd.cups-command 100 /path/to/command/filter
551</pre>
552
553
554<h2 class='title'><a name='COLOR'>Implementing Color Management</a></h2>
555
178cb736 556<p>CUPS uses ICC color profiles to provide more accurate color reproduction. The <a href='spec-ppd.html#cupsICCProfile'><tt>cupsICCProfile</tt></a> attribute defines the color profiles that are available for a given printer, for example:</p>
e4572d57 557
178cb736
MS
558<pre class='example'>
559<a href='ref-ppdcfile.html#Attribute'>Attribute</a> cupsICCProfile "ColorModel.MediaType.Resolution/Description" /path/to/ICC/profile
560</pre>
e4572d57 561
178cb736
MS
562<p>where "ColorModel.MediaType.Resolution" defines a selector based on the corresponding option selections. A simple driver might only define profiles for the color models that are supported, for example a printer supporting Gray and RGB might use:</p>
563
564<pre class='example'>
565<a href='ref-ppdcfile.html#Attribute'>Attribute</a> cupsICCProfile "Gray../Grayscale Profile" /path/to/ICC/gray-profile
566<a href='ref-ppdcfile.html#Attribute'>Attribute</a> cupsICCProfile "RGB../Full Color Profile" /path/to/ICC/rgb-profile
567</pre>
568
569<p>The options used for profile selection can be customized using the <tt>cupsICCQualifier2</tt> and <tt>cupsICCQualifier3</tt> attributes.</p>
e4572d57 570
8072030b 571<h3><span class='info'>Since macOS 10.5</span>Custom Color Matching Support</h3>
e4572d57 572
8072030b 573<p>macOS printer drivers that are based on an existing standard RGB colorspace can tell the system to use the corresponding colorspace instead of an arbitrary ICC color profile when doing color management. The <a href='#APCustom'><tt>APSupportsCustomColorMatching</tt></a> and <tt>APDefaultCustomColorMatchingProfile</tt> attributes can be used to enable this mode:</p>
178cb736
MS
574
575<pre class='example'>
576<a href='ref-ppdcfile.html#Attribute'>Attribute</a> APSupportsCustomColorMatching "" true
577<a href='ref-ppdcfile.html#Attribute'>Attribute</a> APDefaultCustomColorMatchingProfile "" sRGB
578</pre>
e4572d57 579
e4572d57 580
8072030b 581<h2 class='title'><a name='MACOSX'>Adding macOS Features</a></h2>
178cb736 582
8072030b 583<p>macOS printer drivers can provide <a href='spec-ppd.html#MACOSX'>additional attributes</a> to specify additional option panes in the print dialog, an image of the printer, a help book, and option presets for the driver software:</p>
178cb736
MS
584
585<pre class='example'>
586<a href='ref-ppdcfile.html#Attribute'>Attribute</a> APDialogExtension "" /Library/Printers/Vendor/filename.plugin
587<a href='ref-ppdcfile.html#Attribute'>Attribute</a> APHelpBook "" /Library/Printers/Vendor/filename.bundle
588<a href='ref-ppdcfile.html#Attribute'>Attribute</a> APPrinterIconPath "" /Library/Printers/Vendor/filename.icns
589<a href='ref-ppdcfile.html#Attribute'>Attribute</a> APPrinterPreset "name/text" "*option choice ..."
590</pre>
abacc52b
MS
591 </div>
592 </body>
e4572d57 593</html>