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> <font.defs> 541*5e7646d2SAndroid Build Coastguard Worker<a href='ref-ppdcfile.html#_include'>#include</a> <media.defs> 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> <pcl.h> 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