xref: /aosp_15_r20/external/libcups/doc/help/raster-driver.html (revision 5e7646d21f1134fb0638875d812ef646c12ab91e)
1*5e7646d2SAndroid Build Coastguard Worker<!DOCTYPE html>
2*5e7646d2SAndroid Build Coastguard Worker<html>
3*5e7646d2SAndroid Build Coastguard Worker<!-- SECTION: Programming -->
4*5e7646d2SAndroid Build Coastguard Worker  <head>
5*5e7646d2SAndroid Build Coastguard Worker    <title>Developing Raster Printer Drivers</title>
6*5e7646d2SAndroid Build Coastguard Worker    <meta name="keywords" content="Programming">
7*5e7646d2SAndroid Build Coastguard Worker    <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
8*5e7646d2SAndroid Build Coastguard Worker    <meta name="creator" content="codedoc v3.1">
9*5e7646d2SAndroid Build Coastguard Worker    <meta name="author" content="Unknown">
10*5e7646d2SAndroid Build Coastguard Worker    <meta name="copyright" content="Unknown">
11*5e7646d2SAndroid Build Coastguard Worker    <meta name="version" content="0.0">
12*5e7646d2SAndroid Build Coastguard Worker    <style type="text/css"><!--
13*5e7646d2SAndroid Build Coastguard WorkerBODY {
14*5e7646d2SAndroid Build Coastguard Worker  font-family: lucida grande, geneva, helvetica, arial, sans-serif;
15*5e7646d2SAndroid Build Coastguard Worker}
16*5e7646d2SAndroid Build Coastguard Worker
17*5e7646d2SAndroid Build Coastguard WorkerH1, H2, H3, H4, H5, H6, P, TD, TH {
18*5e7646d2SAndroid Build Coastguard Worker  font-family: lucida grande, geneva, helvetica, arial, sans-serif;
19*5e7646d2SAndroid Build Coastguard Worker}
20*5e7646d2SAndroid Build Coastguard Worker
21*5e7646d2SAndroid Build Coastguard WorkerH1 { font-size: 2em; }
22*5e7646d2SAndroid Build Coastguard WorkerH2 { font-size: 1.75em; }
23*5e7646d2SAndroid Build Coastguard WorkerH3 { font-size: 1.5em; }
24*5e7646d2SAndroid Build Coastguard WorkerH4 { font-size: 1.25em; }
25*5e7646d2SAndroid Build Coastguard Worker
26*5e7646d2SAndroid Build Coastguard WorkerKBD {
27*5e7646d2SAndroid Build Coastguard Worker  font-family: monaco, courier, monospace;
28*5e7646d2SAndroid Build Coastguard Worker  font-weight: bold;
29*5e7646d2SAndroid Build Coastguard Worker}
30*5e7646d2SAndroid Build Coastguard Worker
31*5e7646d2SAndroid Build Coastguard WorkerPRE {
32*5e7646d2SAndroid Build Coastguard Worker  font-family: monaco, courier, monospace;
33*5e7646d2SAndroid Build Coastguard Worker}
34*5e7646d2SAndroid Build Coastguard Worker
35*5e7646d2SAndroid Build Coastguard WorkerBLOCKQUOTE {
36*5e7646d2SAndroid Build Coastguard Worker  border-left: solid 2px #777;
37*5e7646d2SAndroid Build Coastguard Worker  margin: 1em 0;
38*5e7646d2SAndroid Build Coastguard Worker  padding: 10px;
39*5e7646d2SAndroid Build Coastguard Worker}
40*5e7646d2SAndroid Build Coastguard Worker
41*5e7646d2SAndroid Build Coastguard WorkerBLOCKQUOTE OL LI {
42*5e7646d2SAndroid Build Coastguard Worker  margin-left: -1em;
43*5e7646d2SAndroid Build Coastguard Worker}
44*5e7646d2SAndroid Build Coastguard Worker
45*5e7646d2SAndroid Build Coastguard WorkerPRE.command, PRE.example {
46*5e7646d2SAndroid Build Coastguard Worker  background: #eee;
47*5e7646d2SAndroid Build Coastguard Worker  margin: 0 36pt;
48*5e7646d2SAndroid Build Coastguard Worker  padding: 10px;
49*5e7646d2SAndroid Build Coastguard Worker}
50*5e7646d2SAndroid Build Coastguard Worker
51*5e7646d2SAndroid Build Coastguard WorkerP.compact {
52*5e7646d2SAndroid Build Coastguard Worker  margin: 0;
53*5e7646d2SAndroid Build Coastguard Worker}
54*5e7646d2SAndroid Build Coastguard Worker
55*5e7646d2SAndroid Build Coastguard WorkerP.example {
56*5e7646d2SAndroid Build Coastguard Worker  font-style: italic;
57*5e7646d2SAndroid Build Coastguard Worker  margin-left: 36pt;
58*5e7646d2SAndroid Build Coastguard Worker}
59*5e7646d2SAndroid Build Coastguard Worker
60*5e7646d2SAndroid Build Coastguard WorkerDL.man DD {
61*5e7646d2SAndroid Build Coastguard Worker  margin-left: 5em;
62*5e7646d2SAndroid Build Coastguard Worker}
63*5e7646d2SAndroid Build Coastguard Worker
64*5e7646d2SAndroid Build Coastguard WorkerDL.man DT {
65*5e7646d2SAndroid Build Coastguard Worker  margin-left: 0;
66*5e7646d2SAndroid Build Coastguard Worker}
67*5e7646d2SAndroid Build Coastguard Worker
68*5e7646d2SAndroid Build Coastguard WorkerPRE.man {
69*5e7646d2SAndroid Build Coastguard Worker  margin: 0;
70*5e7646d2SAndroid Build Coastguard Worker}
71*5e7646d2SAndroid Build Coastguard Worker
72*5e7646d2SAndroid Build Coastguard WorkerPRE.command EM, PRE.example EM {
73*5e7646d2SAndroid Build Coastguard Worker  font-family: lucida grande, geneva, helvetica, arial, sans-serif;
74*5e7646d2SAndroid Build Coastguard Worker}
75*5e7646d2SAndroid Build Coastguard Worker
76*5e7646d2SAndroid Build Coastguard WorkerP.command {
77*5e7646d2SAndroid Build Coastguard Worker  font-family: monaco, courier, monospace;
78*5e7646d2SAndroid Build Coastguard Worker  margin-left: 36pt;
79*5e7646d2SAndroid Build Coastguard Worker}
80*5e7646d2SAndroid Build Coastguard Worker
81*5e7646d2SAndroid Build Coastguard WorkerP.formula {
82*5e7646d2SAndroid Build Coastguard Worker  font-style: italic;
83*5e7646d2SAndroid Build Coastguard Worker  margin-left: 36pt;
84*5e7646d2SAndroid Build Coastguard Worker}
85*5e7646d2SAndroid Build Coastguard Worker
86*5e7646d2SAndroid Build Coastguard WorkerA IMG {
87*5e7646d2SAndroid Build Coastguard Worker  border: none;
88*5e7646d2SAndroid Build Coastguard Worker}
89*5e7646d2SAndroid Build Coastguard Worker
90*5e7646d2SAndroid Build Coastguard WorkerA:link:hover IMG {
91*5e7646d2SAndroid Build Coastguard Worker  background: #f0f0f0;
92*5e7646d2SAndroid Build Coastguard Worker  border-radius: 10px;
93*5e7646d2SAndroid Build Coastguard Worker  -moz-border-radius: 10px;
94*5e7646d2SAndroid Build Coastguard Worker}
95*5e7646d2SAndroid Build Coastguard Worker
96*5e7646d2SAndroid Build Coastguard WorkerA:link, A:visited {
97*5e7646d2SAndroid Build Coastguard Worker  font-weight: inherit;
98*5e7646d2SAndroid Build Coastguard Worker  text-decoration: none;
99*5e7646d2SAndroid Build Coastguard Worker}
100*5e7646d2SAndroid Build Coastguard Worker
101*5e7646d2SAndroid Build Coastguard WorkerA:link:hover, A:visited:hover, A:active {
102*5e7646d2SAndroid Build Coastguard Worker  text-decoration: underline;
103*5e7646d2SAndroid Build Coastguard Worker}
104*5e7646d2SAndroid Build Coastguard Worker
105*5e7646d2SAndroid Build Coastguard WorkerSUB, SUP {
106*5e7646d2SAndroid Build Coastguard Worker  font-size: 50%;
107*5e7646d2SAndroid Build Coastguard Worker}
108*5e7646d2SAndroid Build Coastguard Worker
109*5e7646d2SAndroid Build Coastguard WorkerTR.data, TD.data, TR.data TD {
110*5e7646d2SAndroid Build Coastguard Worker  margin-top: 10pt;
111*5e7646d2SAndroid Build Coastguard Worker  padding: 5pt;
112*5e7646d2SAndroid Build Coastguard Worker  border-bottom: solid 1pt #999999;
113*5e7646d2SAndroid Build Coastguard Worker}
114*5e7646d2SAndroid Build Coastguard Worker
115*5e7646d2SAndroid Build Coastguard WorkerTR.data TH {
116*5e7646d2SAndroid Build Coastguard Worker  border-bottom: solid 1pt #999999;
117*5e7646d2SAndroid Build Coastguard Worker  padding-top: 10pt;
118*5e7646d2SAndroid Build Coastguard Worker  padding-left: 5pt;
119*5e7646d2SAndroid Build Coastguard Worker  text-align: left;
120*5e7646d2SAndroid Build Coastguard Worker}
121*5e7646d2SAndroid Build Coastguard Worker
122*5e7646d2SAndroid Build Coastguard WorkerDIV.table TABLE {
123*5e7646d2SAndroid Build Coastguard Worker  border: solid thin #999999;
124*5e7646d2SAndroid Build Coastguard Worker  border-collapse: collapse;
125*5e7646d2SAndroid Build Coastguard Worker  border-spacing: 0;
126*5e7646d2SAndroid Build Coastguard Worker  margin-left: auto;
127*5e7646d2SAndroid Build Coastguard Worker  margin-right: auto;
128*5e7646d2SAndroid Build Coastguard Worker}
129*5e7646d2SAndroid Build Coastguard Worker
130*5e7646d2SAndroid Build Coastguard WorkerDIV.table CAPTION {
131*5e7646d2SAndroid Build Coastguard Worker  caption-side: top;
132*5e7646d2SAndroid Build Coastguard Worker  font-size: 120%;
133*5e7646d2SAndroid Build Coastguard Worker  font-style: italic;
134*5e7646d2SAndroid Build Coastguard Worker  font-weight: bold;
135*5e7646d2SAndroid Build Coastguard Worker  margin-left: auto;
136*5e7646d2SAndroid Build Coastguard Worker  margin-right: auto;
137*5e7646d2SAndroid Build Coastguard Worker}
138*5e7646d2SAndroid Build Coastguard Worker
139*5e7646d2SAndroid Build Coastguard WorkerDIV.table TABLE TD {
140*5e7646d2SAndroid Build Coastguard Worker  border: solid thin #cccccc;
141*5e7646d2SAndroid Build Coastguard Worker  padding: 5pt 10pt 0;
142*5e7646d2SAndroid Build Coastguard Worker}
143*5e7646d2SAndroid Build Coastguard Worker
144*5e7646d2SAndroid Build Coastguard WorkerDIV.table TABLE TH {
145*5e7646d2SAndroid Build Coastguard Worker  background: #cccccc;
146*5e7646d2SAndroid Build Coastguard Worker  border: none;
147*5e7646d2SAndroid Build Coastguard Worker  border-bottom: solid thin #999999;
148*5e7646d2SAndroid Build Coastguard Worker}
149*5e7646d2SAndroid Build Coastguard Worker
150*5e7646d2SAndroid Build Coastguard WorkerDIV.figure TABLE {
151*5e7646d2SAndroid Build Coastguard Worker  margin-left: auto;
152*5e7646d2SAndroid Build Coastguard Worker  margin-right: auto;
153*5e7646d2SAndroid Build Coastguard Worker}
154*5e7646d2SAndroid Build Coastguard Worker
155*5e7646d2SAndroid Build Coastguard WorkerDIV.figure CAPTION {
156*5e7646d2SAndroid Build Coastguard Worker  caption-side: bottom;
157*5e7646d2SAndroid Build Coastguard Worker  font-size: 120%;
158*5e7646d2SAndroid Build Coastguard Worker  font-style: italic;
159*5e7646d2SAndroid Build Coastguard Worker  font-weight: bold;
160*5e7646d2SAndroid Build Coastguard Worker  margin-left: auto;
161*5e7646d2SAndroid Build Coastguard Worker  margin-right: auto;
162*5e7646d2SAndroid Build Coastguard Worker}
163*5e7646d2SAndroid Build Coastguard Worker
164*5e7646d2SAndroid Build Coastguard WorkerTH.label {
165*5e7646d2SAndroid Build Coastguard Worker  text-align: right;
166*5e7646d2SAndroid Build Coastguard Worker  vertical-align: top;
167*5e7646d2SAndroid Build Coastguard Worker}
168*5e7646d2SAndroid Build Coastguard Worker
169*5e7646d2SAndroid Build Coastguard WorkerTH.sublabel {
170*5e7646d2SAndroid Build Coastguard Worker  text-align: right;
171*5e7646d2SAndroid Build Coastguard Worker  font-weight: normal;
172*5e7646d2SAndroid Build Coastguard Worker}
173*5e7646d2SAndroid Build Coastguard Worker
174*5e7646d2SAndroid Build Coastguard WorkerHR {
175*5e7646d2SAndroid Build Coastguard Worker  border: solid thin;
176*5e7646d2SAndroid Build Coastguard Worker}
177*5e7646d2SAndroid Build Coastguard Worker
178*5e7646d2SAndroid Build Coastguard WorkerSPAN.info {
179*5e7646d2SAndroid Build Coastguard Worker  background: black;
180*5e7646d2SAndroid Build Coastguard Worker  border: thin solid black;
181*5e7646d2SAndroid Build Coastguard Worker  color: white;
182*5e7646d2SAndroid Build Coastguard Worker  font-size: 80%;
183*5e7646d2SAndroid Build Coastguard Worker  font-style: italic;
184*5e7646d2SAndroid Build Coastguard Worker  font-weight: bold;
185*5e7646d2SAndroid Build Coastguard Worker  white-space: nowrap;
186*5e7646d2SAndroid Build Coastguard Worker}
187*5e7646d2SAndroid Build Coastguard Worker
188*5e7646d2SAndroid Build Coastguard WorkerH2 SPAN.info, H3 SPAN.info, H4 SPAN.info {
189*5e7646d2SAndroid Build Coastguard Worker  float: right;
190*5e7646d2SAndroid Build Coastguard Worker  font-size: 100%;
191*5e7646d2SAndroid Build Coastguard Worker}
192*5e7646d2SAndroid Build Coastguard Worker
193*5e7646d2SAndroid Build Coastguard WorkerH1.title {
194*5e7646d2SAndroid Build Coastguard Worker}
195*5e7646d2SAndroid Build Coastguard Worker
196*5e7646d2SAndroid Build Coastguard WorkerH2.title, H3.title {
197*5e7646d2SAndroid Build Coastguard Worker  border-bottom: solid 2pt #000000;
198*5e7646d2SAndroid Build Coastguard Worker}
199*5e7646d2SAndroid Build Coastguard Worker
200*5e7646d2SAndroid Build Coastguard WorkerDIV.indent, TABLE.indent {
201*5e7646d2SAndroid Build Coastguard Worker  margin-top: 2em;
202*5e7646d2SAndroid Build Coastguard Worker  margin-left: auto;
203*5e7646d2SAndroid Build Coastguard Worker  margin-right: auto;
204*5e7646d2SAndroid Build Coastguard Worker  width: 90%;
205*5e7646d2SAndroid Build Coastguard Worker}
206*5e7646d2SAndroid Build Coastguard Worker
207*5e7646d2SAndroid Build Coastguard WorkerTABLE.indent {
208*5e7646d2SAndroid Build Coastguard Worker  border-collapse: collapse;
209*5e7646d2SAndroid Build Coastguard Worker}
210*5e7646d2SAndroid Build Coastguard Worker
211*5e7646d2SAndroid Build Coastguard WorkerTABLE.indent TD, TABLE.indent TH {
212*5e7646d2SAndroid Build Coastguard Worker  padding: 0;
213*5e7646d2SAndroid Build Coastguard Worker}
214*5e7646d2SAndroid Build Coastguard Worker
215*5e7646d2SAndroid Build Coastguard WorkerTABLE.list {
216*5e7646d2SAndroid Build Coastguard Worker  border-collapse: collapse;
217*5e7646d2SAndroid Build Coastguard Worker  margin-left: auto;
218*5e7646d2SAndroid Build Coastguard Worker  margin-right: auto;
219*5e7646d2SAndroid Build Coastguard Worker  width: 90%;
220*5e7646d2SAndroid Build Coastguard Worker}
221*5e7646d2SAndroid Build Coastguard Worker
222*5e7646d2SAndroid Build Coastguard WorkerTABLE.list TH {
223*5e7646d2SAndroid Build Coastguard Worker  background: white;
224*5e7646d2SAndroid Build Coastguard Worker  border-bottom: solid thin #cccccc;
225*5e7646d2SAndroid Build Coastguard Worker  color: #444444;
226*5e7646d2SAndroid Build Coastguard Worker  padding-top: 10pt;
227*5e7646d2SAndroid Build Coastguard Worker  padding-left: 5pt;
228*5e7646d2SAndroid Build Coastguard Worker  text-align: left;
229*5e7646d2SAndroid Build Coastguard Worker  vertical-align: bottom;
230*5e7646d2SAndroid Build Coastguard Worker  white-space: nowrap;
231*5e7646d2SAndroid Build Coastguard Worker}
232*5e7646d2SAndroid Build Coastguard Worker
233*5e7646d2SAndroid Build Coastguard WorkerTABLE.list TH A {
234*5e7646d2SAndroid Build Coastguard Worker  color: #4444cc;
235*5e7646d2SAndroid Build Coastguard Worker}
236*5e7646d2SAndroid Build Coastguard Worker
237*5e7646d2SAndroid Build Coastguard WorkerTABLE.list TD {
238*5e7646d2SAndroid Build Coastguard Worker  border-bottom: solid thin #eeeeee;
239*5e7646d2SAndroid Build Coastguard Worker  padding-top: 5pt;
240*5e7646d2SAndroid Build Coastguard Worker  padding-left: 5pt;
241*5e7646d2SAndroid Build Coastguard Worker}
242*5e7646d2SAndroid Build Coastguard Worker
243*5e7646d2SAndroid Build Coastguard WorkerTABLE.list TR:nth-child(even) {
244*5e7646d2SAndroid Build Coastguard Worker  background: #f8f8f8;
245*5e7646d2SAndroid Build Coastguard Worker}
246*5e7646d2SAndroid Build Coastguard Worker
247*5e7646d2SAndroid Build Coastguard WorkerTABLE.list TR:nth-child(odd) {
248*5e7646d2SAndroid Build Coastguard Worker  background: #f4f4f4;
249*5e7646d2SAndroid Build Coastguard Worker}
250*5e7646d2SAndroid Build Coastguard Worker
251*5e7646d2SAndroid Build Coastguard WorkerDT {
252*5e7646d2SAndroid Build Coastguard Worker  margin-left: 36pt;
253*5e7646d2SAndroid Build Coastguard Worker  margin-top: 12pt;
254*5e7646d2SAndroid Build Coastguard Worker}
255*5e7646d2SAndroid Build Coastguard Worker
256*5e7646d2SAndroid Build Coastguard WorkerDD {
257*5e7646d2SAndroid Build Coastguard Worker  margin-left: 54pt;
258*5e7646d2SAndroid Build Coastguard Worker}
259*5e7646d2SAndroid Build Coastguard Worker
260*5e7646d2SAndroid Build Coastguard WorkerDL.category DT {
261*5e7646d2SAndroid Build Coastguard Worker  font-weight: bold;
262*5e7646d2SAndroid Build Coastguard Worker}
263*5e7646d2SAndroid Build Coastguard Worker
264*5e7646d2SAndroid Build Coastguard WorkerP.summary {
265*5e7646d2SAndroid Build Coastguard Worker  margin-left: 36pt;
266*5e7646d2SAndroid Build Coastguard Worker  font-family: monaco, courier, monospace;
267*5e7646d2SAndroid Build Coastguard Worker}
268*5e7646d2SAndroid Build Coastguard Worker
269*5e7646d2SAndroid Build Coastguard WorkerDIV.summary TABLE {
270*5e7646d2SAndroid Build Coastguard Worker  border: solid thin #999999;
271*5e7646d2SAndroid Build Coastguard Worker  border-collapse: collapse;
272*5e7646d2SAndroid Build Coastguard Worker  border-spacing: 0;
273*5e7646d2SAndroid Build Coastguard Worker  margin: 10px;
274*5e7646d2SAndroid Build Coastguard Worker}
275*5e7646d2SAndroid Build Coastguard Worker
276*5e7646d2SAndroid Build Coastguard WorkerDIV.summary TABLE TD, DIV.summary TABLE TH {
277*5e7646d2SAndroid Build Coastguard Worker  border: solid thin #999999;
278*5e7646d2SAndroid Build Coastguard Worker  padding: 5px;
279*5e7646d2SAndroid Build Coastguard Worker  text-align: left;
280*5e7646d2SAndroid Build Coastguard Worker  vertical-align: top;
281*5e7646d2SAndroid Build Coastguard Worker}
282*5e7646d2SAndroid Build Coastguard Worker
283*5e7646d2SAndroid Build Coastguard WorkerDIV.summary TABLE THEAD TH {
284*5e7646d2SAndroid Build Coastguard Worker  background: #eeeeee;
285*5e7646d2SAndroid Build Coastguard Worker}
286*5e7646d2SAndroid Build Coastguard Worker
287*5e7646d2SAndroid Build Coastguard Worker/* API documentation styles... */
288*5e7646d2SAndroid Build Coastguard Workerdiv.body h1 {
289*5e7646d2SAndroid Build Coastguard Worker  font-size: 250%;
290*5e7646d2SAndroid Build Coastguard Worker  font-weight: bold;
291*5e7646d2SAndroid Build Coastguard Worker  margin: 0;
292*5e7646d2SAndroid Build Coastguard Worker}
293*5e7646d2SAndroid Build Coastguard Workerdiv.body h2 {
294*5e7646d2SAndroid Build Coastguard Worker  font-size: 250%;
295*5e7646d2SAndroid Build Coastguard Worker  margin-top: 1.5em;
296*5e7646d2SAndroid Build Coastguard Worker}
297*5e7646d2SAndroid Build Coastguard Workerdiv.body h3 {
298*5e7646d2SAndroid Build Coastguard Worker  font-size: 150%;
299*5e7646d2SAndroid Build Coastguard Worker  margin-bottom: 0.5em;
300*5e7646d2SAndroid Build Coastguard Worker  margin-top: 1.5em;
301*5e7646d2SAndroid Build Coastguard Worker}
302*5e7646d2SAndroid Build Coastguard Workerdiv.body h4 {
303*5e7646d2SAndroid Build Coastguard Worker  font-size: 110%;
304*5e7646d2SAndroid Build Coastguard Worker  margin-bottom: 0.5em;
305*5e7646d2SAndroid Build Coastguard Worker  margin-top: 1.5em;
306*5e7646d2SAndroid Build Coastguard Worker}
307*5e7646d2SAndroid Build Coastguard Workerdiv.body h5 {
308*5e7646d2SAndroid Build Coastguard Worker  font-size: 100%;
309*5e7646d2SAndroid Build Coastguard Worker  margin-bottom: 0.5em;
310*5e7646d2SAndroid Build Coastguard Worker  margin-top: 1.5em;
311*5e7646d2SAndroid Build Coastguard Worker}
312*5e7646d2SAndroid Build Coastguard Workerdiv.contents {
313*5e7646d2SAndroid Build Coastguard Worker  background: #e8e8e8;
314*5e7646d2SAndroid Build Coastguard Worker  border: solid thin black;
315*5e7646d2SAndroid Build Coastguard Worker  padding: 10px;
316*5e7646d2SAndroid Build Coastguard Worker}
317*5e7646d2SAndroid Build Coastguard Workerdiv.contents h1 {
318*5e7646d2SAndroid Build Coastguard Worker  font-size: 110%;
319*5e7646d2SAndroid Build Coastguard Worker}
320*5e7646d2SAndroid Build Coastguard Workerdiv.contents h2 {
321*5e7646d2SAndroid Build Coastguard Worker  font-size: 100%;
322*5e7646d2SAndroid Build Coastguard Worker}
323*5e7646d2SAndroid Build Coastguard Workerdiv.contents ul.contents {
324*5e7646d2SAndroid Build Coastguard Worker  font-size: 80%;
325*5e7646d2SAndroid Build Coastguard Worker}
326*5e7646d2SAndroid Build Coastguard Worker.class {
327*5e7646d2SAndroid Build Coastguard Worker  border-bottom: solid 2px gray;
328*5e7646d2SAndroid Build Coastguard Worker}
329*5e7646d2SAndroid Build Coastguard Worker.constants {
330*5e7646d2SAndroid Build Coastguard Worker}
331*5e7646d2SAndroid Build Coastguard Worker.description {
332*5e7646d2SAndroid Build Coastguard Worker  margin-top: 0.5em;
333*5e7646d2SAndroid Build Coastguard Worker}
334*5e7646d2SAndroid Build Coastguard Worker.discussion {
335*5e7646d2SAndroid Build Coastguard Worker}
336*5e7646d2SAndroid Build Coastguard Worker.enumeration {
337*5e7646d2SAndroid Build Coastguard Worker  border-bottom: solid 2px gray;
338*5e7646d2SAndroid Build Coastguard Worker}
339*5e7646d2SAndroid Build Coastguard Worker.function {
340*5e7646d2SAndroid Build Coastguard Worker  border-bottom: solid 2px gray;
341*5e7646d2SAndroid Build Coastguard Worker  margin-bottom: 0;
342*5e7646d2SAndroid Build Coastguard Worker}
343*5e7646d2SAndroid Build Coastguard Worker.members {
344*5e7646d2SAndroid Build Coastguard Worker}
345*5e7646d2SAndroid Build Coastguard Worker.method {
346*5e7646d2SAndroid Build Coastguard Worker}
347*5e7646d2SAndroid Build Coastguard Worker.parameters {
348*5e7646d2SAndroid Build Coastguard Worker}
349*5e7646d2SAndroid Build Coastguard Worker.returnvalue {
350*5e7646d2SAndroid Build Coastguard Worker}
351*5e7646d2SAndroid Build Coastguard Worker.struct {
352*5e7646d2SAndroid Build Coastguard Worker  border-bottom: solid 2px gray;
353*5e7646d2SAndroid Build Coastguard Worker}
354*5e7646d2SAndroid Build Coastguard Worker.typedef {
355*5e7646d2SAndroid Build Coastguard Worker  border-bottom: solid 2px gray;
356*5e7646d2SAndroid Build Coastguard Worker}
357*5e7646d2SAndroid Build Coastguard Worker.union {
358*5e7646d2SAndroid Build Coastguard Worker  border-bottom: solid 2px gray;
359*5e7646d2SAndroid Build Coastguard Worker}
360*5e7646d2SAndroid Build Coastguard Worker.variable {
361*5e7646d2SAndroid Build Coastguard Worker}
362*5e7646d2SAndroid Build Coastguard Workerh1, h2, h3, h4, h5, h6 {
363*5e7646d2SAndroid Build Coastguard Worker  page-break-inside: avoid;
364*5e7646d2SAndroid Build Coastguard Worker}
365*5e7646d2SAndroid Build Coastguard Workerblockquote {
366*5e7646d2SAndroid Build Coastguard Worker  border: solid thin gray;
367*5e7646d2SAndroid Build Coastguard Worker  box-shadow: 3px 3px 5px rgba(0,0,0,0.5);
368*5e7646d2SAndroid Build Coastguard Worker  padding: 10px 10px 0px;
369*5e7646d2SAndroid Build Coastguard Worker  page-break-inside: avoid;
370*5e7646d2SAndroid Build Coastguard Worker}
371*5e7646d2SAndroid Build Coastguard Workerp code, li code, p.code, pre, ul.code li {
372*5e7646d2SAndroid Build Coastguard Worker  background: rgba(127,127,127,0.1);
373*5e7646d2SAndroid Build Coastguard Worker  border: thin dotted gray;
374*5e7646d2SAndroid Build Coastguard Worker  font-family: monospace;
375*5e7646d2SAndroid Build Coastguard Worker  hyphens: manual;
376*5e7646d2SAndroid Build Coastguard Worker  -webkit-hyphens: manual;
377*5e7646d2SAndroid Build Coastguard Worker  page-break-inside: avoid;
378*5e7646d2SAndroid Build Coastguard Worker}
379*5e7646d2SAndroid Build Coastguard Workerp.code, pre, ul.code li {
380*5e7646d2SAndroid Build Coastguard Worker  padding: 10px;
381*5e7646d2SAndroid Build Coastguard Worker}
382*5e7646d2SAndroid Build Coastguard Workerp code, li code {
383*5e7646d2SAndroid Build Coastguard Worker  padding: 2px 5px;
384*5e7646d2SAndroid Build Coastguard Worker}
385*5e7646d2SAndroid Build Coastguard Workera:link, a:visited {
386*5e7646d2SAndroid Build Coastguard Worker  text-decoration: none;
387*5e7646d2SAndroid Build Coastguard Worker}
388*5e7646d2SAndroid Build Coastguard Workerspan.info {
389*5e7646d2SAndroid Build Coastguard Worker  background: black;
390*5e7646d2SAndroid Build Coastguard Worker  border: solid thin black;
391*5e7646d2SAndroid Build Coastguard Worker  color: white;
392*5e7646d2SAndroid Build Coastguard Worker  font-size: 80%;
393*5e7646d2SAndroid Build Coastguard Worker  font-style: italic;
394*5e7646d2SAndroid Build Coastguard Worker  font-weight: bold;
395*5e7646d2SAndroid Build Coastguard Worker  white-space: nowrap;
396*5e7646d2SAndroid Build Coastguard Worker}
397*5e7646d2SAndroid Build Coastguard Workerh2 span.info, h3 span.info, h4 span.info {
398*5e7646d2SAndroid Build Coastguard Worker  border-radius: 10px;
399*5e7646d2SAndroid Build Coastguard Worker  float: right;
400*5e7646d2SAndroid Build Coastguard Worker  font-size: 80%;
401*5e7646d2SAndroid Build Coastguard Worker  padding: 3px 6px;
402*5e7646d2SAndroid Build Coastguard Worker}
403*5e7646d2SAndroid Build Coastguard Workerh2.title span.info, h3.title span.info, h4.title span.info {
404*5e7646d2SAndroid Build Coastguard Worker  border-bottom-left-radius: 0px;
405*5e7646d2SAndroid Build Coastguard Worker  border-bottom-right-radius: 0px;
406*5e7646d2SAndroid Build Coastguard Worker}
407*5e7646d2SAndroid Build Coastguard Workerh2.title span.info {
408*5e7646d2SAndroid Build Coastguard Worker  padding: 4px 6px;
409*5e7646d2SAndroid Build Coastguard Worker}
410*5e7646d2SAndroid Build Coastguard Workerul.code, ul.contents, ul.subcontents {
411*5e7646d2SAndroid Build Coastguard Worker  list-style-type: none;
412*5e7646d2SAndroid Build Coastguard Worker  margin: 0;
413*5e7646d2SAndroid Build Coastguard Worker  padding-left: 0;
414*5e7646d2SAndroid Build Coastguard Worker}
415*5e7646d2SAndroid Build Coastguard Workerul.code li {
416*5e7646d2SAndroid Build Coastguard Worker  margin: 0;
417*5e7646d2SAndroid Build Coastguard Worker}
418*5e7646d2SAndroid Build Coastguard Workerul.contents > li {
419*5e7646d2SAndroid Build Coastguard Worker  margin-top: 1em;
420*5e7646d2SAndroid Build Coastguard Worker}
421*5e7646d2SAndroid Build Coastguard Workerul.contents li ul.code, ul.contents li ul.subcontents {
422*5e7646d2SAndroid Build Coastguard Worker  padding-left: 2em;
423*5e7646d2SAndroid Build Coastguard Worker}
424*5e7646d2SAndroid Build Coastguard Workertable.list {
425*5e7646d2SAndroid Build Coastguard Worker  border-collapse: collapse;
426*5e7646d2SAndroid Build Coastguard Worker  width: 100%;
427*5e7646d2SAndroid Build Coastguard Worker}
428*5e7646d2SAndroid Build Coastguard Workertable.list tr:nth-child(even) {
429*5e7646d2SAndroid Build Coastguard Worker  background: rgba(127,127,127,0.1);]n}
430*5e7646d2SAndroid Build Coastguard Workertable.list th {
431*5e7646d2SAndroid Build Coastguard Worker  border-right: 2px solid gray;
432*5e7646d2SAndroid Build Coastguard Worker  font-family: monospace;
433*5e7646d2SAndroid Build Coastguard Worker  padding: 5px 10px 5px 2px;
434*5e7646d2SAndroid Build Coastguard Worker  text-align: right;
435*5e7646d2SAndroid Build Coastguard Worker  vertical-align: top;
436*5e7646d2SAndroid Build Coastguard Worker}
437*5e7646d2SAndroid Build Coastguard Workertable.list td {
438*5e7646d2SAndroid Build Coastguard Worker  padding: 5px 2px 5px 10px;
439*5e7646d2SAndroid Build Coastguard Worker  text-align: left;
440*5e7646d2SAndroid Build Coastguard Worker  vertical-align: top;
441*5e7646d2SAndroid Build Coastguard Worker}
442*5e7646d2SAndroid Build Coastguard Workerh1.title {
443*5e7646d2SAndroid Build Coastguard Worker}
444*5e7646d2SAndroid Build Coastguard Workerh2.title {
445*5e7646d2SAndroid Build Coastguard Worker  border-bottom: solid 2px black;
446*5e7646d2SAndroid Build Coastguard Worker}
447*5e7646d2SAndroid Build Coastguard Workerh3.title {
448*5e7646d2SAndroid Build Coastguard Worker  border-bottom: solid 2px black;
449*5e7646d2SAndroid Build Coastguard Worker}
450*5e7646d2SAndroid Build Coastguard Worker--></style>
451*5e7646d2SAndroid Build Coastguard Worker  </head>
452*5e7646d2SAndroid Build Coastguard Worker  <body>
453*5e7646d2SAndroid Build Coastguard Worker<!--
454*5e7646d2SAndroid Build Coastguard Worker  Raster printer driver documentation for CUPS.
455*5e7646d2SAndroid Build Coastguard Worker
456*5e7646d2SAndroid Build Coastguard Worker  Copyright © 2007-2018 by Apple Inc.
457*5e7646d2SAndroid Build Coastguard Worker  Copyright © 1997-2007 by Easy Software Products.
458*5e7646d2SAndroid Build Coastguard Worker
459*5e7646d2SAndroid Build Coastguard Worker  Licensed under Apache License v2.0.  See the file "LICENSE" for more
460*5e7646d2SAndroid Build Coastguard Worker  information.
461*5e7646d2SAndroid Build Coastguard Worker-->
462*5e7646d2SAndroid Build Coastguard Worker
463*5e7646d2SAndroid Build Coastguard Worker<h1 class='title'>Developing Raster Printer Drivers</h1>
464*5e7646d2SAndroid Build Coastguard Worker
465*5e7646d2SAndroid Build Coastguard Worker<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>
466*5e7646d2SAndroid Build Coastguard Worker
467*5e7646d2SAndroid Build Coastguard Worker<div class='summary'><table summary='General Information'>
468*5e7646d2SAndroid Build Coastguard Worker<tbody>
469*5e7646d2SAndroid Build Coastguard Worker<tr>
470*5e7646d2SAndroid Build Coastguard Worker	<th>See Also</th>
471*5e7646d2SAndroid Build Coastguard Worker	<td>Programming: <a href='postscript-driver.html'>Developing PostScript Printer Drivers</a><br>
472*5e7646d2SAndroid Build Coastguard Worker	Programming: <a href='api-filter.html'>Filter and Backend Programming</a><br>
473*5e7646d2SAndroid Build Coastguard Worker	Programming: <a href='ppd-compiler.html'>Introduction to the PPD Compiler</a><br>
474*5e7646d2SAndroid Build Coastguard Worker	Programming: <a href='api-raster.html'>Raster API</a><br>
475*5e7646d2SAndroid Build Coastguard Worker	References: <a href='ref-ppdcfile.html'>PPD Compiler Driver Information File Reference</a><br>
476*5e7646d2SAndroid Build Coastguard Worker	Specifications: <a href='spec-ppd.html'>CUPS PPD Extensions</a></td>
477*5e7646d2SAndroid Build Coastguard Worker</tr>
478*5e7646d2SAndroid Build Coastguard Worker</tbody>
479*5e7646d2SAndroid Build Coastguard Worker</table></div>
480*5e7646d2SAndroid Build Coastguard Worker    <div class="contents">
481*5e7646d2SAndroid Build Coastguard Worker      <h2 class="title">Contents</h2>
482*5e7646d2SAndroid Build Coastguard Worker      <ul class="contents">
483*5e7646d2SAndroid Build Coastguard Worker        <li><a href="#BASICS">Printer Driver Basics</a></li>
484*5e7646d2SAndroid Build Coastguard Worker        <li><a href="#CREATING">Creating New PPD Files</a></li>
485*5e7646d2SAndroid Build Coastguard Worker        <li><a href="#FILTERS">Using Filters</a></li>
486*5e7646d2SAndroid Build Coastguard Worker        <li><a href="#COLOR">Implementing Color Management</a></li>
487*5e7646d2SAndroid Build Coastguard Worker        <li><a href="#MACOSX">Adding macOS Features</a></li>
488*5e7646d2SAndroid Build Coastguard Worker      </ul>
489*5e7646d2SAndroid Build Coastguard Worker    </div>
490*5e7646d2SAndroid Build Coastguard Worker    <div class="body">
491*5e7646d2SAndroid Build Coastguard Worker<h2 class='title'><a name='BASICS'>Printer Driver Basics</a></h2>
492*5e7646d2SAndroid Build Coastguard Worker
493*5e7646d2SAndroid Build Coastguard Worker<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>
494*5e7646d2SAndroid Build Coastguard Worker
495*5e7646d2SAndroid Build Coastguard Worker<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>
496*5e7646d2SAndroid Build Coastguard Worker
497*5e7646d2SAndroid Build Coastguard Worker<div class='figure'><table summary='Raster Filter Chain'>
498*5e7646d2SAndroid Build Coastguard Worker<caption>Figure 1: <a name='FIGURE_1'>Raster Filter Chain</a></caption>
499*5e7646d2SAndroid Build Coastguard Worker<tr><td><img src='../images/cups-raster-chain.png' width='700' height='150' alt='Raster Filter Chain'></td></tr>
500*5e7646d2SAndroid Build Coastguard Worker</table></div>
501*5e7646d2SAndroid Build Coastguard Worker
502*5e7646d2SAndroid Build Coastguard Worker<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>
503*5e7646d2SAndroid Build Coastguard Worker
504*5e7646d2SAndroid Build Coastguard Worker<div class='table'><table summary='Standard CUPS Raster Filters'>
505*5e7646d2SAndroid Build Coastguard Worker<caption>Table 1: <a name='TABLE_1'>Standard CUPS Raster Filters</a></caption>
506*5e7646d2SAndroid Build Coastguard Worker<thead>
507*5e7646d2SAndroid Build Coastguard Worker<tr><th>Filter</th><th>PDLs</th><th>ppdc DriverType</th><th>ppdc #include file</th></tr>
508*5e7646d2SAndroid Build Coastguard Worker</thead>
509*5e7646d2SAndroid Build Coastguard Worker<tbody>
510*5e7646d2SAndroid Build Coastguard Worker<tr><td>rastertoepson</td><td>ESC/P, ESC/P2</td><td>epson</td><td>epson.h</td></tr>
511*5e7646d2SAndroid Build Coastguard Worker<tr><td>rastertoescpx</td><td>ESC/P, ESC/P2, EPSON Remote Mode</td><td>escp</td><td>escp.h</td></tr>
512*5e7646d2SAndroid Build Coastguard Worker<tr><td>rastertohp</td><td>HP-PCL3, HP-PCL5</td><td>hp</td><td>hp.h</td></tr>
513*5e7646d2SAndroid Build Coastguard Worker<tr><td>rastertolabel</td><td>CPCL, Dymo, EPL1, EPL2, Intellitech PCL, ZPL</td><td>label</td><td>label.h</td></tr>
514*5e7646d2SAndroid Build Coastguard Worker<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>
515*5e7646d2SAndroid Build Coastguard Worker</tbody>
516*5e7646d2SAndroid Build Coastguard Worker</table></div>
517*5e7646d2SAndroid Build Coastguard Worker
518*5e7646d2SAndroid Build Coastguard Worker<p>The optional port monitor handles interface-specific protocol or encoding issues. For example, some raster printers use the 1284.4 communications protocol.</p>
519*5e7646d2SAndroid Build Coastguard Worker
520*5e7646d2SAndroid Build Coastguard Worker<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>
521*5e7646d2SAndroid Build Coastguard Worker
522*5e7646d2SAndroid Build Coastguard Worker<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>
523*5e7646d2SAndroid Build Coastguard Worker
524*5e7646d2SAndroid Build Coastguard Worker<div class='figure'><table summary='Command Filter Chain'>
525*5e7646d2SAndroid Build Coastguard Worker<caption>Figure 2: <a name='FIGURE_2'>Command Filter Chain</a></caption>
526*5e7646d2SAndroid Build Coastguard Worker<tr><td><img src='../images/cups-command-chain.png' width='575' height='150' alt='Command Filter Chain'></td></tr>
527*5e7646d2SAndroid Build Coastguard Worker</table></div>
528*5e7646d2SAndroid Build Coastguard Worker
529*5e7646d2SAndroid Build Coastguard Worker<p>Raster printer drivers must provide their own command filter.</p>
530*5e7646d2SAndroid Build Coastguard Worker
531*5e7646d2SAndroid Build Coastguard Worker
532*5e7646d2SAndroid Build Coastguard Worker<h2 class='title'><a name='CREATING'>Creating New PPD Files</a></h2>
533*5e7646d2SAndroid Build Coastguard Worker
534*5e7646d2SAndroid Build Coastguard Worker<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>
535*5e7646d2SAndroid Build Coastguard Worker
536*5e7646d2SAndroid Build Coastguard Worker<p class='example'>Listing 1: <a name='LISTING_1'>"examples/laserjet-basic.drv"</a></p>
537*5e7646d2SAndroid Build Coastguard Worker
538*5e7646d2SAndroid Build Coastguard Worker<pre class='example'>
539*5e7646d2SAndroid Build Coastguard Worker<I>// Include standard font and media definitions</I>
540*5e7646d2SAndroid Build Coastguard Worker<a href='ref-ppdcfile.html#_include'>#include</a> &lt;font.defs&gt;
541*5e7646d2SAndroid Build Coastguard Worker<a href='ref-ppdcfile.html#_include'>#include</a> &lt;media.defs&gt;
542*5e7646d2SAndroid Build Coastguard Worker
543*5e7646d2SAndroid Build Coastguard Worker<I>// Include HP-PCL driver definitions</I>
544*5e7646d2SAndroid Build Coastguard Worker<a href='ref-ppdcfile.html#_include'>#include</a> &lt;pcl.h&gt;
545*5e7646d2SAndroid Build Coastguard Worker
546*5e7646d2SAndroid Build Coastguard Worker<I>// Specify that this driver uses the HP-PCL driver...</I>
547*5e7646d2SAndroid Build Coastguard Worker<a href='ref-ppdcfile.html#DriverType'>DriverType</a> pcl
548*5e7646d2SAndroid Build Coastguard Worker
549*5e7646d2SAndroid Build Coastguard Worker<I>// Specify the driver options via the model number...</I>
550*5e7646d2SAndroid Build Coastguard Worker<a href='ref-ppdcfile.html#ModelNumber'>ModelNumber</a> ($PCL_PAPER_SIZE $PCL_PJL $PCL_PJL_RESOLUTION)
551*5e7646d2SAndroid Build Coastguard Worker
552*5e7646d2SAndroid Build Coastguard Worker<I>// List the fonts that are supported, in this case all standard fonts...</I>
553*5e7646d2SAndroid Build Coastguard Worker<a href='ref-ppdcfile.html#Font'>Font</a> *
554*5e7646d2SAndroid Build Coastguard Worker
555*5e7646d2SAndroid Build Coastguard Worker<I>// Manufacturer and driver version</I>
556*5e7646d2SAndroid Build Coastguard Worker<a href='ref-ppdcfile.html#Manufacturer'>Manufacturer</a> "HP"
557*5e7646d2SAndroid Build Coastguard Worker<a href='ref-ppdcfile.html#Version'>Version</a> 1.0
558*5e7646d2SAndroid Build Coastguard Worker
559*5e7646d2SAndroid Build Coastguard Worker<I>// Supported page sizes and their margins</I>
560*5e7646d2SAndroid Build Coastguard Worker<a href='ref-ppdcfile.html#HWMargins'>HWMargins</a> 18 12 18 12
561*5e7646d2SAndroid Build Coastguard Worker*<a href='ref-ppdcfile.html#MediaSize'>MediaSize</a> Letter
562*5e7646d2SAndroid Build Coastguard Worker<a href='ref-ppdcfile.html#MediaSize'>MediaSize</a> Legal
563*5e7646d2SAndroid Build Coastguard Worker<a href='ref-ppdcfile.html#MediaSize'>MediaSize</a> Executive
564*5e7646d2SAndroid Build Coastguard Worker<a href='ref-ppdcfile.html#MediaSize'>MediaSize</a> Monarch
565*5e7646d2SAndroid Build Coastguard Worker<a href='ref-ppdcfile.html#MediaSize'>MediaSize</a> Statement
566*5e7646d2SAndroid Build Coastguard Worker<a href='ref-ppdcfile.html#MediaSize'>MediaSize</a> FanFoldGermanLegal
567*5e7646d2SAndroid Build Coastguard Worker
568*5e7646d2SAndroid Build Coastguard Worker<a href='ref-ppdcfile.html#HWMargins'>HWMargins</a> 18 12.72 18 12.72
569*5e7646d2SAndroid Build Coastguard Worker<a href='ref-ppdcfile.html#MediaSize'>MediaSize</a> Env10
570*5e7646d2SAndroid Build Coastguard Worker
571*5e7646d2SAndroid Build Coastguard Worker<a href='ref-ppdcfile.html#HWMargins'>HWMargins</a> 9.72 12 9.72 12
572*5e7646d2SAndroid Build Coastguard Worker<a href='ref-ppdcfile.html#MediaSize'>MediaSize</a> A4
573*5e7646d2SAndroid Build Coastguard Worker<a href='ref-ppdcfile.html#MediaSize'>MediaSize</a> A5
574*5e7646d2SAndroid Build Coastguard Worker<a href='ref-ppdcfile.html#MediaSize'>MediaSize</a> B5
575*5e7646d2SAndroid Build Coastguard Worker<a href='ref-ppdcfile.html#MediaSize'>MediaSize</a> EnvC5
576*5e7646d2SAndroid Build Coastguard Worker<a href='ref-ppdcfile.html#MediaSize'>MediaSize</a> EnvDL
577*5e7646d2SAndroid Build Coastguard Worker<a href='ref-ppdcfile.html#MediaSize'>MediaSize</a> EnvISOB5
578*5e7646d2SAndroid Build Coastguard Worker<a href='ref-ppdcfile.html#MediaSize'>MediaSize</a> Postcard
579*5e7646d2SAndroid Build Coastguard Worker<a href='ref-ppdcfile.html#MediaSize'>MediaSize</a> DoublePostcard
580*5e7646d2SAndroid Build Coastguard Worker
581*5e7646d2SAndroid Build Coastguard Worker<I>// Only black-and-white output with mode 3 compression...</I>
582*5e7646d2SAndroid Build Coastguard Worker<a href='ref-ppdcfile.html#ColorModel'>ColorModel</a> Gray k chunky 3
583*5e7646d2SAndroid Build Coastguard Worker
584*5e7646d2SAndroid Build Coastguard Worker<I>// Supported resolutions</I>
585*5e7646d2SAndroid Build Coastguard Worker<a href='ref-ppdcfile.html#Resolution'>Resolution</a> - 1 0 0 0 "300dpi/300 DPI"
586*5e7646d2SAndroid Build Coastguard Worker*<a href='ref-ppdcfile.html#Resolution'>Resolution</a> - 8 0 0 0 "600dpi/600 DPI"
587*5e7646d2SAndroid Build Coastguard Worker
588*5e7646d2SAndroid Build Coastguard Worker<I>// Supported input slots</I>
589*5e7646d2SAndroid Build Coastguard Worker*<a href='ref-ppdcfile.html#InputSlot'>InputSlot</a> 7 "Auto/Automatic Selection"
590*5e7646d2SAndroid Build Coastguard Worker<a href='ref-ppdcfile.html#InputSlot'>InputSlot</a> 2 "Manual/Tray 1 - Manual Feed"
591*5e7646d2SAndroid Build Coastguard Worker<a href='ref-ppdcfile.html#InputSlot'>InputSlot</a> 4 "Upper/Tray 1"
592*5e7646d2SAndroid Build Coastguard Worker<a href='ref-ppdcfile.html#InputSlot'>InputSlot</a> 1 "Lower/Tray 2"
593*5e7646d2SAndroid Build Coastguard Worker<a href='ref-ppdcfile.html#InputSlot'>InputSlot</a> 5 "LargeCapacity/Tray 3"
594*5e7646d2SAndroid Build Coastguard Worker
595*5e7646d2SAndroid Build Coastguard Worker<I>// Tray 3 is an option...</I>
596*5e7646d2SAndroid Build Coastguard Worker<a href='ref-ppdcfile.html#Installable'>Installable</a> "OptionLargeCapacity/Tray 3 Installed"
597*5e7646d2SAndroid Build Coastguard Worker<a href='ref-ppdcfile.html#UIConstraints'>UIConstraints</a> "*OptionLargeCapacity False *InputSlot LargeCapacity"
598*5e7646d2SAndroid Build Coastguard Worker
599*5e7646d2SAndroid Build Coastguard Worker{
600*5e7646d2SAndroid Build Coastguard Worker  <I>// HP LaserJet 2100 Series</I>
601*5e7646d2SAndroid Build Coastguard Worker  <a href='ref-ppdcfile.html#Throughput'>Throughput</a> 10
602*5e7646d2SAndroid Build Coastguard Worker  <a href='ref-ppdcfile.html#ModelName'>ModelName</a> "LaserJet 2100 Series"
603*5e7646d2SAndroid Build Coastguard Worker  <a href='ref-ppdcfile.html#PCFileName'>PCFileName</a> "hpljt211.ppd"
604*5e7646d2SAndroid Build Coastguard Worker}
605*5e7646d2SAndroid Build Coastguard Worker
606*5e7646d2SAndroid Build Coastguard Worker{
607*5e7646d2SAndroid Build Coastguard Worker  <I>// LaserJet 2200 and 2300 series have duplexer option...</I>
608*5e7646d2SAndroid Build Coastguard Worker  <a href='ref-ppdcfile.html#Duplex'>Duplex</a> normal
609*5e7646d2SAndroid Build Coastguard Worker  <a href='ref-ppdcfile.html#Installable'>Installable</a> "OptionDuplex/Duplexer Installed"
610*5e7646d2SAndroid Build Coastguard Worker  <a href='ref-ppdcfile.html#UIConstraints'>UIConstraints</a> "*OptionDuplex False *Duplex"
611*5e7646d2SAndroid Build Coastguard Worker
612*5e7646d2SAndroid Build Coastguard Worker  {
613*5e7646d2SAndroid Build Coastguard Worker    <I>// HP LaserJet 2200 Series</I>
614*5e7646d2SAndroid Build Coastguard Worker    <a href='ref-ppdcfile.html#Throughput'>Throughput</a> 19
615*5e7646d2SAndroid Build Coastguard Worker    <a href='ref-ppdcfile.html#ModelName'>ModelName</a> "LaserJet 2200 Series"
616*5e7646d2SAndroid Build Coastguard Worker    <a href='ref-ppdcfile.html#PCFileName'>PCFileName</a> "hpljt221.ppd"
617*5e7646d2SAndroid Build Coastguard Worker  }
618*5e7646d2SAndroid Build Coastguard Worker
619*5e7646d2SAndroid Build Coastguard Worker  {
620*5e7646d2SAndroid Build Coastguard Worker    <I>// HP LaserJet 2300 Series</I>
621*5e7646d2SAndroid Build Coastguard Worker    <a href='ref-ppdcfile.html#Throughput'>Throughput</a> 25
622*5e7646d2SAndroid Build Coastguard Worker    <a href='ref-ppdcfile.html#ModelName'>ModelName</a> "LaserJet 2300 Series"
623*5e7646d2SAndroid Build Coastguard Worker    <a href='ref-ppdcfile.html#PCFileName'>PCFileName</a> "hpljt231.ppd"
624*5e7646d2SAndroid Build Coastguard Worker  }
625*5e7646d2SAndroid Build Coastguard Worker}
626*5e7646d2SAndroid Build Coastguard Worker</pre>
627*5e7646d2SAndroid Build Coastguard Worker
628*5e7646d2SAndroid Build Coastguard Worker
629*5e7646d2SAndroid Build Coastguard Worker<h2 class='title'><a name='FILTERS'>Using Filters</a></h2>
630*5e7646d2SAndroid Build Coastguard Worker
631*5e7646d2SAndroid Build Coastguard Worker<p>The standard CUPS raster filters can be specified using the
632*5e7646d2SAndroid Build Coastguard Worker<a href='ref-ppdcfile.html#DriverType'><tt>DriverType</tt></a> directive, for example:</p>
633*5e7646d2SAndroid Build Coastguard Worker
634*5e7646d2SAndroid Build Coastguard Worker<pre class='example'>
635*5e7646d2SAndroid Build Coastguard Worker<I>// Specify that this driver uses the HP-PCL driver...</I>
636*5e7646d2SAndroid Build Coastguard Worker<a href='ref-ppdcfile.html#DriverType'>DriverType</a> pcl
637*5e7646d2SAndroid Build Coastguard Worker</pre>
638*5e7646d2SAndroid Build Coastguard Worker
639*5e7646d2SAndroid Build Coastguard Worker<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>
640*5e7646d2SAndroid Build Coastguard Worker
641*5e7646d2SAndroid Build Coastguard Worker<pre class='example'>
642*5e7646d2SAndroid Build Coastguard Worker<a href='ref-ppdcfile.html#DriverType'>DriverType</a> custom
643*5e7646d2SAndroid Build Coastguard Worker<a href='ref-ppdcfile.html#Filter'>Filter</a> application/vnd.cups-raster 100 /path/to/raster/filter
644*5e7646d2SAndroid Build Coastguard Worker<a href='ref-ppdcfile.html#Filter'>Filter</a> application/vnd.cups-command 100 /path/to/command/filter
645*5e7646d2SAndroid Build Coastguard Worker</pre>
646*5e7646d2SAndroid Build Coastguard Worker
647*5e7646d2SAndroid Build Coastguard Worker
648*5e7646d2SAndroid Build Coastguard Worker<h2 class='title'><a name='COLOR'>Implementing Color Management</a></h2>
649*5e7646d2SAndroid Build Coastguard Worker
650*5e7646d2SAndroid Build Coastguard Worker<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>
651*5e7646d2SAndroid Build Coastguard Worker
652*5e7646d2SAndroid Build Coastguard Worker<pre class='example'>
653*5e7646d2SAndroid Build Coastguard Worker<a href='ref-ppdcfile.html#Attribute'>Attribute</a> cupsICCProfile "ColorModel.MediaType.Resolution/Description" /path/to/ICC/profile
654*5e7646d2SAndroid Build Coastguard Worker</pre>
655*5e7646d2SAndroid Build Coastguard Worker
656*5e7646d2SAndroid Build Coastguard Worker<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>
657*5e7646d2SAndroid Build Coastguard Worker
658*5e7646d2SAndroid Build Coastguard Worker<pre class='example'>
659*5e7646d2SAndroid Build Coastguard Worker<a href='ref-ppdcfile.html#Attribute'>Attribute</a> cupsICCProfile "Gray../Grayscale Profile" /path/to/ICC/gray-profile
660*5e7646d2SAndroid Build Coastguard Worker<a href='ref-ppdcfile.html#Attribute'>Attribute</a> cupsICCProfile "RGB../Full Color Profile" /path/to/ICC/rgb-profile
661*5e7646d2SAndroid Build Coastguard Worker</pre>
662*5e7646d2SAndroid Build Coastguard Worker
663*5e7646d2SAndroid Build Coastguard Worker<p>The options used for profile selection can be customized using the <tt>cupsICCQualifier2</tt> and <tt>cupsICCQualifier3</tt> attributes.</p>
664*5e7646d2SAndroid Build Coastguard Worker
665*5e7646d2SAndroid Build Coastguard Worker<h3><span class='info'>Since macOS 10.5</span>Custom Color Matching Support</h3>
666*5e7646d2SAndroid Build Coastguard Worker
667*5e7646d2SAndroid Build Coastguard Worker<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>
668*5e7646d2SAndroid Build Coastguard Worker
669*5e7646d2SAndroid Build Coastguard Worker<pre class='example'>
670*5e7646d2SAndroid Build Coastguard Worker<a href='ref-ppdcfile.html#Attribute'>Attribute</a> APSupportsCustomColorMatching "" true
671*5e7646d2SAndroid Build Coastguard Worker<a href='ref-ppdcfile.html#Attribute'>Attribute</a> APDefaultCustomColorMatchingProfile "" sRGB
672*5e7646d2SAndroid Build Coastguard Worker</pre>
673*5e7646d2SAndroid Build Coastguard Worker
674*5e7646d2SAndroid Build Coastguard Worker
675*5e7646d2SAndroid Build Coastguard Worker<h2 class='title'><a name='MACOSX'>Adding macOS Features</a></h2>
676*5e7646d2SAndroid Build Coastguard Worker
677*5e7646d2SAndroid Build Coastguard Worker<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>
678*5e7646d2SAndroid Build Coastguard Worker
679*5e7646d2SAndroid Build Coastguard Worker<pre class='example'>
680*5e7646d2SAndroid Build Coastguard Worker<a href='ref-ppdcfile.html#Attribute'>Attribute</a> APDialogExtension "" /Library/Printers/Vendor/filename.plugin
681*5e7646d2SAndroid Build Coastguard Worker<a href='ref-ppdcfile.html#Attribute'>Attribute</a> APHelpBook "" /Library/Printers/Vendor/filename.bundle
682*5e7646d2SAndroid Build Coastguard Worker<a href='ref-ppdcfile.html#Attribute'>Attribute</a> APPrinterIconPath "" /Library/Printers/Vendor/filename.icns
683*5e7646d2SAndroid Build Coastguard Worker<a href='ref-ppdcfile.html#Attribute'>Attribute</a> APPrinterPreset "name/text" "*option choice ..."
684*5e7646d2SAndroid Build Coastguard Worker</pre>
685*5e7646d2SAndroid Build Coastguard Worker    </div>
686*5e7646d2SAndroid Build Coastguard Worker  </body>
687*5e7646d2SAndroid Build Coastguard Worker</html>
688