1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646364736483649365036513652365336543655365636573658365936603661366236633664366536663667366836693670367136723673367436753676367736783679368036813682368336843685368636873688368936903691369236933694369536963697369836993700370137023703370437053706370737083709371037113712371337143715371637173718371937203721372237233724372537263727372837293730373137323733373437353736373737383739374037413742374337443745374637473748374937503751375237533754375537563757375837593760376137623763376437653766376737683769377037713772377337743775377637773778377937803781378237833784378537863787378837893790379137923793379437953796379737983799380038013802380338043805380638073808380938103811381238133814381538163817381838193820382138223823382438253826382738283829383038313832383338343835383638373838383938403841384238433844384538463847384838493850385138523853385438553856385738583859386038613862386338643865386638673868386938703871387238733874387538763877387838793880388138823883388438853886388738883889389038913892389338943895389638973898389939003901390239033904390539063907390839093910391139123913391439153916391739183919392039213922392339243925392639273928392939303931393239333934393539363937393839393940394139423943394439453946394739483949395039513952395339543955395639573958395939603961396239633964396539663967396839693970397139723973397439753976397739783979398039813982398339843985398639873988398939903991399239933994399539963997399839994000400140024003400440054006400740084009401040114012401340144015401640174018401940204021402240234024402540264027402840294030403140324033403440354036403740384039404040414042404340444045404640474048404940504051405240534054405540564057405840594060406140624063406440654066406740684069407040714072407340744075407640774078407940804081408240834084408540864087408840894090409140924093409440954096409740984099410041014102410341044105410641074108410941104111411241134114411541164117411841194120412141224123412441254126412741284129413041314132413341344135413641374138413941404141414241434144414541464147414841494150415141524153415441554156415741584159416041614162416341644165416641674168416941704171417241734174417541764177417841794180418141824183418441854186418741884189419041914192419341944195419641974198419942004201420242034204420542064207420842094210421142124213421442154216421742184219422042214222422342244225422642274228422942304231423242334234423542364237423842394240424142424243424442454246424742484249425042514252425342544255425642574258425942604261426242634264426542664267426842694270427142724273427442754276427742784279428042814282428342844285428642874288428942904291429242934294429542964297429842994300430143024303430443054306430743084309431043114312431343144315431643174318431943204321432243234324432543264327432843294330433143324333433443354336433743384339434043414342434343444345434643474348434943504351435243534354435543564357435843594360436143624363436443654366436743684369437043714372437343744375437643774378437943804381438243834384438543864387438843894390439143924393439443954396439743984399440044014402440344044405440644074408440944104411441244134414441544164417441844194420442144224423442444254426442744284429443044314432443344344435443644374438443944404441444244434444444544464447444844494450445144524453445444554456445744584459446044614462446344644465446644674468446944704471447244734474447544764477447844794480448144824483448444854486448744884489449044914492449344944495449644974498449945004501450245034504450545064507450845094510451145124513451445154516451745184519452045214522452345244525452645274528452945304531453245334534453545364537453845394540454145424543454445454546454745484549455045514552455345544555455645574558455945604561456245634564456545664567456845694570457145724573457445754576457745784579458045814582458345844585458645874588458945904591459245934594459545964597459845994600460146024603460446054606460746084609461046114612461346144615461646174618461946204621462246234624462546264627462846294630463146324633463446354636463746384639464046414642464346444645464646474648464946504651465246534654465546564657465846594660466146624663466446654666466746684669467046714672467346744675467646774678467946804681468246834684468546864687468846894690469146924693469446954696469746984699470047014702470347044705470647074708470947104711471247134714471547164717471847194720472147224723472447254726472747284729473047314732473347344735473647374738473947404741474247434744474547464747474847494750475147524753475447554756475747584759476047614762476347644765476647674768476947704771477247734774477547764777477847794780478147824783478447854786478747884789479047914792479347944795479647974798479948004801480248034804480548064807480848094810481148124813481448154816481748184819482048214822482348244825482648274828482948304831483248334834483548364837483848394840484148424843484448454846484748484849485048514852485348544855485648574858485948604861486248634864486548664867486848694870487148724873487448754876487748784879488048814882488348844885488648874888488948904891489248934894489548964897489848994900490149024903490449054906490749084909491049114912491349144915491649174918491949204921492249234924492549264927492849294930493149324933493449354936493749384939494049414942494349444945494649474948494949504951495249534954495549564957495849594960496149624963496449654966496749684969497049714972497349744975497649774978497949804981498249834984498549864987498849894990499149924993499449954996499749984999500050015002500350045005500650075008500950105011501250135014501550165017501850195020502150225023502450255026502750285029503050315032503350345035503650375038503950405041504250435044504550465047504850495050505150525053505450555056505750585059506050615062506350645065506650675068506950705071507250735074507550765077507850795080508150825083508450855086508750885089509050915092509350945095509650975098509951005101510251035104510551065107510851095110511151125113511451155116511751185119512051215122512351245125512651275128512951305131513251335134513551365137513851395140514151425143514451455146514751485149515051515152515351545155515651575158515951605161516251635164516551665167516851695170517151725173517451755176517751785179518051815182518351845185518651875188518951905191519251935194519551965197519851995200520152025203520452055206520752085209521052115212521352145215521652175218521952205221522252235224522552265227522852295230523152325233523452355236523752385239524052415242524352445245524652475248524952505251525252535254525552565257525852595260526152625263526452655266526752685269527052715272527352745275527652775278527952805281528252835284528552865287528852895290529152925293529452955296529752985299530053015302530353045305530653075308530953105311531253135314531553165317531853195320532153225323532453255326532753285329533053315332533353345335533653375338533953405341534253435344534553465347534853495350535153525353535453555356535753585359536053615362536353645365536653675368536953705371537253735374537553765377537853795380538153825383538453855386538753885389539053915392539353945395539653975398539954005401540254035404540554065407540854095410541154125413541454155416541754185419542054215422542354245425542654275428542954305431543254335434543554365437543854395440544154425443544454455446544754485449545054515452545354545455545654575458545954605461546254635464546554665467546854695470547154725473547454755476547754785479548054815482548354845485548654875488548954905491549254935494549554965497549854995500550155025503550455055506550755085509551055115512551355145515551655175518551955205521552255235524552555265527552855295530553155325533553455355536553755385539554055415542554355445545554655475548554955505551555255535554555555565557555855595560556155625563556455655566556755685569557055715572557355745575557655775578557955805581558255835584558555865587558855895590559155925593559455955596559755985599560056015602560356045605560656075608560956105611561256135614561556165617561856195620562156225623562456255626562756285629563056315632563356345635563656375638563956405641564256435644564556465647564856495650565156525653565456555656565756585659566056615662566356645665566656675668566956705671567256735674567556765677567856795680568156825683568456855686568756885689569056915692569356945695569656975698569957005701570257035704570557065707570857095710571157125713571457155716571757185719572057215722572357245725572657275728572957305731573257335734573557365737573857395740574157425743574457455746574757485749575057515752575357545755575657575758575957605761576257635764576557665767576857695770577157725773577457755776577757785779578057815782578357845785578657875788578957905791579257935794579557965797579857995800580158025803580458055806580758085809581058115812581358145815581658175818581958205821582258235824582558265827582858295830583158325833583458355836583758385839584058415842584358445845584658475848584958505851585258535854585558565857585858595860586158625863586458655866586758685869587058715872587358745875587658775878587958805881588258835884588558865887588858895890589158925893589458955896589758985899590059015902590359045905590659075908590959105911591259135914591559165917591859195920592159225923592459255926592759285929593059315932593359345935593659375938593959405941594259435944594559465947594859495950595159525953595459555956595759585959596059615962596359645965596659675968596959705971597259735974597559765977597859795980598159825983598459855986598759885989599059915992599359945995599659975998599960006001600260036004600560066007600860096010601160126013601460156016601760186019602060216022602360246025602660276028602960306031603260336034603560366037603860396040604160426043604460456046604760486049605060516052605360546055605660576058605960606061606260636064606560666067606860696070607160726073607460756076607760786079608060816082608360846085608660876088608960906091609260936094609560966097609860996100610161026103610461056106610761086109611061116112611361146115611661176118611961206121612261236124612561266127612861296130613161326133613461356136613761386139614061416142614361446145614661476148614961506151615261536154615561566157615861596160616161626163616461656166616761686169617061716172617361746175617661776178617961806181618261836184618561866187618861896190619161926193619461956196619761986199620062016202620362046205620662076208620962106211621262136214621562166217621862196220622162226223622462256226622762286229623062316232623362346235623662376238623962406241624262436244624562466247624862496250625162526253625462556256625762586259626062616262626362646265626662676268626962706271627262736274627562766277627862796280628162826283628462856286628762886289629062916292629362946295629662976298629963006301630263036304630563066307630863096310631163126313631463156316631763186319632063216322632363246325632663276328632963306331633263336334633563366337633863396340634163426343634463456346634763486349635063516352635363546355635663576358635963606361636263636364636563666367636863696370637163726373637463756376 |
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
- <html>
- <head>
- <title>Details of Ghostscript output devices</title>
- <!-- $Id: Devices.htm,v 1.34.2.4 2002/02/01 05:31:24 raph Exp $ -->
- <!-- Originally: devices.txt -->
- <link rel="stylesheet" type="text/css" href="gs.css" title="Ghostscript Style">
- </head>
- <body>
- <!-- [1.0 begin visible header] ============================================ -->
- <!-- [1.1 begin headline] ================================================== -->
- <h1>Details of Ghostscript output devices</h1>
- <!-- [1.1 end headline] ==================================================== -->
- <!-- [1.2 begin table of contents] ========================================= -->
- <h2>Table of contents</h2>
- <blockquote><ul>
- <li><a href="#Measurements">Notes on measurements</a>
- <li><a href="#IJS">IJS - Inkjet and other raster devices</a>
- <li><a href="#Win">MS Windows printers</a>
- <li><a href="#File_formats">File formats</a>
- <ul>
- <li><a href="#JFIF">JPEG file format (JFIF)</a>
- <li><a href="#TIFF">TIFF file formats</a>
- </ul>
- <li><a href="#Display_devices">Display devices</a>
- <ul>
- <li><a href="#x11_devices">X Window System</a>
- </ul>
- <li><a href="#HP_ijs">HP Deskjet official drivers</a>
- <li><a href="#HP8_color_inkjet">H-P 8xx, 1100, and 1600 color inkjet printers</a>
- <ul>
- <li><a href="#HP8_gdevcd8">Drivers contained in <b><tt>gdevcd8.c</tt></b></a>
- <li><a href="#HP8_further_documentation">Further documentation</a>
- </ul>
- <li><a href="#HP880_color_inkjet">H-P 812, 815, 832, 880, 882, 895, and 970 color inkjet printers</a>
- <ul>
- <li><a href="#HP880_gdevcd8">Drivers contained in <b><tt>gdevcd8.c</tt></b></a>
- <li><a href="#HP880_further_documentation">Further documentation</a>
- </ul>
- <li><a href="#HP_color_inkjet">Other H-P color inkjet printers</a>
- <ul>
- <li><a href="#HP_gdevcdj">Drivers contained in <b><tt>gdevcdj.c</tt></b></a>
- <li><a href="#HP_paper_size">Default paper size</a>
- <li><a href="#HP_limits">Deskjet physical limits</a>
- <li><a href="#HP_command_line">Printer properties (command-line parameters)</a>
- <ul>
- <li><a href="#HP_bpp">Bits per pixel</a>
- <li><a href="#HP_deskjet_properties">Deskjet properties</a>
- <li><a href="#HP_paintjet_properties">Paintjet XL300 / Paintjet XL properties</a>
- </ul>
- <li><a href="#HP_gamma">Gamma correction</a>
- <li><a href="#HP_resolution_enhance">HP's resolution-enhanced mode for Inkjet printers</a>
- <li><a href="#HP_tips">General tips</a>
- </ul>
- <li><a href="#BJC_8200">Canon BJC-8200 printer</a>
- <li><a href="#BJC">Other Canon BubbleJet (BJC) printers</a>
- <ul>
- <li><a href="#BJC_history">History</a>
- <li><a href="#BJC_build">Configuring and building the BJC drivers</a>
- <ul>
- <li><a href="#BJC_defaults">Modify values in <b><tt>gdevbjc.h</tt></b></a>
- <li><a href="#BJC_CMYK_RGB">CMYK-to-RGB color conversion</a>
- <li><a href="#BJC_vertical_centering">Vertical centering of the printable area</a>
- <li><a href="#BJC_margins">Page margins</a>
- <li><a href="#BJC_compile">Makefile and compilation</a>
- </ul>
- <li><a href="#BJC_usage">Use of the drivers</a>
- <ul>
- <li><a href="#BJC_options">Supported Options and Defaults</a>
- <li><a href="#BJC_device_info">Device information</a>
- <li><a href="#BJC_HW_margins">Hardware margins</a>
- <li><a href="#BJC_PPD">PostScript printer description (PPD) files</a>
- <li><a href="#BJC_PPD_custom">Customizing the PPD files</a>
- </ul>
- <li><a href="#BJC_bugs">How to report problems</a>
- <li><a href="#BJC_acks">Acknowledgements</a>
- </ul>
- <li><a href="#STC_epson_stylus">Epson Stylus color printer (see also <b><tt>uniprint</tt></b>)</a>
- <ul>
- <li><a href="#STC_usage">Usage</a>
- <li><a href="#STC_options">Options</a>
- <li><a href="#STC_FAQ">Application note and FAQ</a>
- <ul>
- <li><a href="#STC_FAQ_A3">Support for A3 paper</a>
- <li><a href="#STC_FAQ_margins">Margins, PageSize</a>
- <li><a href="#STC_FAQ_II_IIS_1500">Stylus Color II / IIs and 1500</a>
- </ul>
- <li><a href="#STC_recommendations">Recommendations</a>
- <ul>
- <li><a href="#STC_dither_experiment">Color dithering experiments with <b><tt>gdevstc</tt></b> 1.21</a>
- </ul>
- <li><a href="#STC_color_transform">Color transformation</a>
- <li><a href="#STC_CAM"><b><tt>ColorAdjustMatrix</tt></b></a>
- <li><a href="#STC_RGBCMYK_coding">RGB / CMYK coding and transfer, and <b><tt>BitsPerPixel</tt></b></a>
- <li><a href="#What_is_weaving">What is weaving?</a>
- <li><a href="#STC_print_modes">Print mode parameters</a>
- <ul>
- <li><a href="#STC_unidirectional"><b><tt>Unidirectional</tt></b></a>
- <li><a href="#STC_noweave"><b><tt>Microweave</tt></b>, <b><tt>noWeave</tt></b> and <b><tt>OutputCode=deltarow</tt></b></a>
- <li><a href="#STC_model"><b><tt>Model</tt></b></a>
- </ul>
- <li><a href="#STC_Pitfalls">Bugs and pitfalls</a>
- <li><a href="#STC_Tests">Tests</a>
- <ul>
- <li><a href="#STC_OutputCodes">The various OutputCodes</a>
- <li><a href="#STC_printing_time">Printing time related to other options</a>
- </ul>
- <li><a href="#STC_acks">Acknowledgments</a>
- </ul>
- <li><a href="#Uniprint">uniprint, a flexible unified printer driver</a>
- <ul>
- <li><a href="#Uni_state">The state of this driver</a>
- <li><a href="#Uni_background">Notes on <b><tt>uniprint</tt></b>'s background</a>
- <li><a href="#Uni_make_pfile">Godzilla's guide to the creation of Unified Printer Parameter (<b><tt>.upp</tt></b>) files</a>
- <li><a href="#Uni_all_parameters">All parameters in brief</a>
- <li><a href="#Uni_honors"><b><tt>Uniprint</tt></b>'s Roll of Honor</a>
- <li><a href="#Uni_weaving_howto"><b><tt>Uniprint</tt></b> weaving parameters howto</a></li>
- <li><a href="#Uni_esc300">Extension to <b><tt>uniprint</tt></b> for the Epson Stylus Color 300</a></li>
- </ul>
- <li><a href="#SPARCprinter">Sun SPARCprinter</a>
- <ul>
- <li><a href="#SPARC_install">Installation</a>
- <li><a href="#SPARC_problems">Problems</a>
- </ul>
- <li><a href="#Apple">Apple dot matrix printer</a>
- </ul></blockquote>
- <!-- [1.2 end table of contents] =========================================== -->
- <!-- [1.3 begin hint] ====================================================== -->
- <p>For other information, see the <a href="Readme.htm">Ghostscript
- overview</a>. You may also be interested in <a href="Make.htm">how to
- build Ghostscript</a> and <a href="Install.htm">install it</a>, as well as
- the description of the <a href="Drivers.htm">driver interface</a>.
- <!-- [1.3 end hint] ======================================================== -->
- <hr>
- <!-- [1.0 end visible header] ============================================== -->
- <!-- [2.0 begin contents] ================================================== -->
- <h2><a name="Measurements"></a>Notes on measurements</h2>
- <p>
- Several different important kinds of measures appear throughout this
- document: inches, centimeters and millimeters, points, and bits per pixel.
- <dl>
- <dt><b>Inches</b>
- <dd>1 inch equals 2.54 centimeters. The inch measure is sometimes
- represented by "<b>in</b>" or a quotation mark (<b>"</b>) to the right
- of a measure, like <b>8.5in</b> or <b>8.5""</b>. Dots per inch,
- "<b>dpi</b>", are the common measure of printing resolution for dot-matrix,
- laser, and ink-jet printers. U.S. "letter" paper is exactly
- 8.5in×11in, approximately 21.6cm×27.9cm. (See in the usage
- documentation all the <a href="Use.htm#Known_paper_sizes">paper sizes
- predefined in Ghostscript</a>.)
- <dt><b>Centimeters</b> and <b>millimeters</b>
- <dd>ISO standard paper sizes such as A4 and A3 are commonly represented in
- the SI units of centimeters and millimeters. Centimeters are abbreviated
- "<b><tt>cm</tt></b>", millimeters "<b><tt>mm</tt></b>". ISO A4 paper is
- quite close to 21.0×29.7 centimeters (approximately 8.3×11.7
- inches).
- <dt><b>Points</b>
- <dd>Points are a measure traditionally used in the printing trade and now
- in PostScript, which specifies exactly 72 points per inch (approximately
- 28.35 per centimeter). The <a href="Use.htm#Known_paper_sizes">paper sizes
- known to Ghostscript</a> are defined in the initialization file
- <b><tt>gs_statd.ps</tt></b> in terms of points.
- <dt><b>Bits per pixel</b>
- <dd>Commonly abbreviated "<b><tt>bpp</tt></b>".
- </dl>
- <hr>
- <h2><a name="IJS"></a>IJS - Inkjet and other raster devices</h2>
- <p>
- IJS is a relatively new initiative to improve the quality and ease of
- use of inkjet printing with Ghostscript. Using IJS, you can add new
- drivers, or upgrade existing ones, without recompiling Ghostscript.
- All driver authors are encouraged to adapt their drivers for IJS, and
- if there is an IJS driver available for your printer, it should be
- your first choice.
- </p>
- <p>Please see the <a href="http://www.linuxprinting.org/ijs/">IJS web
- page</a> for more information about IJS, including a listing of
- IJS-compatible drivers.
- </p>
- <p>
- A typical command line for IJS is:
- </p>
- <blockquote>
- <b><tt>
- gs -DSAFER -sDEVICE=ijs -sIjsServer=hpijs
- -sDeviceManufacturer=HEWLETT-PACKARD -sDeviceModel='DESKJET 990'
- -DIjsUseOutputFD -sOutputFile=/dev/usb/lp1 -DNOPAUSE --
- examples/tiger.eps
- </tt></b>
- </blockquote>
- <p>
- Individual IJS command line parameters are as follows:
- </p>
- <dl>
- <dt><b><tt>-sIjsServer=</tt></b><em>{path}</em>
- <dd>Sets the pathname for the IJS server (ie printer driver).
- Ghostscript will spawn a new process for this driver, and communicate
- with it using the IJS protocol. The pathname need not be absolute,
- as the PATH environment variable is searched, but it's probably a good
- idea for robustness and security. Note also that if -dSAFER is not
- specified, it's possible for PostScript code to set this parameter,
- so it can cause arbitrary code to be executed. See the section on <a
- href="Use.htm#Security">Security</a> for more information.
- </dl>
- <dl>
- <dt><b><tt>-sDeviceManufacturer=</tt></b><em>{name}</em>
- <dt><b><tt>-sDeviceModel=</tt></b><em>{name}</em>
- <dd>These parameters select the device according to IEEE-1284 standard
- device ID strings. In general, consult the documentation for the
- driver to find the appropriate settings. Note that, if the value
- contains a space, you'll want to quote the value in your shell, as
- in the example above.
- </dl>
- <dl>
- <dt><b><tt>-sIjsParams=</tt></b><em>{params}</em>
- <dd>This parameter allows you to set arbitrary IJS parameters on
- the IJS driver. The format is a comma-separated list of
- <b><tt>key=value</tt></b> pairs. If it is necessary to send a
- value containing a comma or backslash, it can be escaped with
- a backslash. Thus, <b><tt>'-sIjsParams=Foo=bar,Baz=a\,b'</tt></b> sets
- the parameter Foo to "bar", and Baz to "a,b".
- </dl>
- <dl>
- <dt><b><tt>-dIjsUseOutputFD</tt></b>
- <dd>This flag indicates that Ghostscript should open the output file
- and pass a file descriptor to the server. If not set, Ghostscript
- simply passes the filename set in OutputFile to the server. In most
- cases, this flag won't matter, but if you have a driver which works
- only with OutputFD (such as hpijs 1.0.2), or if you're using the
- -sOutputFile="|cmd" syntax, you'll need to set it.
- </dl>
- <dl>
- <dt><b><tt>-dBitsPerSample=</tt></b><em>N</em>
- <dd>This parameter controls the number of bits per sample. The
- default value of 8 should be appropriate for most work. For monochrome
- images, use -dBitsPerSample=1.
- </dl>
- <p>Generic Ghostscript options that are particularly relevant for IJS
- are summarized below:
- </p>
- <dl>
- <dt><b><tt>-r</tt></b><em>number</em>
- <br><b><tt>-r</tt></b><em>number1</em><b><tt>x</tt></b><em>number2</em>
- <dd>Sets the resolution, in dpi. If the resolution is not specified,
- Ghostscript queries the IJS server to determine the preferred resolution.
- When the resolution is specified, it overrides the value (if any)
- preferred by the IJS server.
- </dl>
- <dl>
- <dt><b><tt>-dDuplex</tt></b>
- <dt><b><tt>-dTumble</tt></b>
- <dd>These flags enable duplex (two-sided) printing. Tumble controls
- the orientation. When Tumble is false, the pages
- are oriented suitably at the left or right. When Tumble is true,
- the pages are oriented suitably for binding at the top or
- bottom.
- </dl>
- <dl>
- <dt><b><tt>-sProcessColorModel=</tt></b><em>{name}</em>
- <dd>Use this flag to select the process color model. Suitable values
- include DeviceGray, DeviceRGB, and DeviceCMYK.
- </dl>
- <h3>Building IJS</h3>
- <p> IJS is included by default on Unix gcc builds, and also in
- autoconf'ed builds. Others may need some makefile tweaking. First,
- make sure the IJS device is selected:
- <blockquote>
- DEVICE_DEVS2=$(DD)ijs.dev
- </blockquote>
- <p> Next, make sure that the path and execution type are set in
- the toplevel makefile. The values for Unix are as follows:
- <blockquote>
- IJSSRCDIR=ijs
- IJSEXECTYPE=unix
- </blockquote>
- <p> At present, "unix" and "win" are the only supported values for
- IJSEXECTYPE. If neither sounds appropriate for your system, it's
- possible that more porting work is needed.
- <p> Last, make sure that ijs.mak is included in the toplevel makefile.
- It should be present right after the include of icclib.mak.
- <p> IJS is not inherently platform-specific. We're very much interested
- in taking patches from people who have ported it to non-mainstream
- platforms. And once it's built, you won't have to recompile Ghostscript
- to support new drivers!
- <h2><a name="Win"></a>MS Windows printers</h2>
- <p>
- This section was written by Russell Lang, the author of Ghostscript's
- MS Windows-specific printer driver, and updated by
- <a href="mailto:Pierre.Arnaud@opac.ch">Pierre Arnaud</a>,
- the current maintainer.
- </p>
- <p>
- The <b><tt>mswinpr2</tt></b> device uses MS Windows printer drivers, and
- thus should work with any printer with device-independent bitmap (DIB)
- raster capabilities. The printer resolution cannot be selected directly
- using PostScript commands from Ghostscript: use the printer setup in the
- Control Panel instead. It is however possible to specify a maximum resolution
- for the printed document (see below).
- </p>
- <p>
- If no Windows printer name is specified in <b><tt>-sOutputFile</tt></b>,
- Ghostscript prompts for a Windows printer using the standard Print Setup
- dialog box. You must set the orientation to Portrait and the page size to
- that expected by Ghostscript; otherwise the image will be clipped.
- Ghostscript sets the physical device size to that of the Windows printer
- driver, but it does not update the PostScript clipping path.
- </p>
- <p>
- If a Windows printer name is specified in <b><tt>-sOutputFile</tt></b> using
- the format <tt>"\\spool\printer_name"</tt>, for instance
- </p>
- <blockquote><b><tt>
- gs ... -sOutputFile="\\spool\Apple LaserWriter II NT"
- </tt></b></blockquote>
- <p>
- then Ghostscript attempts to open the Windows printer without prompting
- (except, of course, if the printer is connected to <b><tt>FILE:</tt></b>).
- Ghostscript attempts to set the Windows printer page size and orientation
- to match that expected by Ghostscript, but doesn't always succeed. It uses
- this algorithm:
- </p>
- <ol>
- <li>If the requested page size matches one of the Windows standard page
- sizes +/- 2mm, request that standard size.</li>
- <li>Otherwise if the requested page size matches one of the Windows
- standard page sizes in landscape mode, ask for that standard size in
- landscape.</li>
- <li>Otherwise ask for the page size by specifying only its dimensions.</li>
- <li>Merge the requests above with the defaults. If the printer driver
- ignores the requested paper size, no error is generated: it will print on
- the wrong paper size.</li>
- <li>Open the Windows printer with the merged orientation and size.</li>
- </ol>
- <p>
- The Ghostscript physical device size is updated to match the Windows
- printer physical device.
- </p>
- <h3><a name="Win_properties"></a>Supported command-line parameters</h3>
- <p>
- The <b><tt>mswinpr2</tt></b> device supports a limited number of command-line
- parameters (e.g. it does not support setting the printer resolution). The
- recognized parameters are the following:
- </p>
- <blockquote>
- <dl>
- <dt><b><tt>-sDEVICE=mswinpr2</tt></b></dt>
- <dd>Selects the MS Windows printer device. If Ghostscript was not
- compiled with this device as the default output device, you have to specify
- it on the command line.</dd>
- <dt><b><tt>-dNoCancel</tt></b></dt>
- <dd>Hides the progress dialog, which shows the percent of the document page
- already processed and also provides a <em>cancel</em> button. This option
- is useful if GS is intended to print pages in the background, without any
- user intervention.</dd>
- <dt><b><tt>-sOutputFile=</tt></b><b>"\\spool\<em>printer_name</em>"</b></dt>
- <dd>Specifies which printer should be used. The <em>printer_name</em> should be
- typed exactly as it appears in the Printers control panel, including spaces.</dd>
- </dl>
- </blockquote>
- <h3><a name="Win_options"></a>Supported options (device properties)</h3>
- <p>
- Several extra options exist which cannot be set through the command-line,
- but only by executing the appropriate PostScript setup code. These options
- can be set through the inclusion of a setup file on the command-line:
- </p>
- <blockquote><b><tt>
- gs ... setup.ps ...
- </tt></b></blockquote>
- <p>
- The <tt>setup.ps</tt> file is responsible for the device selection, therefore
- you should not specify the <b><tt>-sDEVICE=mswinpr2</tt></b> option on the
- command-line if you are using such a setup file. Here is an example of such
- a setup file:
- </p>
- <blockquote><pre>
- mark
- /NoCancel true % don't show the cancel dialog
- /BitsPerPixel 4 % force 4 bits/pixel
- /UserSettings
- <<
- /DocumentName (Ghostscript document) % name for the Windows spooler
- /MaxResolution 360 % maximum document resolution
- >>
- (mswinpr2) finddevice % select the Windows device driver
- putdeviceprops
- setdevice
- </pre></blockquote>
- <p>
- This example disables the progress dialog (same as the <tt><b>-dNoCancel</b></tt>
- option), forces a 4 bits/pixel output resolution and specifies additional user
- settings, such as the document name (which will be displayed by the Windows
- spooler for the queued document) and the maximum resolution (here 360 dpi).
- It then finds and selects an instance of the MS Windows device printer
- and activates it. This will show the standard printer dialog, since no
- <tt><b>/OutputFile</b></tt> property was specified.
- </p>
- <p>
- The following options are available:
- </p>
- <blockquote>
- <dl>
- <dt><b><tt>/NoCancel <em>boolean</em></tt></b></dt>
- <dd>Disables (hides) the progress dialog when set to <em><tt>true</tt></em> or
- show the progress dialog if not set or set to <em><tt>false</tt></em>.</dd>
- <dt><b><tt>/OutputFile <em>string</em></tt></b></dt>
- <dd>Specifies which printer should be used. The string should be of the form
- <tt><b>\\spool\<em>printer_name</em></b></tt>, where the <em>printer_name</em> should be
- typed exactly as it appears in the Printers control panel, including spaces.</dd>
- <dt><b><tt>/QueryUser <em>integer</em></tt></b></dt>
- <dd>Shows the standard printer dialog (<tt><b>1</b></tt> or any other value),
- shows the <em>printer setup dialog</em> (<tt><b>2</b></tt>) or selects the
- <em>default Windows printer</em> without any user interaction (<tt><b>3</b></tt>).</dd>
- <dt><b><tt>/BitsPerPixel <em>integer</em></tt></b></dt>
- <dd>Sets the device depth to the specified bits per pixel. Currently supported
- values are <tt><b>1</b></tt> (monochrome), <tt><b>4</b></tt> (CMYK with screening
- handled by Ghostscript) and <tt><b>24</b></tt> (True Color, dithering handled by
- the Windows printer driver; this option can produce huge print jobs).</dd>
- <dt><b><tt>/UserSettings <em>dict</em></tt></b></dt>
- <dd>Sets additional options, defined in a dictionary. The following properties can
- be set:
- <dl>
- <dt><b><tt>/DocumentName <em>string</em></tt></b></dt>
- <dd>Defines the user friendly document name which will be displayed by the
- Windows spooler.</dd>
- <dt><b><tt>/DocumentRange <em>[n1 n2]</em></tt></b></dt>
- <dd>Defines the range of pages contained in the document. This information can
- be used by the printer dialog, in conjunction with the following property.</dd>
- <dt><b><tt>/SelectedRange <em>[n1 n2]</em></tt></b></dt>
- <dd>Defines the selected range of pages. This information will be displayed in
- the printer dialog and will be updated after the user interaction. A PostScript
- program could check these values and print only the selected page range.</dd>
- <dt><b><tt>/MaxResolution <em>dpi</em></tt></b></dt>
- <dd>Specifies the maximum tolerated output resolution. If the selected printer has
- a higher resolution than <tt><b>dpi</b></tt>, then Ghostscript will render the
- document with a submultiple of the printer resolution. For example, if
- <tt><b>MaxResolution</b></tt> is set to 360 and the output printer supports
- up to 1200 dpi, then Ghostscript renders the document with an internal
- resolution of 1200/4=300 dpi. This can be very useful to reduce the memory
- requirements when printing in True Color on some high resolution ink-jet color
- printers.</dd>
- </dl></dd>
- </dl>
- </blockquote>
- <p>
- These properties can be queried through the <tt><b>currentpagedevice</b></tt>
- operator. The following PostScript code snippet shows how to do it for some
- of the properties:
- </p>
- <blockquote><pre>
- currentpagedevice /BitsPerPixel get == % displays the selected depth
- currentpagedevice /UserSettings get % get the additional options..
- /us exch def % ..and assign them to a variable
- us /DocumentName get == % displays the document name
- us /SelectedRange get == % displays the selected page range
- % other misc. informations (don't rely on them)
- us /Color get == % 1 => monochrome output, 2 => color output
- us /PrintCopies get == % displays the number of copies requested
- </pre></blockquote>
- <p>
- There are a few undocumented informations stored in the <tt><b>UserSettings</b></tt>
- dictionary. You should not rely on them. Their use is still experimental and
- they could be removed in a future version.
- </p>
- <h3><a name="Win_duplex"></a>Duplex printing</h3>
- <p>
- If the Windows printer supports the duplex printing feature, then it will
- also be available through the <b><tt>mswinpr2</tt></b> device. You can query
- for this support through the <b><tt>/Duplex</tt></b> propery of the
- <b><tt>currentpagedevice</tt></b>. If it returns <b><tt>null</tt></b>, then
- the feature is not supported by the selected printer. Otherwise, <b><tt>true</tt></b>
- means that the printer is currently set up to print on both faces of the paper
- and <b><tt>false</tt></b> that it is not, but that it can.
- </p>
- <p>
- The following example shows how to print on both faces of the paper (using
- the long side of the paper as the reference):
- </p>
- <blockquote><pre>
- << /Duplex true /Tumble false >> setpagedevice
- </pre></blockquote>
- <p>
- </p>
- <hr>
- <h2><a name="File_formats"></a>File formats</h2>
- <h3><a name="JFIF"></a>JPEG file format (JFIF)</h3>
- <p>
- Ghostscript includes output drivers that can produce <a
- href="http://www.ijg.org/">Independent JPEG Group</a> JFIF (JPEG File
- Interchange Format) files from PostScript images. <b>Please note</b> that
- JPEG is a compression method specifically intended for continuous-tone
- images such as photographs, not for graphics, and it is therefore quite
- unsuitable for the vast majority of page images produced with PostScript,
- which should be saved in a form better for graphics, such as
- <a href="http://www.libpng.org/pub/png/">Portable Network Graphics</a>
- (PNG) format. If you get crummy-looking JPEG files, don't blame
- Ghostscript; instead consult a reference about uses and abuses of JPEG,
- such as the JPEG FAQ
- <blockquote>
- <a href="http://www.faqs.org/faqs/jpeg-faq/">http://www.faqs.org/faqs/jpeg-faq/</a>
- </blockquote>
- <p>
- You can use the JPEG output drivers -- <b><tt>jpeg</tt></b> to produce
- color JPEG files and <b><tt>jpeggray</tt></b> for grayscale JPEGs -- the
- same as other file-format drivers: by specifying the device name and an
- output file name, for example
- <blockquote><b><tt>
- gs -sDEVICE=jpeg -sOutputFile=foo.jpg foo.ps
- </tt></b></blockquote>
- <p>
- You can also use the <a href="Use.htm#Resolution_switch"><b><tt>-r</tt></b>
- switch</a> to specify the imaging resolution and thus the output file's
- size in pixels. The default resolution is normally 72×72dpi.
- <p>
- The JPEG devices support several special parameters to control the JPEG
- "quality setting" (DCT quantization level).
- <blockquote>
- <dl>
- <dt><b><tt>-dJPEGQ=</tt></b><b><em>N</em></b> (integer from 0 to 100, default 75)
- <dd>Set the quality level <b><em>N</em></b> according to the widely used
- IJG quality scale, which balances the extent of compression against the
- fidelity of the image when reconstituted. Lower values drop more
- information from the image to achieve higher compression, and therefore
- have lower quality when reconstituted.
- <dt><b><tt>-dQFactor=</tt></b><b><em>M</em></b> (float from 0.0 to 1.0)
- <dd>Adobe's QFactor quality scale, which you may use in place of
- <b><tt>JPEGQ</tt></b> above. The QFactor scale is used by PostScript's
- DCTEncode filter but is nearly unheard-of elsewhere.
- </dl>
- </blockquote>
- <p>
- At this writing the default JPEG quality level of 75 is equivalent to
- <b><tt>-dQFactor=0.5</tt></b>, but the JPEG default might change in the
- future. The JPEG drivers could be extended to support additional JPEG
- compression options, such as the other DCTEncode filter parameters, but so
- far they haven't been.
- <h3><a name="TIFF"></a>TIFF file formats</h3>
- <p>
- There are two unrelated sets of TIFF drivers. There are two color TIFF
- drivers that produce uncompressed output:
- <blockquote>
- <dl>
- <dt><b><tt>tiff12nc</tt></b>
- <dd>Produces 12-bit RGB output (4 bits per component).
- <dt><b><tt>tiff24nc</tt></b>
- <dd>Produces 24-bit RGB output (8 bits per component).
- </dl>
- </blockquote>
- <p>
- The remaining TIFF drivers all produce black-and-white output with different
- compression modes:
- <blockquote>
- <dl>
- <dt><b><tt>tiffcrle</tt></b>
- <dd>G3 fax encoding with no EOLs
- <dt><b><tt>tiffg3</tt></b>
- <dd>G3 fax encoding with EOLs
- <dt><b><tt>tiffg32d</tt></b>
- <dd>2-D G3 fax encoding
- <dt><b><tt>tiffg4</tt></b>
- <dd>G4 fax encoding
- <dt><b><tt>tifflzw</tt></b>
- <dd>LZW-compatible (tag = 5) compression
- <dt><b><tt>tiffpack</tt></b>
- <dd>PackBits (tag = 32773) compression
- </dl>
- </blockquote>
- <p>
- The black-and-white TIFF drivers support creation of files that are
- comprised of more than a single strip. Multi-strip files reduce the memory
- requirement on the reader, since readers need only store and process one
- strip at a time. These drivers provide two parameters beyond the standard
- set:
- <blockquote>
- <dl>
- <dt><b><tt>-dMaxStripSize=</tt><em>N</em></b> (non-negative integer; default = 0)
- <dd>Set the maximum (uncompressed) size of a strip.
- <dt><b><tt>-dAdjustWidth=</tt><em>true|false</em></b> (Boolean; default =
- true)
- <dd>If true, then if the requested page width is close to either A4 (1728
- columns) or B4 (2048 columns), set the page width to A4 or B4 respectively.
- </dl></blockquote>
- <p>
- The TIFF 6.0 specification, Section 7, page 27, recommends that the size of
- each strip be about 8 Kbytes. As an example, to generate the 'tiger' in
- tiffg4 format that has the recommended strip size, use:
- <blockquote><pre>
- gs -sDEVICE=tiffg4 -sOutputFile=tiger.tif -dMaxStripSize=8192 examples/tiger.ps
- </pre></blockquote>
- <p>
- If the value of the <b><tt>MaxStripSize</tt></b> parameter is smaller than a
- single image row, then no error will be generated, and the TIFF file will be
- generated correctly using one row per strip. Note that smaller strip sizes
- increase the size of the file by increasing the size of the StripOffsets and
- StripByteCounts tables, and by reducing the effectiveness of the compression
- which must start over for each strip.
- <p>
- If the value of MaxStripSize is 0 (the default), then the entire image will
- be a single strip.
- <hr>
- <h2><a name="Display_devices"></a>Display Devices</h2>
- <p>
- Ghostscript is often used for screen display of postscript and pdf documents.
- In many cases, a client or 'viewer' application calls the ghostscript engine
- to do the rasterization and handles the display of the resulting image itself,
- but it is also possible to invoke ghostscript directly and select an output
- device which directly handles displaying the image on screen.
- <p>
- This section describes the various display-oriented devices that are available
- in ghostscript.
- <h3><a name="x11_devices"></a>X Window System</h3>
- <p>
- Perhaps the most common use of of a display device is with the X Window System
- on unix-like systems. It is the default device on the command line client on
- such systems, and is used more creatively by the gv client application.
- <p>
- The available devices are:
- <dl>
- <dt><b>x11</b>
- <dd>This is the default device, handling display on X11R6.
- <dt><b>x11alpha</b>
- <dd>This is the x11 device, but with antialiasing. It is equivalent to
- invoking the x11 device with the options <tt>-dGraphicsAlphaBits=4
- -dTextAlphaBits=4 -dMaxBitmap=50000000</tt>.
- <dt><b>x11cmyk</b>
- <dd>This device rasterizes the image in the CMKY color space, then flattens
- it to RGB for display. It's intended for testing only.
- <dt><b>x11mono</b>
- <dd>This is a strict black-and-white device for 1-bit monochrome displays.
- <dt><b>x11gray2</b>
- <dd>This is a device for 2 bpp (4-level) monochrome displays.
- <dt><b>x11gray4</b>
- <dd>This is a device for 4 bpp (16-level) monochrome displays.
- </dl>
- <hr>
- <h2><a name="HP_ijs"></a>HP Deskjet official drivers</h2>
- <p>
- HP provides official drivers for many of their Deskjet printer models.
- In order to use these drivers, you will need the HP Inkjet Server as
- well as Ghostscript, available from <a
- href="http://hpinkjet.sourceforge.net">http://hpinkjet.sourceforge.net</a>.
- This version of Ghostscript includes the patch from version 0.97 of
- the hpijs software. If you are installing hpijs from an RPM, you will
- only need the hpijs RPM, not the ghostscript-hpijs one, as the code
- needed to work with hpijs is already included.
- <p>
- Note that newer version of the hpijs drivers support the IJS protocol.
- If you can, you should consider using the ijs driver instead. Among
- other things, the hpijs Ghostscript driver is Unix-only, and is untested
- on older Unix platforms.
- <p>
- As of the 0.97 version, hpijs supports the following printer models:
- <dl><dt><b>e-Series:</b>
- <dd>e-20
- <dt><b>DeskJet 350C Series:</b>
- <dd>350C
- <dt><b>DeskJet 600C Series:</b>
- <dd>600C, 660C, 670/672C, 670TV, 680/682C
- <dt><b>DeskJet 600C Series Photo:</b>
- <dd>610/612C, 640/648C, 690/692/693/694/695/697C
- <dt><b>DeskJet 630C Series:</b>
- <dd>630/632C
- <dt><b>DeskJet 800C Series:</b>
- <dd>810/812C, 830/832C, 840/842/843C, 880/882C, 895C
- <dt><b>DeskJet 900C Series, PhotoSmart::</b>
- <dd>930/932C, 950/952C, 970C, PhotoSmart 1000/1100
- <dt><b>DeskJet 990C, PhotoSmart:</b>
- <dd>960C, 980C, 990C, PhotoSmart 1215/1218
- </ul>
- <p>You will need to add the following line to your makefile:
- <blockquote>
- DEVICE_DEVS2=$(DD)DJ630.dev $(DD)DJ6xx.dev $(DD)DJ6xxP.dev $(DD)DJ8xx.dev $(DD)DJ9xx.dev $(DD)DJ9xxVIP.dev $(DD)AP21xx.dev
- </blockquote>
- <p>
- Please see <a
- href="http://hpinkjet.sourceforge.net">http://hpinkjet.sourceforge.net</a>
- for more information about this driver. Thanks to the folks at HP,
- especially David Suffield for making this driver available and working to
- integrate it with Ghostscript.
- <hr>
- <h2><a name="HP8_color_inkjet"></a>H-P 8xx, 1100, and 1600 color inkjet printers</h2>
- <p>
- This section, written by Uli Wortmann <<a
- href="mailto:uliw@erdw.ethz.ch">uliw@erdw.ethz.ch</a>>, deals with the
- DeskJet 670, 690, 850, 855, 870, 890, 1100, and 1600.
- <h3><a name="HP8_gdevcd8"></a>Drivers contained in <b><tt>gdevcd8.c</tt></b></h3>
- <p>
- The source module <b><tt>gdevcd8.c</tt></b> contains four generic drivers:
- <blockquote><table cellpadding=0 cellspacing=0>
- <tr valign=top> <td><b><tt>cdj670</tt></b>
- <td>
- <td>HP DeskJet 670 and 690
- <tr valign=top> <td><b><tt>cdj850</tt></b>
- <td>
- <td>HP DeskJet 850, 855, 870, and 1100
- <tr valign=top> <td><b><tt>cdj890</tt></b>
- <td>
- <td>HP DeskJet 890
- <tr valign=top> <td><b><tt>cdj1600</tt></b>
- <td>
- <td>HP DeskJet 1600
- </table></blockquote>
- <h3><a name="HP8_further_documentation"></a>Further documentation</h3>
- <p>
- <b>Credits:</b> Much of the driver is based on ideas derived from the
- cdj550 driver of George Cameron. The support for the hp670, hp690, hp890
- and hp1600 was added by Martin Gerbershagen.
- <blockquote><table cellpadding=0 cellspacing=0>
- <tr valign=top> <td>11.11.96
- <td>
- <td>Version 1.0
- <td>
- <td>
- <tr valign=top> <td>25.08.97
- <td>
- <td>Version 1.2
- <td>
- <td>Resolved all but one of the known bugs, introduced a couple of
- perfomance improvements. Complete new color-transfer-function
- handling (see gamma).
- <tr valign=top> <td>01.06.98
- <td>
- <td>Version 1.3
- <td>
- <td>Due to the most welcome contribution of Martin Gerbershagen
- (ger@ulm.temic.de), support for the hp670, hp690 and hp890 and
- hp1600 has been added. Martin has also resolved all known bugs.
- <tr valign=top> <td>
- <td>
- <td>
- <td>
- <td>Problems:Dark colors are still pale.
- </table></blockquote>
- <p>
- The hp690 is supported through the hp670 device, the hp855, hp870 and the
- hp1100 through the hp850 device. The driver needs no longer special
- switches to be invoked except <b><tt>-sDEVICE=cdj850</tt></b>,
- <b><tt>-sDEVICE=CDJ890</tt></b>, <b><tt>-sDEVICE=CDJ670</tt></b>, or
- <b><tt>-sDevice=CDJ1600</tt></b>. The following switches are supported.
- <blockquote><table cellpadding=0 cellspacing=0>
- <tr valign=top> <td><b><tt>-dPapertype=</tt></b>
- <td>
- <td>0
- <td>
- <td>plain paper [default]
- <tr valign=top> <td>
- <td>
- <td>1
- <td>
- <td>bond paper
- <tr valign=top> <td>
- <td>
- <td>2
- <td>
- <td>special paper
- <tr valign=top> <td>
- <td>
- <td>3
- <td>
- <td>glossy film
- <tr valign=top> <td>
- <td>
- <td>4
- <td>
- <td>transparency film
- <tr valign=top> <td>
- <td>
- <td>
- <td>
- <td>Currently the lookup tables are unsuited for printing on
- special paper or transparencies. For these please revert to the
- gamma functions.
- <tr valign=top> <td><b><tt>-dQuality=</tt></b>
- <td>
- <td>-1
- <td>
- <td>draft
- <tr valign=top> <td>
- <td>
- <td>0
- <td>
- <td>normal [default]
- <tr valign=top> <td>
- <td>
- <td>1
- <td>
- <td>presentation
- <tr valign=top> <td><b><tt>-dRetStatus=</tt></b>
- <td>
- <td>0
- <td>
- <td>C-RET off
- <tr valign=top> <td>
- <td>
- <td>1
- <td>
- <td>C-RET on [default]
- <tr valign=top> <td><b><tt>-dMasterGamma=</tt></b>
- <td>
- <td>3.0
- <td>
- <td>[default = 1.0]
- </table></blockquote>
- <blockquote>
- <b>Note:</b> To take advantage of the calibrated color-transfer functions,
- be sure not to have any gamma statements left! If you need to (i.e., for
- overhead transparencies), you still can use the gamma functions, but they
- will override the built-in calibration. To use gamma in the traditional
- way, set MasterGamma to any value greater than 1.0 and less than 10.0. To
- adjust individual gamma values, you have to additionally set MasterGamma to
- a value greater than 1.0 and less than 10.0. With the next release, gamma
- functions will be dropped.
- </blockquote>
- <p>
- When using the driver, be aware that printing at 600dpi involves
- processing large amounts of data (> 188MB !). Therefore the
- driver is not what you would expect to be a fast driver ;-)
- This is no problem when printing a full-sized color page (because
- printing itself is slow), but it's really annoying if you print only
- text pages. Maybe I can optimize the code for text-only pages in a
- later release. Right now, it is recommended to use the highest
- possible optimisation level your compiler offers.
- For the time being, use the cdj550 device with <b><tt>-sBitsPerPixel=3</tt></b>
- for fast proof prints. If you simply want to print 600dpi BW data,
- use the cdj550 device with <b><tt>-sBitsPerPixel=8</tt></b> (or 1).
- <p>
- Since the printer itself is slow, it may help to set the process priority
- of the gs process to "regular" or even less. On a 486/100MHz this is still
- sufficient to maintain a continuous data flow. Note to OS/2 users: simply
- put the gs window into the background or minimize it. Also make sure that
- <b><tt>print01.sys</tt></b> is invoked without the <b><tt>/irq</tt></b>
- switch (great speed improvement under Warp4).
- <p>
- The printer default settings compensate for dot-gain by a calibrated
- color-transfer function. If this appears to be too light for your business
- graphs, or for overhead transparencies, feel free to set
- <b><tt>-dMasterGamma=1.7</tt></b>. Furthermore, you may tweak the gamma
- values independently by setting <b><tt>-dGammaValC</tt></b>,
- <b><tt>-dGammaValM</tt></b>, <b><tt>-dGammaValY</tt></b> or
- <b><tt>-dGammaValK</tt></b> (if not set, the values default to
- <b><tt>MasterGamma</tt></b>). This will only work when
- <b><tt>-dMasterGamma</tt></b> is set to a value greater than 1.0.
- <p>
- Further information, bugs, tips etc, can be found at my website. To learn
- more about gamma, see
- <a href="ftp://ftp.igd.fhg.de/pub/doc/colour/GammaFAQ.pdf">ftp://ftp.igd.fhg.de/pub/doc/colour/GammaFAQ.pdf</a>.
- <p>
- Depending on how you transfer the files, under UNIX you may need to remove
- the CRs of the CR-LF sequence used for end-of-line on DOS-based (MS
- Windows-based) systems. You can do this in unpacking the files with <b><tt>unzip -a hp850.zip</tt></b>.
- <p>
- To compile with gs5.x or later, simply add to your makefile
- <blockquote>
- DEVICE_DEVS4=cdj850.dev cdj670.dev cdj890.dev cdj1600.dev
- </blockquote>
- <p>
- Have fun!
- <p>
- Uli <<a href="mailto:uliw@erdw.ethz.ch">uliw@erdw.ethz.ch</a>>
- <br><a href="http://www.erdw.ethz.ch/~bonk/">http://www.erdw.ethz.ch/~bonk/</a>
- <hr>
- <h2><a name="HP880_color_inkjet"></a>H-P 812, 815, 832, 880, 882, 895, and 970 color inkjet printers</h2>
- <p>
- This section, written by Matthew Gelhaus <<a
- href="mailto:hp880@gelhaus.net">hp880@gelhaus.net</a>>, deals with the
- DeskJet 812, 815, 832, 880, 882, 895, and 970.
- <p>
- This is a modified version of the <a href="#HP8_color_inkjet">HP8xx driver</a>
- written by Uli Wortmann. More information and download are available at
- <a href="http://www.gelhaus.net/hp880c/">http://www.gelhaus.net/hp880c/</a>.
- <h3><a name="HP880_gdevcd8"></a>Drivers contained in <b><tt>gdevcd8.c</tt></b></h3>
- <p>
- The source module <b><tt>gdevcd8.c</tt></b> contains one generic driver:
- <blockquote><table cellpadding=0 cellspacing=0>
- <tr valign=top> <td><b><tt>cdj880</tt></b>
- <td>
- <td>HP DeskJet 812, 815, 832, 880, 882, 895, and 970
- </table></blockquote>
- <h3><a name="HP880_further_documentation"></a>Further documentation</h3>
- <p>
- <b>Credits:</b> This driver is based on the cdj850 driver by Uli Wortmann, and shares the same
- internal structure, although the PCL3+ interpretation has changed.
- <blockquote><table cellpadding=0 cellspacing=0>
- <tr valign=top> <td>15.03.99
- <td>
- <td>Version 1.3
- <td>
- <td>Initial version, based on Version 1.3 of Uli Wortmann's driver.
- <tr valign=top> <td>26.02.00
- <td>
- <td>Version 1.4beta
- <td>
- <td>Greatly improved color handling & dithering, but not yet complete enough
- to use for text.
- </table></blockquote>
- <p>
- All printers are supported through the cdj880 device. Invoke with
- <b><tt>-sDEVICE=cdj880</tt></b>. The following switches are supported.
- <blockquote><table cellpadding=0 cellspacing=0>
- <tr valign=top> <td><b><tt>-dPapertype=</tt></b>
- <td>
- <td>0
- <td>
- <td>plain paper [default]
- <tr valign=top> <td>
- <td>
- <td>1
- <td>
- <td>bond paper
- <tr valign=top> <td>
- <td>
- <td>2
- <td>
- <td>special paper
- <tr valign=top> <td>
- <td>
- <td>3
- <td>
- <td>glossy film
- <tr valign=top> <td>
- <td>
- <td>4
- <td>
- <td>transparency film
- <tr valign=top> <td>
- <td>
- <td>
- <td>
- <td>Currently the lookup tables are unsuited for printing on
- special paper or transparencies. For these please revert to the
- gamma functions.
- <tr valign=top> <td><b><tt>-dQuality=</tt></b>
- <td>
- <td>-1
- <td>
- <td>draft
- <tr valign=top> <td>
- <td>
- <td>0
- <td>
- <td>normal [default]
- <tr valign=top> <td>
- <td>
- <td>1
- <td>
- <td>presentation
- <tr valign=top> <td><b><tt>-dMasterGamma=</tt></b>
- <td>
- <td>3.0
- <td>
- <td>[default = 1.0]
- </table></blockquote>
- <p>
- The printer default settings compensate for dot-gain by a pre-defined
- color-transfer function. If this appears to be too light for your business
- graphs, or for overhead transparencies, feel free to set
- <b><tt>-dMasterGamma=1.7</tt></b>. Furthermore, you may tweak the gamma
- values independently by setting <b><tt>-dGammaValC</tt></b>,
- <b><tt>-dGammaValM</tt></b>, <b><tt>-dGammaValY</tt></b> or
- <b><tt>-dGammaValK</tt></b> (if not set, the values default to
- <b><tt>MasterGamma</tt></b>). This will only work when
- <b><tt>-dMasterGamma</tt></b> is set to a value greater than 1.0.
- <p>
- Further information, bugs, tips etc, can be found at my website.
- <p>
- To compile with gs6.x or later, simply add to your makefile
- <blockquote>
- DEVICE_DEVS4=$(DD)cdj880.dev
- </blockquote>
- <p>
- Matthew Gelhaus <<a href="mailto:hp880@gelhaus.net">mailto:hp880@gelhaus.net</a>>
- <br><a href="http://www.gelhaus.net/hp880c/">http://www.gelhaus.net/hp880c/</a>
- <hr>
- <h2><a name="HP_color_inkjet"></a>H-P color inkjet printers</h2>
- <p>
- This section, written by George Cameron, deals with the DeskJet 500C,
- DeskJet 550C, PaintJet, PaintJet XL, PaintJet XL300, the DEC LJ250
- operating in PaintJet-compatible mode.
- <h3><a name="HP_gdevcdj"></a>Drivers contained in <b><tt>gdevcdj.c</tt></b></h3>
- <p>
- The source module <b><tt>gdevcdj.c</tt></b> contains six generic drivers:
- <blockquote><table cellpadding=0 cellspacing=0>
- <tr valign=top> <td><b><tt>cdj500</tt></b>
- <td>
- <td>HP DeskJet 500C and 540C
- <tr valign=top> <td><b><tt>cdj550</tt></b>
- <td>
- <td>HP DeskJet 550C, 560C, 660C, 660Cse
- <tr valign=top> <td><b><tt>pjxl300</tt></b>
- <td>
- <td>HP PaintJet XL300, DeskJet 1200C, and CopyJet
- <tr valign=top> <td><b><tt>pjtest</tt></b>
- <td>
- <td>HP PaintJet
- <tr valign=top> <td><b><tt>pjxltest</tt></b>
- <td>
- <td>HP PaintJet XL
- <tr valign=top> <td><b><tt>declj250</tt></b>
- <td>
- <td>DEC LJ250
- </table></blockquote>
- <p>
- All these drivers have 8-bit (monochrome), 16-bit and 24-bit (colour) and
- for the DJ 550C, 32-bit (colour, CMYK mode) options in addition to standard
- colour and mono drivers. It is also possible to set various
- printer-specific parameters from the command line, for example
- <blockquote><b><tt>
- gs -sDEVICE=cDeskJet -dBitsPerPixel=16 -dDepletion=1 -dShingling=2 tiger.ps
- </tt></b></blockquote>
- <p>
- <b>Note:</b> the old names <b><tt>cDeskJet</tt></b>,
- <b><tt>cdjcolor</tt></b> and <b><tt>cdjmono</tt></b> drivers have been
- retained; however, their functionality duplicates that available using the
- drivers above (and <b><tt>cDeskJet</tt></b> is identical to
- <b><tt>cdj500</tt></b>). That is, we can use
- <blockquote><table cellpadding=0 cellspacing=0>
- <tr valign=top> <td><b><tt>gs -sDEVICE=cdj500 -dBitsPerPixel=24</tt></b>
- <td>
- <td>for <b><tt>cdjcolor</tt></b>, and
- <tr valign=top> <td><b><tt>gs -sDEVICE=cdj500 -dBitsPerPixel=1</tt></b>
- <td>
- <td>for <b><tt>cdjmono</tt></b>
- </table></blockquote>
- <h3><a name="HP_paper_size"></a>Default paper size</h3>
- <p>
- If the preprocessor symbol <b><tt>A4</tt></b> is defined, the default paper
- size is ISO A4; otherwise it is U.S. letter size (see about
- <a href="Use.htm#Known_paper_sizes">paper sizes</a> in the usage
- documentation). You can <a href="Use.htm#Paper_size">specify other paper
- sizes</a> on the command line, including A3 for the PaintJet XL and
- PaintJet XL300, as also explained in the usage documentation.
- <h3><a name="HP_limits"></a>DeskJet physical limits</h3>
- <p>
- The DeskJet's maximum printing width is 2400 dots, or 8 inches
- (20.32cm). The printer manuals say that the maximum recommended printing
- height on the page is 10.3 inches (26.16cm), but since this is obviously
- not true for A4 paper, and I have been unable to detect any problems in
- printing longer page lengths, this would seem to be a rather artificial
- restriction.
- <p>
- All DeskJets have 0.5 inches (1.27cm) of unprintable bottom margin, due to the mechanical
- arrangement used to grab the paper. Side margins are approximately 0.25 inches (0.64cm)
- for U.S. letter paper, and 0.15 inches (0.38cm) for A4.
- <h4><a name="HP_command_line"></a>Printer properties (command-line parameters)</h4>
- <p>
- Several printer "properties" have been implemented for these printers.
- Those available so far are all integer quantities, and thus may be
- specified, for instance, like
- <blockquote>
- <b><tt>gs -dBitsPerPixel=32 -dShingling=1</tt></b> ...
- </blockquote>
- <p>
- which sets the <b><tt>BitsPerPixel</tt></b> parameter to 32 and the
- <b><tt>Shingling</tt></b> parameter to 1.
- <h4><a name="HP_bpp"></a>Bits per pixel</h4>
- <p>
- If the preprocessor symbol <b><tt>BITSPERPIXEL</tt></b> is defined as an
- integer (see below for the range of allowable values), that number defines
- the default bits per pixel (bit depth) for the generic drivers. If the
- symbol is undefined, the default is 24 bits per pixel. It is, of course,
- still possible to specify the value from the command line as described
- below. Note also that the <b><tt>cDeskJet</tt></b>,
- <b><tt>cdjcolor</tt></b> and <b><tt>cdjmono</tt></b> drivers are unaffected
- by setting this symbol, as their default settings are predefined to be 1, 3
- and 24 respectively.
- <p>
- All of the drivers in <b><tt>gdevcdj.c</tt></b> accept a command line
- option to set the <b><tt>BitsPerPixel</tt></b> property. This gives
- considerable flexibility in choosing various tradeoffs among speed,
- quality, colour, etc. The valid numbers are:
- <blockquote><dl compact>
- <dt><b>1</b>
- <dd>A standard Ghostscript monochrome driver, using black ink (by
- installing the separate mono cartridge in the case of the DeskJet 500C, or
- automatically for the other printers).
- <dt><b>3</b>
- <dd>A standard Ghostscript colour driver, using internal dithering. This
- is fast to compute and to print, but the clustered dithering can lose some
- detail and colour fidelity.
- <dt><b>8</b>
- <dd>An "error-diffusion" monochrome driver which uses Floyd-Steinberg
- dithering to print greyscale images. The patterns are much more randomised
- than with the normal clustered dithering, but the data files can be much
- larger and somewhat slower to print.
- <dt><b>16</b>
- <dd>A "cheaper" version of the 24-bit driver, which generates
- Floyd-Steinberg colour dithered output using the minimum memory (this may
- be helpful when using Ghostscript has not been compiled using a 16-bit
- build environment). The quality can be almost as good as the 24-bit
- version.
- <dt><b>24</b>
- <dd>A high-quality colour driver using Floyd-Steinberg dithering for
- maximum detail and colour range. However, it is very memory-intensive, and
- thus can be slow to compute. It tends to produce rather larger raw data
- files, so they can also take longer to print.
- <dt><b>32</b>
- <dd>Only for the DeskJet 550C, which uses the black cartridge and the
- colour cartridge simultaneously (that is, CMYK printing). This printer can
- both be faster and give higher quality than the DeskJet 500C, because of
- the true black ink. (Note that the 24-bit mode also permits CMYK printing
- on this printer, and uses less memory. Any differences between 24-bit and
- 32-bit should be small.)
- </dl></blockquote>
- <h4><a name="HP_DeskJet_properties"></a>DeskJet properties</h4>
- <blockquote><table cellpadding=0 cellspacing=0>
- <tr valign=bottom>
- <th align=left>Name
- <td>
- <th align=left>Type
- <td>
- <th align=left>
- <tr> <td colspan=5><hr>
- <tr valign=top> <td><b><tt>BlackCorrect</tt></b>
- <td>
- <td><b><tt>int</tt></b>
- <td>
- <td>Colour correction to give better blacks when using the DJ500C in colour mode. For example, the default of 4 reduces the cyan component to 4/5. Range accepted: 0 - 9 (0 = none).
- <tr valign=top> <td><b><tt>Shingling</tt></b>
- <td>
- <td><b><tt>int</tt></b>
- <td>
- <td>Interlaced, multi-pass printing: 0 = none, 1 = 50%, 2 = 25%, 2 is best and slowest.
- <tr valign=top> <td><b><tt>Depletion</tt></b>
- <td>
- <td><b><tt>int</tt></b>
- <td>
- <td>"Intelligent" dot-removal: 0 = none, 1 = 25%, 2 = 50%, 1 best for graphics? Use 0 for transparencies.
- </table></blockquote>
- <h4><a name="HP_PaintJet_properties"></a>PaintJet XL300 / PaintJet XL properties</h4>
- <blockquote>
- <table cellpadding=0 cellspacing=0>
- <tr valign=bottom>
- <th align=left>Name
- <td>
- <th align=left>Type
- <td>
- <th align=left>
- <tr> <td colspan=5><hr>
- <tr valign=top> <td><b><tt>PrintQuality</tt></b>
- <td>
- <td><b><tt>int</tt></b>
- <td>
- <td>Mechanical print quality: -1 = fast, 0 = normal, 1 = presentation. Fast mode reduces ink usage and uses single-pass operation for some media types. Presentation uses more ink and the maximum number of passes, giving slowest printing for highest quality
- <tr valign=top> <td><b><tt>RenderType</tt></b>
- <td>
- <td><b><tt>int</tt></b>
- <td>
- <td><dl compact>
- <dt><b>0</b><dd>driver does dithering
- <dt><b>1</b><dd>snap to primaries
- <dt><b>2</b><dd>snap black to white, others to black
- <dt><b>3</b><dd>ordered dither
- <dt><b>4</b><dd>error diffusion
- <dt><b>5</b><dd>monochrome ordered dither
- <dt><b>6</b><dd>monochrome error diffusion
- <dt><b>7</b><dd>cluster ordered dither
- <dt><b>8</b><dd>monochrome cluster ordered dither
- <dt><b>9</b><dd>user-defined dither (not supported)
- <dt><b>10</b><dd>monochrome user-defined dither ns.
- </dl>
- </table>
- <p>
- The PaintJet (non-XL) has no additional properties.
- </blockquote>
- <h3><a name="HP_gamma"></a>Gamma correction</h3>
- <p>
- One consequence of using Floyd-Steinberg dithering rather than Ghostscript's
- default clustered ordered dither is that it is much more obvious that the
- ink dots are rather larger on the page than their nominal 1/180-inch or 1/300-inch
- size (clustering the dots tends to minimise this effect). Thus it is often
- the case that the printed result is rather too dark. A simple empirical
- correction for this may be achieved by preceding the actual PostScript
- file to be printed by a short file which effectively sets the gamma for
- the device, such as
- <blockquote><b><tt>
- gs ... gamma.ps colorpic.ps -c quit
- </tt></b></blockquote>
- <p>
- where <b><tt>gamma.ps</tt></b> is
- <blockquote>
- <pre>%!
- /.fixtransfer {
- currentcolortransfer 4 {
- mark exch
- dup type dup /arraytype eq exch /packedarraytype eq or
- 1 index xcheck and { /exec load } if
- 0.333 /exp load
- ] cvx 4 1 roll
- } repeat setcolortransfer
- } bind odef
- .fixtransfer
- /setpagedevice { setpagedevice .fixtransfer } bind odef</pre>
- </blockquote>
- <p>
- This does the gamma correction <b><em>after</em></b> whatever correction
- the device might be doing already. To do the correction
- <b><em>before</em></b> the current correction,
- <blockquote>
- <pre>%!
- /.fixtransfer {
- currentcolortransfer 4 {
- mark 0.333 /exp load 4 -1 roll
- dup type dup /arraytype eq exch /packedarraytype eq or
- 1 index xcheck and { /exec load } if
- ] cvx 4 1 roll
- } repeat setcolortransfer
- } bind odef
- .fixtransfer
- /setpagedevice { setpagedevice .fixtransfer } bind odef</pre>
- </blockquote>
- <p>
- This example sets the gamma for R, G, and B to 3, which seems to work
- reasonably well in practice.
- <h3><a name="HP_resolution_enhance"></a>HP's resolution-enhanced mode for Inkjet printers</h3>
- <p>
- This feature is available on HP's more recent inkjet printers, including
- the DeskJet 520 (mono), 540 (mono or colour) and 560C (mono and colour).
- The colour and monochrome drivers for the HP DeskJet 550c are (probably)
- the best you will get for use with Ghostscript, for the following reasons.
- <p>
- These printers do not offer true 600×300dpi resolution. Those that
- print in colour are strictly 300×300dpi in colour mode, while in mono
- mode there is a pseudo 600×300dpi mode with the restriction that you
- can't print two adjacent dots. In effect what you have is 600dpi dot
- positioning, but on average you don't get more dots per line. This
- provides the possibility, for instance, to have sharper character outlines,
- because you can place dots on the edges nearer to their ideal positions.
- This is why it is worth doing.
- <p>
- However, HP will not support user-level programming of this
- resolution-enhanced mode, one reason being that (I understand) all the dot
- spacing has to be done by the driver, and if you get it wrong, you can
- actually damage the print head.
- <p>
- To summarise, you may lose a smidgin of (potential) text clarity using the
- 550c drivers (<b><tt>cdj550</tt></b>, <b><tt>cdjcolor</tt></b>,
- <b><tt>cdjmono</tt></b> etc.), but other than that, they are the ones for
- the job.
- <h3><a name="HP_tips"></a>General tips</h3>
- <p>
- For all the printers above, the choice of paper is critically important to
- the final results. The printer manuals suggest type of paper, but in
- general, smoother, less fibrous types give better results. In particular,
- the special ink-jet paper can make a big difference: colours are brighter,
- but most importantly, there is almost no colour bleed, even with adjacent
- areas of very heavy inking. Similarly the special coated transparencies
- also work well (and ordinary transparencies do not work at all!).
- <p>
- The Unix procedure <a href="Unix-lpr.htm"><b><tt>unix-lpr.sh</tt></b></a>
- provides one example of setting up a multi-option colour PostScript
- <b><tt>lpr</tt></b> queue on Unix systems, and includes the ability to
- choose a range of different colour options and printer accounting and error
- logging.
- <p>
- <b>Caveat emptor!</b> It is not always easy for me to test all of these
- drivers, as the only colour printer I have here is the DeskJet 500C. I rely
- on others to test drivers for the additional machines and report their
- findings back to me.
- <hr>
- <h2><a name="BJC_8200"></a>Canon BJC-8200 printer</h2>
- <p>
- This section was contributed by the author of the <b><tt>uniprint</tt></b>
- configuration files for the Canon BJC-8200, Stephan C. Buchert <<a
- href="mailto:scb@stelab.nagoya-u.ac.jp">scb@stelab.nagoya-u.ac.jp</a>>.
- These files also handle the Japanese Canon F850 printer.
- <p>
- Warning: Usage of this program is neither supported nor endorsed by
- the Canon corporation. Please see the Ghostscript <a
- href="Public.htm">license</a> regarding warranty.
- <h3>Introduction</h3>
- <p>
- The Canon Bubble Jet printer BJC-8200 is designed for printing digital
- photos and halftone images. Software drivers for Windows 95-2000 and Mac are
- usually included and can be downloaded from the Canon web sites like
- <a href="http://consumer.usa.canon.com/bjc/bjc8200/">http://consumer.usa.canon.com/bjc/bjc8200/</a>
- for the US market. If these drivers cannot be used for some reason, then at
- present Ghostscript is probably the alternative giving the best results.
- <p>
- The BJC-8200 has features not found among the specs of earlier bubble jet
- models (except the even more advanced BJC-8500) and is advertised to offer:
- <ol>
- <li>microfine droplet technology;
- <li>support for printing on a new type of paper, Photo Paper Pro;
- <li>a printhead capable of printing up to 1200 DpI;
- <li>individual ink tanks for 6 colors;
- <li>an internal status monitor reporting low ink back to a driver;
- <li>an optional color scanner cartridge for up to 600 DpI resolution.
- </ol>
- <p>
- Access to features 5 and 6 requires use of the original Canon drivers for
- the foreseeable future. This README is about getting the printer features
- 1-3 working with Ghostscript. No (re)compilation of Ghostscript is normally
- required.
- <p>
- Ghostscript comes with a relatively highly configurable driver, called
- <a href="#Uniprint">uniprint</a>, for printers which understand raster
- images in various propriety formats. Most options for this driver are
- usually organized into files having the suffix ".upp." Ghostscript
- versions >= 5.10 (or even earlier) include such uniprint control files
- for the Canon BJC-610. They work also well for some other Canon Bubble
- Jet models, for example for my BJC-35vII. But when using them for a
- BJC-8200 the result is unsatisfactory.
- <h3>The uniprint control files for the BJC-8200</h3>
- <p>
- After some experimenting with the options for uniprint I have obtained quite
- satisfactory prints with my printer(*). This distribution includes six new
- uniprint control files:
- <ul>
- <li>bj8pp12f.upp
- <li>bj8hg12f.upp
- <li>bj8gc12f.upp
- <li>bj8oh06n.upp
- <li>bj8ts06n.upp
- <li>bj8pa06n.upp
- </ul>
- <p>
- They are included in Ghostscript >=6.21. For older versions you can put
- them anywhere in the Ghostscript search path (type "gs -h" to see the
- path), but should perhaps add the files to the directory with the
- other *.upp files. This is "/usr/share/ghostscript/gs6.01/lib" in my
- RedHat 6.1 Linux box with Aladdin Ghostscript 6.01.
- <p>
- Here is an explanation of my file name convention: the prefix "bj8" should
- perhaps be used for the Canon BJC-8200 and compatible (like the Japanese
- F850 and perhaps the non-Japanese BJC-8500) models. The next two letters
- indicate the print media:
- <ul>
- <li>pp "Photo Paper Pro"
- <li>hg "High Gloss Photo Film"
- <li>gc "Glossy Photo Cards"
- <li>oh "OHP transparencies"
- <li>ts "T-shirt transfer"
- <li>pa "Plain Paper"
- </ul>
- <p>
- The numbers at positions 6 and 7 indicate the resolution
- <ul>
- <li>12 1200x1200 DpIxDpI
- <li>06 600x600 DpIxDpI
- </ul>
- <p>
- The last letter stands for a quality factor that effects also the print
- speed (presumably related to the number of passes that the printhead makes).
- <ul>
- <li>f highest quality
- <li>n normal quality
- </ul>
- <p>
- Printing a postcard size (~10x15 cm^2) image at 1200x1200 DpI^2 takes about
- 3 minutes. The output of Ghostscript is then typically 4-5 MByte. The
- bootleneck seems to be the transfer of the raster image in run-length
- encoded Canon format to the printer (via the parallel port on my system) or
- the printer's speed, not Ghostscript or the uniprint renderer.
- <h3>Further Optimization for the Canon BJC-8200</h3>
- So far I have only experimented with the printer initialization code at the
- beginning of each page (-dupBeginPageCommand) and the resolution (-r). Other
- options, particularly the transfer arrays (-dupBlackTransfer,
- -dupCyanTransfer, -dupMagentaTransfer, -dupYellowTransfer) and the margins
- (-dupMargins) were simply copied from the files for the BJC-610, but they
- may need to be changed for optimized performance.
- <p>
- Here is information useful for changing or adding uniprint control files for
- the BJC-8200:
- <p>
- In "-dupBeginPageCommand=..." use the line
- <blockquote>
- 1b28 64 0400 04b0 04b0
- </blockquote>
- <p>
- for 1200x1200 resolution, and
- <blockquote>
- 1b28 64 0400 0258 0258
- </blockquote>
- <p>
- for 600x600. The "-r" option in the control file must of course match this
- line. Other resolutions might work as well, but I didn't try.
- <p>
- Crucial are the numbers in the lines like
- <blockquote><pre>
- 1b28 63 0300 3005 04
- ^ ^
- Plain Paper 0 4 Highest quality
- OHP transparency 2 .
- T-shirt transfer 3 .
- Glossy Photo Film 5 .
- High Gloss Paper 6 0 Lowest quality
- Photo Paper Pro 9
- </pre></blockquote>
- <h3>Outlook</h3>
- <p>
- Presently uniprint can use the black (K), cyan (C), magenta (M), and
- yellow (Y) colors in the BJC-8200. The unused colors are photo (or
- light) cyan (c) and magenta (m). Also the Canon driver seems to use
- only CMYK, for example when printing on Photo Paper Pro in "Camera" or
- "SuperPhoto" mode. These modes supposedly produce prints of the best
- quality that the Canon driver can offer. Other modes of Canon driver
- do use up to all six color cartridges (CMYKcm). Therefore expanding
- uniprint's capabilities for six colors would be interesting, but it may
- not increase the output quality of 6-color printers such as the
- BJC-8200 drastically.
- <p>
- More control files for uniprint could be added in order to offer more
- versatility for controlling the BJC-8200 within a Ghostscript
- installation. The number of possible combinations for media type, resolution
- and print quality factor is very large, many combinations would not make
- much sense, many might be used here and there, but relatively rarely. The
- user would have to remember a name for each combination that is used.
- <p>
- A better way would be to let the user patch optionally a user owned or
- system wide uniprint control file before each print via some print
- tool. This is similar to the approach taken by Canon with their driver for
- Windows. Similarly a uniprint tool could also incorporate other functions
- such as printing test and demo pages and the low ink warning once the
- protocol for this is known. Clearly it would be difficult to code such a
- uniprint tool for all the platforms where Ghostscript is running.
- <h3>Usage on RedHat Linux</h3>
- <p>
- In order to install a BJC-8200 printer on a RedHat Linux system with
- RedHat's printtool, you need also to insert with a text editor the contents
- of the file <b><tt>bj8.rpd</tt></b> into the RedHat printer database
- <b><tt>/usr/lib/rhs/rhs-printfilters/printerdb</tt></b>. Insert it most
- appropriately after the section
- <blockquote><pre>
- StartEntry: U_CanonBJC610
- .
- .
- .
- EndEntry
- < --- insert here "bj8.rpd" from this distribution:
- < --- StartEntry: U_CanonBJC8200
- .
- .
- .
- </pre></blockquote>
- <h3>Contacting the Author</h3>
- <p>
- E-mail address: <<a
- href="mailto:scb@stelab.nagoya-u.ac.jp">scb@stelab.nagoya-u.ac.jp</a>>
- <p>
- Footnotes:
- <p>
- (*) Actually I have a F850, not a BJC-8200. That model is sold for the
- Japanese market only. The specs and also the external look are the
- same as those of the BJC-8200 models for the American and European
- markets. I expect that the raster image mode which is used exclusively
- by Ghostscript is entirely compatible for both models.
- <p>
- Stephan C. Buchert
- <hr>
- <h2><a name="BJC"></a>Other Canon BubbleJet (BJC) printers</h2>
- <p>
- This section was contributed by the author of the drivers, Yves Arrouye
- (<<a href="mailto:yves.arrouye@usa.net">yves.arrouye@usa.net</a>>, but
- please do not send questions to him: he no longer maintains these drivers.)
- The drivers handle Canon BJC-600, BJC-4xxx, BJC-70, Stylewriter 2x00, and
- BJC-800 printers.
- <h3><a name="BJC_history"></a>History</h3>
- <p>
- The BJC-600 driver was written in the first place by Yoshio Kuniyoshi and
- later modified by Yves Arrouye. We tried to make it evolve synchronously,
- though Yoshio cannot be reached since a long time ago. The drivers are
- based on code for the HP printers by George Cameron (in fact, they are in
- the same file!), so he's the first person to thank.
- <p>
- The 2.00 version of the drivers was a complete rewrite of the driver
- (arguments, optimization, colour handling, in short: everything!) by Yves
- Arrouye. That release was also the first one to be able to use the full
- width of an A3 paper size. PostScript Printer Description (PPD) files for
- the drivers were released with version 2.15. They are incomplete,
- but they can be used to drive the printers' main features.
- <h3><a name="BJC_build"></a>Configuring and building the BJC drivers</h3>
- <h4><a name="BJC_defaults"></a>Modify values in
- <b><tt>gdevbjc.h</tt></b></h4>
- <p>
- Configure the drivers by modifying the default values in the file
- <b><tt>gdevbjc.h</tt></b> or on the compilation line. If you don't do
- that, the drivers use reasonable defaults that make them work "as
- expected". All default values shown here are defined in that file.
- <h4><a name="BJC_CMYK_RGB"></a>CMYK-to-RGB color conversion</h4>
- <p>
- By default, the drivers use the same algorithm as Ghostscript to convert
- CMYK colors to RGB. If you prefer to use Adobe formulas, define
- <b><tt>USE_ADOBE_CMYK_RGB</tt></b> when compiling. (See the top of the
- file <b><tt>gdevcdj.c</tt></b> to see the difference between the two.)
- <h4><a name="BJC_vertical_centering"></a>Vertical centering of the
- printable area</h4>
- <p>
- The drivers center the imageable area horizontally but not vertically, so
- that what can be printed does use the most of the output media. If you
- define <b><tt>BJC_DEFAULT_CENTEREDAREA</tt></b> when compiling, then the
- top and bottom margins will be the same, resulting in a (smaller)
- vertically centered imageable area also.
- <h4><a name="BJC_margins"></a>Page margins</h4>
- <p>
- If you define <b><tt>USE_RECOMMENDED_MARGINS</tt></b>, then the top and
- bottom margins will be the same (that is,
- <b><tt>BJC_DEFAULT_CENTEREDAREA</tt></b> will be defined for you) and the
- margins will be the 12.4mm recommended by Canon. Since margins are
- complicated (because one must rely on the mechanical precision of the
- printer), the drivers do something about the bottom margin: by default the
- bottom margin is 9.54mm for the BJC-600 driver and 7mm for the BJC-800. If
- you define <b><tt>USE_TIGHT_MARGINS</tt></b>, then the bottom margin is 7mm
- for both drivers (but I never managed to get my own BJC-600 to print a line
- on this low bound, hence the larger default). Regardless of the presence
- of this definition, <b><tt>USE_FIXED_MARGINS</tt></b> will not allow the
- BJC-800 to use the lower 7mm bottom margin, so if you have a problem with
- the bottom margin on a BJC-800, just define that (without defining
- <b><tt>USE_TIGHT_MARGINS</tt></b>, of course).
- <p>
- A quick way to be sure the margins you selected is to print a file whose
- contents are:
- <blockquote><b><tt>
- %!<br>
- clippath stroke showpage
- </tt></b></blockquote>
- <p>
- If the margins are okay, you will get a rectangle visibly surrounding
- the printable area. If they're not correct, one or more of the sides will
- be either incomplete or completely unprinted.
- <h4><a name="BJC_compile"></a>Makefile and compilation</h4>
- <p>
- Make sure the <b><tt>bjc600</tt></b> or <b><tt>bjc800</tt></b> devices are
- in <a href="Make.htm#Features_and_devices"><b><tt>DEVICE_DEVS</tt></b> in
- the makefile</a>; that is, look in the makefile for your platform and add
- them if necessary -- they may already be there. As of Ghostscript 5.10,
- for instance, one makefile has
- <blockquote><b><tt>
- DEVICE_DEVS6=bj10e.dev bj200.dev bjc600.dev bjc800.dev
- </tt></b></blockquote>
- <h3><a name="BJC_usage"></a>Use of the drivers</h3>
- <p>
- There are two drivers here. The "<b><tt>bjc600</tt></b>" one supports the BJC-600 and
- BJC-4xxx (maybe the BJC-70 as well) and the "<b><tt>bjc800</tt></b>" one supports the
- BJC-800 series. Remarks here that apply to both drivers use the name
- "bjc".
- <h4><a name="BJC_options"></a>Supported Options and Defaults</h4>
- <p>
- Note: "options", "properties", and "parameters" designate the same thing:
- device parameters that you can change.
- <p>
- Giving an option an incorrect value causes an error. Unless stated
- otherwise, this error will be a rangecheckerror. Options may be set from
- the Ghostscript command line (using the <b><tt>-d</tt></b> and
- <b><tt>-s</tt></b> switches or other predetermined switches if they have an
- effect on the driver) or using the PostScript Level 2
- <b><tt>setpagedevice</tt></b> operator if Ghostscript has been compiled
- with the <b><tt>level2</tt></b> or <b><tt>level3</tt></b> device (which it should
- <b><tt>;-)</tt></b>). There are <b>no</b> special-purpose operators such as
- one was able to find in Level 1 printers.
- <p>
- The bjc uses 24 bits per pixel by default (unless you change the value of
- <b><tt>BJC_BITSPERPIXEL</tt></b>), corresponding to CMYK printing.
- Supported modes are 1 bpp and 4 bpp (gray levels), 8 bpp, 16 bpp, 24 bpp
- and 32 bpp (colours). Colours are preferably stored in the CMYK model
- (which means, for example, that with 16 bpp there are only 16 different
- shades of each color) but it is possible to store them as RGB color for
- some depths. Some modes do Floyd-Steinberg dithering and some don't, but
- use the default Ghostscript halftoning (in fact, when halftoning is used,
- dithering takes also place but because of the low point density it is
- usually not efficient, and thus invisible).
- <blockquote><table cellpadding=0 cellspacing=0>
- <tr><th colspan=5 bgcolor="#CCCC00"><hr><font size="+1">Descriptions of printing modes by bpp and <b><tt>Colors</tt></b></font><hr>
- <tr valign=bottom>
- <th align=left>bpp
- <td>
- <th align=left><b><tt>Colors</tt></b>
- <td>
- <th align=left>Mode
- <tr> <td colspan=5><hr>
- <tr valign=top> <td>32
- <td>
- <td align=center>4
- <td>
- <td>CMYK colour printing, Floyd-Steinberg dithering
- <tr valign=top> <td>24
- <td>
- <td align=center>4
- <td>
- <td>The same. (But each primary colour is stored on 6 bits instead of 8.)
- <tr valign=top> <td>24
- <td>
- <td align=center>3
- <td>
- <td>RGB colour printing, Floyd-Steinberg dithering. This mode does
- <b><tt>not</tt></b> use the black cartridge (that's why it
- exists, for when you don't want to use it <b><tt>;-)</tt></b>).
- Each primary colour is stored in 8 bits as in the 32/4 mode,
- but black generation and under-color removal are done on the
- driver side and not by Ghostscript, so you have no control over
- it. (This mode is no longer supported in this driver.)
- <tr valign=top> <td>16
- <td>
- <td align=center>4
- <td>
- <td>CMYK colour printing, halftoned by Ghostscript. F-S dithering
- is still visible here (but the halftone patterns are visible
- too!).
- <tr valign=top> <td>8
- <td>
- <td align=center>4
- <td>
- <td>The same. (But each primary colour is stored in 2 bits instead of 4.)
- <tr valign=top> <td>8
- <td>
- <td align=center>3
- <td>
- <td>RGB colour printing. This mode is not intended for use. What I
- mean is that it should be used only if you want to use custom
- halftone screens <b>and</b> the halftoning is broken using the
- 8/4 mode (some versions of Ghostscript have this problem).
- <tr valign=top> <td>8
- <td>
- <td align=center>1
- <td>
- <td>Gray-level printing, Floyd-Steinberg dithering
- <tr valign=top> <td>1
- <td>
- <td align=center>1
- <td>
- <td>Gray-level printing halftoned by Ghostscript
- </table></blockquote>
- <p>
- These modes are selected using the <b><tt>BitsPerPixel</tt></b> <b>and</b>
- <b><tt>Colors</tt></b> integer options (either from the command line or in
- a PostScript program using <b><tt>setpagedevice</tt></b>). See below.
- <p>
- A note about darkness of what is printed: Canon printers do print dark,
- really. And the Floyd-Steinberg dithering may eventually darken your image
- too. So you may need to apply gamma correction by calling Ghostscript as in
- <blockquote><b><tt>
- gs -sDEVICE=bjc600 gamma.ps myfile.ps
- </tt></b></blockquote>
- <p>
- where <b><tt>gamma.ps</tt></b> changes the gamma correction (here to 3 for
- all colors); 0.45 gives me good results, but your mileage may vary. The
- bigger the value the lighter the output:
- <blockquote><b><tt>
- { 0.45 exp } dup dup currenttransfer setcolortransfer
- </tt></b></blockquote>
- <p>
- The drivers support printing at 90dpi, 180dpi and 360dpi. Horizontal and
- vertical resolutions must be the same or a limitcheck error will happen. A
- rangecheck will happen too if the resolution is not
- 90 ×2^<small><sup><b>N</b></sup></small>. If the driver
- is compiled with <b><tt>-DBJC_STRICT</tt></b> a rangecheck also happens if
- the resolution is not one of those supported. This is not the case, as we
- expect that there may be a 720dpi bjc some day.
- <p>
- Here are the various options supported by the bjc drivers, along with
- their types, supported values, effects, and usage:
- <dl>
- <dt><b><tt>BitsPerPixel</tt></b> (int)
- <dd>Choose the depth of the page. Valid values are 1, 8, 16, 24 (the
- default) and 32.
- <p>
- Note that when this is set for the first time, the <b><tt>Colors</tt></b>
- property is automatically adjusted unless it is also specified. The table
- here shows the corresponding color models and the rendering method visible:
- "GS" for Ghostscript halftoning and "F-S" for Floyd-Steinberg dithering.
- When both are present it means that the dithering of halftones is visible.
- Default choices are indicated by asterisk "*".
- <blockquote><table cellpadding=0 cellspacing=0>
- <tr><th colspan=9 bgcolor="#CCCC00"><hr><font size="+1">Valid <b><tt>Colors</tt></b> values for<br>allowed <b><tt>BitsPerPixel</tt></b> values
- </font><hr>
- <tr valign=bottom>
- <th align=left>bpp
- <td>
- <th align=left><b><tt>Colors</tt></b>
- <td>
- <th align=left>
- <td>
- <th align=left>Color model
- <td>
- <th align=left>Dithering
- <tr> <td colspan=9><hr>
- <tr valign=top> <td>32
- <td>
- <td align=center>4
- <td>
- <td>
- <td align=center>
- <td>CMYK
- <td>
- <td>F-S
- <tr valign=top> <td>24
- <td>
- <td align=center>4
- <td>
- <td><b>*</b>
- <td align=center>
- <td>CMYK
- <td>
- <td>F-S
- <tr valign=top> <td>
- <td>
- <td align=center>3
- <td>
- <td>
- <td align=center>
- <td>RGB
- <td>
- <td>F-S
- <tr valign=top> <td>16
- <td>
- <td align=center>4
- <td>
- <td>
- <td align=center>
- <td>CMYK
- <td>
- <td>GS, F-S
- <tr valign=top> <td>8
- <td>
- <td align=center>4
- <td>
- <td><b>*</b>
- <td align=center>
- <td>CMYK
- <td>
- <td>GS
- <tr valign=top> <td>
- <td>
- <td align=center>3
- <td>
- <td>
- <td align=center>
- <td>RGB
- <td>
- <td>GS
- <tr valign=top> <td>
- <td>
- <td align=center>1
- <td>
- <td>
- <td align=center>
- <td>K (CMYK)
- <td>
- <td>F-S
- <tr valign=top> <td>1
- <td>
- <td align=center>1
- <td>
- <td><b>*</b>
- <td align=center>
- <td>K (CMYK)
- <td>
- <td>GS
- </table></blockquote>
- <p>Also note that automagical change of one parameter depending on the
- other one does not work in a <b><tt>setpagedevice</tt></b> call. This
- means that if you want to change <b><tt>BitsPerPixel</tt></b> to a value
- whose valid <b><tt>Colors</tt></b> values do not include the actual
- <b><tt>Colors</tt></b> value, you must change <b><tt>Colors</tt></b> too.
- </dl>
- <dl>
- <dt><b><tt>Colors</tt></b> (int)
- <dd>Choose the number of color components from among 1, 3 and 4 (the
- default). This setting cannot be used in a PostScript program, only on
- Ghostscript's command line. See <b><tt>ProcessColorModel</tt></b> below
- for what to use to change the number of colors with PostScript code.
- <p>
- Note that setting this property does limit the choices of
- <b><tt>BitsPerPixel</tt></b>. As for the previous property, its first
- setting may induce a setting of the "other value"
- (<b><tt>BitsPerPixel</tt></b> here). The table here indicates valid
- combinations with "V", default values with asterisk "*".
- <blockquote><table cellpadding=0 cellspacing=0>
- <tr><th colspan=13 bgcolor="#CCCC00"><hr><font size="+1">Valid <b><tt>BitsPerPixel</tt></b> values<br>for allowed <b><tt>Colors</tt></b> values</font><hr>
- <tr valign=top> <td>
- <td>
- <td>
- <td>
- <th align=left colspan=9><b><tt>BitsPerPixel</tt></b> OK values<hr>
- <tr valign=top> <th>Colors
- <td>
- <th>Type
- <td>
- <td>32
- <td>
- <td>24
- <td>
- <td>16
- <td>
- <td>8
- <td>
- <td>1
- <tr> <td colspan=13><hr>
- <tr valign=top> <td>4
- <td>
- <td>CMYK
- <td>
- <td><b>V</b>
- <td>
- <td><b>*</b>
- <td>
- <td><b>V</b>
- <td>
- <td><b>V</b>
- <td>
- <td>
- <tr valign=top> <td>3
- <td>
- <td>RGB
- <td>
- <td>
- <td>
- <td><b>*</b>
- <td>
- <td>
- <td>
- <td><b>V</b>
- <td>
- <td>
- <tr valign=top> <td>1
- <td>
- <td>K
- <td>
- <td>
- <td>
- <td>
- <td>
- <td>
- <td>
- <td><b>V</b>
- <td>
- <td><b>*</b>
- </table></blockquote>
- <p>Also note that automagical change of one parameter depending on the
- other one does not work in a <b><tt>setpagedevice</tt></b> call. This
- means that if you want to change <b><tt>Colors</tt></b> to a value whose
- valid <b><tt>BitsPerPixel</tt></b> values don't include the actual
- <b><tt>BitsPerPixel</tt></b> value, you must change
- <b><tt>BitsPerPixel</tt></b> too.
- </dl>
- <dl>
- <dt><b><tt>ProcessColorModel</tt></b> (symbol)
- <dd>A symbol taken from <b><tt>/DeviceGray</tt></b>,
- <b><tt>/DeviceRGB</tt></b> or <b><tt>/DeviceCMYK</tt></b> which can be used
- to select 1, 3 or 4 colors respectively. Note that this parameter takes
- precedence over <b><tt>Colors</tt></b>, and that both affect the same
- variable of the driver. (See <b><tt>Colors</tt></b> above for values
- combined with <b><tt>BitsPerPixel</tt></b>.)
- </dl>
- <dl>
- <dt><b><tt>HWResolution</tt></b> (floats array)
- <dd>An array of two floats giving the horizontal and vertical resolution in
- dots per inch from among 90, 180 and 360 (the default). Both values must
- be the same. On the Ghostscript command line, the resolution may be
- changed with the <a href="Use.htm#Resolution_switch"><b><tt>-r</tt></b>
- switch</a>.
- </dl>
- <dl>
- <dt><b><tt>ManualFeed</tt></b> (bool)
- <dd>Indicate that the sheets won't be fed automatically by the printer,
- <b><tt>false</tt></b> by default. (Not meaningful on the BJC-600, I fear.)
- </dl>
- <dl>
- <dt><b><tt>MediaType</tt></b> (string)
- <dd>The media to print on, chosen from among "<b><tt>PlainPaper</tt></b>",
- "<b><tt>CoatedPaper</tt></b>", "<b><tt>TransparencyFilm</tt></b>",
- "<b><tt>Envelope</tt></b>", "<b><tt>Card</tt></b>" and
- "<b><tt>Other</tt></b>". Default is "<b><tt>PlainPaper</tt></b>". For
- "<b><tt>Envelope</tt></b>", "<b><tt>Card</tt></b>" or
- "<b><tt>Other</tt></b>" the driver puts the printer into thick mode
- automatically regardless of the actual media weight.
- </dl>
- <dl>
- <dt><b><tt>MediaWeight</tt></b> (int or null)
- <dd>The weight of the media in grams per square meter. Null (the default)
- indicates that the weight is of no importance. If the specified media
- weight is greater than 105 (that is, the value of the compilation default
- <b><tt>BJC</tt></b>???<b><tt>_MEDIAWEIGHT_THICKLIMIT</tt></b>) then the
- printer will be set to use thick paper.
- </dl>
- <dl>
- <dt><b><tt>PrintQuality</tt></b> (string)
- <dd>The quality of printing.
- <table cellpadding=0 cellspacing=0>
- <tr valign=bottom>
- <th align=left>Value
- <td>
- <th align=left><b><tt>bjc600</tt></b>
- <td>
- <th align=left><b><tt>bjc800</tt></b>
- <td>
- <th align=left>
- <tr> <td colspan=7><hr>
- <tr valign=top> <td><b><tt>Low</tt></b>
- <td>
- <td>
- <td>
- <td align=center><b>X</b>
- <td>
- <td>Has the effect of making only two printing passes instead of four, so should be twice the speed; known as "CN" (Color Normal) mode
- <tr valign=top> <td><b><tt>Draft</tt></b>
- <td>
- <td align=center><b>X</b>
- <td>
- <td align=center><b>X</b>
- <td>
- <td>Unlights the "HQ" light on a BJC-600
- <tr valign=top> <td><b><tt>Normal</tt></b>
- <td>
- <td align=center><b>X</b>
- <td>
- <td align=center><b>X</b>
- <td>
- <td>Default for both drivers; lights the "HQ" light on a BJC-600
- <tr valign=top> <td><b><tt>High</tt></b>
- <td>
- <td align=center><b>X</b>
- <td>
- <td align=center><b>X</b>
- <td>
- <td>Means 200% black and 100% CMY; lights the "Bk+" light on a BJC-600
- </table>
- </dl>
- <dl>
- <dt><b><tt>DitheringType</tt></b> (string)
- <dd>Dithering algorithm from between "<b><tt>Floyd-Steinberg</tt></b>" and
- "<b><tt>None</tt></b>". "<b><tt>None</tt></b>" is the default for 1/1 print
- mode, "<b><tt>Floyd-Steinberg</tt></b>" for other modes. At the moment
- this parameter is read-only, though no error is generated if one tries to
- change it. This parameter is not of much value at the moment and is here
- mainly to reserve the name for future addition of dithering algorithms.
- </dl>
- <dl>
- <dt><b><tt>PrintColors</tt></b> (int)
- <dd>Mask for printing color. If 0, use black for any color; otherwise the
- value must be the sum of any of 1 (cyan), 2 (magenta), 4 (yellow) and 8
- (black), indicating which colors will be used for printing. When printing
- colour, only colours specified will be printed (this means that some planes
- will be missing if a color's value above is omitted). When printing grays,
- black is used if it is present in the <b><tt>PrintColors</tt></b>;
- otherwise, the image is printed by superimposing each requested color.
- </dl>
- <dl>
- <dt><b><tt>MonochromePrint</tt></b> (bool)
- <dd><b>For <tt>bjc600</tt> only</b>, <b><tt>false</tt></b> by default.
- Substitute black for Cyan, Magenta and Yellow when printing -- useful, for
- example, to get some monochrome output of a dithered printing This is a
- hardware mechanism as opposed to the previous software one. I think that
- using this or setting <b><tt>PrintColors</tt></b> to 0 will give the same
- results.
- </dl>
- <p>
- Note that the <b><tt>MediaType</tt></b> and <b><tt>ThickMedia</tt></b>
- options will be replaced by the use of the device
- <b><tt>InputAttributes</tt></b> and <b><tt>OutputAttributes</tt></b> as
- soon as possible. Please note too that the print mode may be reset at the
- start of printing, not at the end. This is the expected behaviour. If you
- need to reset the printer to its default state, simply print a file that
- does just a <b><tt>showpage</tt></b>.
- <h4><a name="BJC_device_info"></a>Device information</h4>
- <p>
- Here is other information published by the driver that you will find
- in the <b><tt>deviceinfo</tt></b> dictionary.
- <dl>
- <dt><b><tt>OutputFaceUp</tt></b> (bool)
- <dd>This has the boolean value <b><tt>true</tt></b>, indicating that the
- sheets are stacked face up.
- </dl>
- <dl>
- <dt><b><tt>Version</tt></b> (float)
- <dd>In the form <b>M.</b><em>mm</em>pp, where <b>M</b> is the major
- version, <em>mm</em> the bjc driver's minor version, and pp the specific
- driver minor version (that is, <b><tt>M.</tt></b><em>mm</em> will always be
- the same for the <b><tt>bjc600</tt></b> and <b><tt>bjc800</tt></b>
- drivers).
- </dl>
- <dl>
- <dt><b><tt>VersionString</tt></b> (string)
- <dd> A string showing the driver version and other indications. At the
- moment, things like "a" or "b" may follow the version to indicate alpha or
- beta versions. The date of the last change to this version is given in the
- form MM/DD/YY (no, it won't adapt to your locale).
- </dl>
- <h4><a name="BJC_HW_margins"></a>Hardware margins</h4>
- <p>
- The BJC printers have top and bottom hardware margins of 3mm and 7.1mm
- respectively (Canon says 7mm, but this is unusable because of the rounding
- of paper sizes to PostScript points). The left margin is 3.4mm for A4 and
- smaller paper sizes, 6.4mm for U.S. paper sizes, envelopes and cards. It
- is 4.0mm for A3 paper on the BJC-800.
- <p>
- The maximum printing width of a BJC-600 printer is 203mm. The maximum
- printing width of a BJC-800 printer is 289mm on A3 paper, 203mm on
- U.S. letter and ISO A4 paper.
- <h4><a name="BJC_PPD"></a>PostScript printer description (PPD) files</h4>
- <p>
- The files <b><tt>CBJC600.PPD</tt></b> and <b><tt>CBJC800.PPD</tt></b> (whose
- long names are, respectively, <b><tt>Canon_BubbleJetColor_600.ppd</tt></b>
- and <b><tt>Canon_BubbleJetColor_800.ppd</tt></b>) are PPD files to drive the
- features of the <b><tt>bjc600</tt></b> and <b><tt>bjc800</tt></b> drivers.
- They can be used, for example, on NextStep systems (presumably on OpenStep
- systems too) and on Unix systems with Adobe's TranScript and
- <b><tt>pslpr</tt></b> (not tested). The files are not complete at the
- moment. Please note that NextStep's printing interface does not
- correctly enforce constraints specified in these files (in UIConstraints
- descriptions): you must force yourself to use valid combinations of
- options.
- <h4><a name="BJC_PPD_custom"></a>Customizing the PPD files</h4>
- <p>
- By default the PPD files are set for U.S. letter size paper, and they use a
- normalized transfer function. If you choose to use A4 printing by default,
- you must replace "<b><tt>Letter</tt></b>" with "<b><tt>A4</tt></b>" in
- these (noncontiguous) lines:
- <blockquote>
- [...]<br>
- <b><tt>*DefaultPageSize: Letter<br></tt></b>
- [...]<br>
- <b><tt>*DefaultRegion: Letter<br></tt></b>
- [...]<br>
- <b><tt>*DefaultImageableArea: Letter</tt></b><br>
- [...]<br>
- </blockquote>
- <p>
- Some versions of Ghostscript have problems with normalized colors, which
- makes them add magenta in gray levels. If you experience this problem,
- in the PPD file replace the line
- <blockquote><b><tt>
- *DefaultTransfer: Normalized
- </tt></b></blockquote>
- <p>
- with the alternate line
- <blockquote><b><tt>
- *DefaultTransfer: Null
- </tt></b></blockquote>
- <p>
- The "thick media" option is implemented by choosing a value of 120 or 80
- (for thick and thin media respectively) for the <b><tt>MediaWeight</tt></b>
- feature of the drivers. If you ever change the threshold for thick media
- in the driver code, you may need to change the values in the PPD files too.
- <p>
- All customization should be done using the "<b><tt>*Include:</tt></b>"
- feature of PPD files so that your local changes will be retained if you
- update the PPD files.
- <h3><a name="BJC_bugs"></a>How to report problems</h3>
- <p>
- Yves Arrouye no longer maintains this driver, and will not answer questions
- about it. If you are posting a question about it in a public form, please
- be as descriptive as possible, and please send information that can be used
- to reproduce the problem. Don't forget to say which driver you use, and in
- what version. Version information can be found in the source code of the
- driver or by issuing the following command in a shell:
- <blockquote><b><tt>
- echo "currentpagedevice /VersionString get ==" | gs -q -sDEVICE=bjc600 -
- </tt></b></blockquote>
- <h3><a name="BJC_acks"></a>Acknowledgements</h3>
- <p>
- I am particularly grateful to Yoshio Kuniyoshi <<a
- href="mailto:yoshio@nak.math.keio.ac.jp">yoshio@nak.math.keio.ac.jp</a>>
- without whom I'd never make these drivers, and also to L. Peter Deutsch,
- who answered all my (often silly) questions about Ghostscript's driver
- interface.
- <p>
- Thanks also to the people who volunteered to beta-test the v2.x BJC
- drivers: David Gaudine
- <<a href="mailto:david@donald.concordia.ca">david@donald.concordia.ca</a>>,
- Robert M. Kenney <<a href="mailto:rmk@unh.edu">rmk@unh.edu</a>>,
- James McPherson
- <<a href="mailto:someone@erols.com">someone@erols.com</a>>
- and Ian Thurlbeck
- <<a href="mailto:ian@stams.strath.ac.uk">ian@stams.strath.ac.uk</a>>
- (listed alphabetically) were particularly helpful by discovering bugs and
- helping find out exact paper margins on printers I don't have access to.
- <p>
- And many thanks to Klaus-Gunther Hess
- <<a href="mailto:ghess@elmos.de">ghess@elmos.de</a>> for looking
- at the dithering code and devising a good CMYK dithering algorithm for the
- Epson Stylus Color, which I then adapted to the code of these drivers.
- <hr>
- <h2><a name="STC_epson_stylus"></a>Epson Stylus color printer (see also <b><tt>uniprint</tt></b>)</h2>
- <p>
- This section was contributed by Gunther Hess
- <<a href="mailto:ghess@elmos.de">ghess@elmos.de</a>>, who also wrote
- <b><tt>uniprint</tt></b>, a later set of drivers. You should probably see
- the section on <a href="#Uniprint"><b><tt>uniprint</tt></b></a> for whether
- it might be better for your uses than this driver.
- <h3><a name="STC_usage"></a>Usage</h3>
- <p>
- This driver is selected with "<b><tt>-sDEVICE=stcolor</tt></b>", producing
- output for an Epson Stylus Color at 360dpi resolution by default. But it
- can do much more with this printer, and with significantly better quality,
- than with the default mode; and it can also produce code for monochrome
- versions of the printer. This can be achieved via either command-line
- options or Ghostscript input. For convenience a PostScript file is
- supplied for use as an initial input file. Try the following command:
- <blockquote>
- <b><tt>gs -sDEVICE=stcolor -r</tt></b><b>{Xdpi}</b><b><tt>x</tt></b><b>{Ydpi}</b><b><tt> stcolor.ps</tt></b> <b>{YourFile.ps}</b>
- </blockquote>
- <p>
- where <b>{Xdpi}</b> is one of 180, 360, or 720 and <b>{Ydpi}</b> is one of
- 90, 180, 360, or 720. The result should be significantly better. You may
- use <b><tt>stcolor.ps</tt></b> with other devices too, but I do not
- recommend this, since it does nothing then. <b><tt>stcolor.ps</tt></b>
- should be available with binary distributions and should reside in the same
- directory as other Ghostscript initialization files or in the same
- directory as the files to be printed. Thus if Ghostscript is part of your
- printer-spooler, you can insert
- <blockquote><b><tt>
- (stcolor.ps) findlibfile { pop run } if pop
- </tt></b></blockquote>
- <p>
- in files you want to use the improved algorithms. You may want to adapt
- <b><tt>stcolor.ps</tt></b> file to your specific needs. The methods and
- options for this are described here, but this description is restricted to
- Ghostscript options, while their manipulation at the PostScript level is
- documented in the material on <a href="Language.htm">the relationship of
- Ghostscript and PostScript</a> and in <b><tt>stcolor.ps</tt></b>.
- <h3><a name="STC_options"></a>Options</h3>
- <p>
- Now to explain the options (as written on my UNIX system). The order is
- somehow related to their use during the printing process:
- <dl>
- <dt><b><tt>-dUnidirectional</tt></b>
- <dd>Force unidirectional printing, recommended for transparencies
- </dl>
- <dl>
- <dt><b><tt>-dMicroweave</tt></b>
- <dd>Enable the printer's "microweave" feature; see
- "<a href="#What_is_weaving">What is weaving?</a>" below.
- </dl>
- <dl>
- <dt><b><tt>-dnoWeave</tt></b>
- <dd>Disable any Weaving (overrides <b><tt>-dMicroweave</tt></b>)
- </dl>
- <dl>
- <dt><b><tt>-dSoftweave</tt></b>
- <dd>Enable the driver's internal weaving. Note that <b><tt>Softweave</tt></b> works <b>only</b> with the original Stylus Color and the PRO-Series.
- </dl>
- <dl>
- <dt><b><tt>-sDithering=</tt></b><em>{name}</em>
- <dd>Select another dithering algorithm (name) from among
- <blockquote><table cellpadding=0 cellspacing=0>
- <tr valign=top> <td><b><tt>gscmyk</tt></b>
- <td>
- <td>fast color output, CMYK process color model (default)
- <tr valign=top> <td><b><tt>gsmono</tt></b>
- <td>
- <td>fast monochrome output
- <tr valign=top> <td><b><tt>gsrgb</tt></b>
- <td>
- <td>fast color output, RGB process color model
- <tr valign=top> <td><b><tt>fsmono</tt></b>
- <td>
- <td>Floyd-Steinberg, monochrome
- <tr valign=top> <td><b><tt>fsrgb</tt></b>
- <td>
- <td>Floyd-Steinberg, RGB process color model (almost identical to the <b><tt>cdj550</tt></b>/<b><tt>bjc</tt></b> algorithm)
- <tr valign=top> <td><b><tt>fsx4</tt></b>
- <td>
- <td>Floyd-Steinberg, CMYK process color model (shares code with <b><tt>fsmono</tt></b> and <b><tt>fsrgb</tt></b>, but is algorithmically really bad)
- <tr valign=top> <td><b><tt>fscmyk</tt></b>
- <td>
- <td>Floyd-Steinberg, CMYK process color model and proper modifications for CMYK
- <tr valign=top> <td><b><tt>hscmyk</tt></b>
- <td>
- <td>modified Floyd-Steinberg with CMYK model ("hs" stands for "hess" not for "high speed", but the major difference from <b><tt>fscmyk</tt></b> is speed)
- <tr valign=top> <td><b><tt>fs2</tt></b>
- <td>
- <td>algorithm by Steven Singer (RGB) should be identical to <b><tt>escp2cfs2</tt></b>.
- </table></blockquote>
- </dl>
- <dl>
- <dt><b><tt>-dBitsPerPixel=</tt></b><em>{1...32}</em>
- <dd>number of bits used for pixel storage; the larger the value, the better
- the quality -- at least in theory. In <b><tt>fsrgb</tt></b> one can gain
- some speed by restricting to 24 bits rather than the default 30.
- </dl>
- <dl>
- <dt><b><tt>-dFlag0</tt></b>
- <dd>causes some algorithms to select a uniform initialisation rather than a
- set of random values. May yield a sharper image impression at the cost of
- dithering artifacts. (Applies to <b><tt>hscmyk</tt></b> and all fs modes,
- except for fs2, which always uses a constant initialization.)
- </dl>
- <dl>
- <dt><b><tt>-dFlag1</tt></b> ... <b><tt>-dFlag4</tt></b>
- <dd>Available for future algorithms.
- </dl>
- <dl>
- <dt><b><tt>-dColorAdjustMatrix='{</tt></b><em>three, nine, or sixteen
- floating-point values</em><b><tt>}'</tt></b>
- <dd>This is a matrix to adjust the colors. Values should be between -1.0
- and 1.0, and the number of values depends on the color model the selected
- algorithm uses. In RGB and CMYK modes a matrix with 1.0 on the diagonal
- produces no transformation. This feature is really required, but I could
- not identify a similar feature at the language level, so I implemented it,
- but I don't know reasonable values yet.
- </dl>
- <dl>
- <dt><b><tt>-dCtransfer='{</tt></b><em>float float ...</em><b><tt>}'</tt></b> or
- <dt><b><tt>-dMtransfer=</tt></b>..., <b><tt>-dY</tt></b>..., <b><tt>-dK</tt></b>... or
- <dt><b><tt>-dRtransfer='{</tt></b><em>float float ...</em><b><tt>}'</tt></b> or
- <dt><b><tt>-dG</tt></b>..., <b><tt>-dB</tt></b>... or
- <dt><b><tt>-dKtransfer='{</tt></b><em>float float ...</em><b><tt>}'</tt></b>
- <dd>Which you use depends on the algorithm, which may be either either
- CMYK, RGB or monochrome. The values are arrays of floats in the range from
- 0 to 1.0, representing the visible color intensity for the device. One may
- achieve similar effects with <b><tt>setcolortransfer</tt></b> at the
- language level, but this takes more time and the underlying code for the
- driver-specific parameters is still required. The size of the arrays is
- arbitrary and the defaults are "<b><tt>{0.0 1.0}</tt></b>", which is a
- linear characteristic. Most of the code in <b><tt>stcolor.ps</tt></b> are
- better transfer arrays.
- </dl>
- <dl>
- <dt><b><tt>-dKcoding='{</tt></b><em>float...</em><b><tt>}'</tt></b>
- <dt><b><tt>-dC</tt></b>..., <b><tt>-dM</tt></b>... etc.
- <dd>Arrays between 0.0 and 1.0, controlling the internal coding of the
- color values. Clever use of these arrays may yield further enhancements,
- but I have no experience yet. (To be discontinued with version 2.x.)
- </dl>
- <dl>
- <dt><b><tt>-sModel=st800</tt></b>
- <dd>Causes output to be suitable for the monochrome Stylus 800 (no weaving,
- no color).
- </dl>
- <dl>
- <dt><b><tt>-sOutputCode=</tt></b><em>{name}</em>
- <dd>Can be either "<b><tt>plain</tt></b>", "<b><tt>runlength</tt></b>" or
- "<b><tt>deltarow</tt></b>" and changes the ESC/P2 coding technique
- used by the driver. The default is to use runlength encoding.
- "<b><tt>plain</tt></b>" selects uncompressed encoding and generates
- enormous amounts of data.
- </dl>
- <dl>
- <dt><b><tt>-descp_Band=</tt></b><em>1/8/15/24</em>
- <dd>Number of nozzles of scanlines used in printing, Useful only with
- <b><tt>-dnoWeave</tt></b>. Larger Values yield smaller code, but this
- doesn't increase the printing speed.
- </dl>
- <dl>
- <dt><b><tt>-descp_Width=</tt></b><em>N</em>
- <dd>Number of pixels Printed in each scan Line. (Useful only when tuning
- margins; see below)
- </dl>
- <dl>
- <dt><b><tt>-descp_Height=</tt></b><em>pixels</em>
- <dd>Length of the entire page in pixels. (Parameter of
- "<b><tt>ESC(C</tt></b>" in default initialization.)
- </dl>
- <dl>
- <dt><b><tt>-descp_Top=</tt></b><em>scan lines</em>
- <dd>Top margin in scan lines. (First parameter of "<b><tt>ESC(c</tt></b>"
- in default initialization.)
- </dl>
- <dl>
- <dt><b><tt>-descp_Bottom=</tt></b><em>scan lines</em>
- <dd>Bottom margin in scan lines. (Second parameter of
- "<b><tt>ESC(c</tt></b>" in default initialization.)
- </dl>
- <dl>
- <dt><b><tt>-sescp_Init=</tt></b>"<em>string</em>"
- <dd>Override for the initialization sequence. (Must set graphics mode 1
- and units.)
- </dl>
- <dl>
- <dt><b><tt>-sescp_Release=</tt></b>"<em>string</em>"
- <dd>Overrides the release sequence, "<b><tt>ESC @ FF</tt></b>" by
- default.
- </dl>
- <p>
- ESC/P2 allows any resolutions to be valid in theory, but only
- <b><tt>-r360x360</tt></b> (the default) and <b><tt>-r720x720</tt></b> (not
- on STC-IIs ? and st800) are known to work with most printers.
- <p>
- <blockquote><table cellpadding=0 cellspacing=0>
- <tr><th colspan=7 bgcolor="#CCCC00"><hr><font size="+1">Valid option combinations<br>Stylus I & Pro-Series only</font><hr>
- <tr valign=bottom>
- <th valign=bottom align=left>Resolution
- <td>
- <th valign=bottom align=left><b><tt>escp_Band</tt></b>
- <td>
- <th valign=bottom align=left>Weave usable
- <td>
- <th valign=bottom align=left><b><tt>escp_Band</tt></b> &<br>number of passes
- <tr> <td colspan=7><hr>
- <tr valign=top> <td>180x90
- <td>
- <td>15
- <td>
- <td><b><tt>noWeave</tt></b>
- <td>
- <td>
- <tr valign=top> <td>180x180
- <td>
- <td>1 , 8, 24
- <td>
- <td><b><tt>noWeave</tt></b>, <b><tt>Microweave</tt></b>
- <td>
- <td>15/2 <b><tt>SoftWeave</tt></b>
- <tr valign=top> <td>180x360
- <td>
- <td>
- <td>
- <td>
- <td>
- <td>15/4 <b><tt>SoftWeave</tt></b>
- <tr valign=top> <td>180x720
- <td>
- <td>
- <td>
- <td>
- <td>
- <td>15/8 <b><tt>SoftWeave</tt></b>
- <tr valign=top> <td>360x90
- <td>
- <td>15
- <td>
- <td><b><tt>noWeave</tt></b>
- <td>
- <td>
- <tr valign=top> <td>360x180
- <td>
- <td>1, 8, 24
- <td>
- <td><b><tt>noWeave</tt></b>, <b><tt>Microweave</tt></b>
- <td>
- <td>15/2 <b><tt>SoftWeave</tt></b>
- <tr valign=top> <td>360x360
- <td>
- <td>1, 8, 24
- <td>
- <td><b><tt>noWeave</tt></b>, <b><tt>Microweave</tt></b>
- <td>
- <td>15/4 <b><tt>SoftWeave</tt></b>
- <tr valign=top> <td>360x720
- <td>
- <td>
- <td>
- <td>
- <td>
- <td>15/8 <b><tt>SoftWeave</tt></b>
- <tr valign=top> <td>720x90
- <td>
- <td>15
- <td>
- <td><b><tt>noWeave</tt></b>
- <td>
- <td>
- <tr valign=top> <td>720x180
- <td>
- <td>
- <td>
- <td>
- <td>
- <td>15/2 <b><tt>SoftWeave</tt></b>
- <tr valign=top> <td>720x360
- <td>
- <td>
- <td>
- <td>
- <td>
- <td>15/4 <b><tt>SoftWeave</tt></b>
- <tr valign=top> <td>720x720
- <td>
- <td>1
- <td>
- <td><b><tt>noWeave</tt></b>, <b><tt>Microweave</tt></b>
- <td>
- <td>15/8 <b><tt>SoftWeave</tt></b>
- </table></blockquote>
- <blockquote>
- <b>Beware:</b> there are only few validity checks for parameters. A good
- example is <b><tt>escp_Band</tt></b>: if you set this, the driver uses your
- value even if the value is not supported by the printer. <b>You asked for
- it and you got it!</b>
- </blockquote>
- <h3><a name="STC_FAQ"></a>Application note and FAQ</h3>
- <p>
- Quite a bunch of parameters. Hopefully you never need any of them, besides
- feeding <b><tt>stcolor.ps</tt></b> to Ghostscript in front of your input.
- <p>
- After answering some questions over fifty times I prepared a FAQ. Here is
- version 1.3 of the FAQ, as of <b><tt>stcolor</tt></b> version 1.20 (for
- Ghostscript 3.50).
- <h4><a name="STC_FAQ_A3"></a>Support for A3 paper</h4>
- <p>
- Yes, this driver supports the A3-size printer: merely set the required
- pagesize and margins. A simple way to do this is to specify the
- command-line switch "<b><tt>-sPAPERSIZE=a3</tt></b>" or include the
- procedure call "<b><tt>a3</tt></b>" in the PostScript prolog section. To
- optimize the printable area or set the proper margins, see the next
- paragraph.
- <h4><a name="STC_FAQ_margins"></a>Margins, PageSize</h4>
- <p>
- I refuse to add code to <b><tt>stcolor</tt></b> that tries to guess the
- proper margins or page size, because I found that such guessing is usually
- wrong and needs correction in either the source or the parameters. You can
- modify <b><tt>stcolor.ps</tt></b> to do that, however. After the line
- <blockquote><b><tt>
- mark % prepare stack for "putdeviceprops"
- </tt></b></blockquote>
- <p>
- insert these lines, which define page size and margins in points:
- <blockquote>
- <pre>/.HWMargins [9.0 39.96 12.6 9.0] % Left, bottom, right, top (1/72")
- /PageSize [597.6 842.4] % Paper, including margins (1/72")
- /Margins [ % neg. Offset to Left/Top in Pixels
- 4 index 0 get STCold /HWResolution get 0 get mul 72 div neg
- 5 index 3 get STCold /HWResolution get 1 get mul 72 div neg
- ]</pre></blockquote>
- <p>
- Feel free to change the values of <b><tt>.HWMargins</tt></b> and
- <b><tt>PageSize</tt></b> to match your needs; the values given are the
- defaults when the driver is compiled with "<b><tt>-DA4</tt></b>". This
- option or its omission may cause trouble: the Stylus Color can print up to
- exactly 8 inches (2880 pixels) at 360dpi. The remaining paper is the
- margin, where the left margin varies only slightly with the paper size,
- while the right margin is significantly increased for wider paper, such as
- U.S. letter size.
- <p>
- <b>Note</b> that if you are using an ISO paper size with a version of
- <b><tt>stcolor</tt></b> after 1.20 and compiled without
- "<b><tt>-DA4</tt></b>", then the default margin is too large, and you need
- to add the proper "<b><tt>.HWMargins</tt></b>" to the command line or to
- <b><tt>stcolor.ps</tt></b>.
- <h4><a name="STC_FAQ_II_IIS_1500"></a>Stylus Color II / IIs and 1500</h4>
- <p>
- First the good news: the driver can print on the Stylus Color II.
- Now the bad news:
- <ul>
- <li>According to Epson support the driver "abuses" the color
- capabilities. (See "Future Plans" for details.)
- <li>You need some parameters on the command line (or in
- <b><tt>stcolor.ps</tt></b>).
- <li>I doubted that it would be usable with the Stylus Color IIs, but
- it <b>is</b> usable and suffers from mixing problems!
- </ul>
- <p>
- To make things work, you <b>MUST</b> disable the driver's internal
- weaving (<b><tt>Softweave</tt></b>), in one of these two ways:
- <blockquote>
- <b><tt>gs -dMicroweave</tt></b> ...<br>
- <b><tt>gs -dnoWeave -descp_Band=1</tt></b> ...
- </blockquote>
- <p>
- Version 1.90, current as of Ghostscript 5.10, fixes this bug by new default
- behaviour. I experienced significantly increased printing speed with the
- second variant on the old Stylus Color, when printing mostly monochrome
- data.
- <h3><a name="STC_recommendations"></a>Recommendations</h3>
- <p>
- The next section is a contribution from Jason Patterson <jason@reflections.com.au>
- who evaluated a previous version (1.17). Ghostscript was invoked as follows:
- <blockquote><dl compact>
- <dt><b><tt>gs</tt></b>
- <dd><b><tt>-sDEVICE=stcolor -r720x720
- -sDithering=</tt></b>... <b><tt>-sOutputFile=escp.out stcolor.ps
- whatsoever.ps</tt></b>
- </dl></blockquote>
- <p>
- where "..." is the name of the desired algorithm.
- <b><tt>stcolor.ps</tt></b> was omitted for the gs-algorithms
- (<b><tt>gsmono</tt></b>, <b><tt>gsrgb</tt></b> and <b><tt>gscmyk</tt></b>),
- for which it is useless and would not allow the selection of
- "<b><tt>gscmyk</tt></b>".
- <h4><a name="STC_dither_experiment"></a>Color dithering experiments with
- <b><tt>gdevstc</tt></b> 1.21</h4>
- <p>
- Here are data about the EPSON Stylus Color driver's different dithering
- methods, based on a little experiment using four good quality scanned
- images of quite varied nature, to begin with, a summary of the results of
- the four experiments. <b>Sanity note:</b> the results here are from only
- four images and a total of 24 printouts (eight on 720dpi paper, sixteen on
- plain paper). Your results will almost certainly vary, and your standards
- might not be the same as mine, so use these results only as a guide, not as
- a formal evaluation.
- <blockquote><table cellpadding=0 cellspacing=0>
- <tr><th colspan=3 bgcolor="#CCCC00"><hr><font size="+1">Quality of output by method</font><hr>
- <tr valign=bottom>
- <th align=left>
- <td>
- <th align=left>
- <tr> <td colspan=3><hr>
- <tr> <td valign=top><b><tt>gsmono</tt></b>
- <td>
- <td>Pretty much what you'd expect from a mono ordered pattern.
- Looks like what a lot of mono laser printers produce.
- <tr> <td valign=top><b><tt>fsmono</tt></b>
- <td>
- <td>Excellent for monochrome.
- <tr> <td valign=top><b><tt>gscmyk</tt></b>
- <td>
- <td>Not very good, but expected from an ordered pattern.
- <tr> <td valign=top><b><tt>gsrgb</tt></b>
- <td>
- <td>A little better than <b><tt>gscmyk</tt></b>. More consistent
- looking.
- <tr> <td valign=top><b><tt>fs2</tt></b>
- <td>
- <td>Good, but not quite as good as <b><tt>fsrgb</tt></b>. Gets the
- brightness wrong: too light at 720dpi, too dark at 360dpi.
- <tr> <td valign=top><b><tt>fsrgb</tt></b>
- <td>
- <td>Very good, but a little too dark and has a slight blue tint.
- <tr> <td valign=top><b><tt>hscmyk</tt></b>
- <td>
- <td>Excellent. Slightly better than <b><tt>fsrgb</tt></b> and
- <b><tt>fs2</tt></b>. Better than <b><tt>fscmyk</tt></b> on
- some images, almost the same on most.
- <tr> <td valign=top><b><tt>fscmyk</tt></b>
- <td>
- <td>Best. Very, very slightly better than <b><tt>hscmyk</tt></b>.
- On some images nearly as good as the EPSON demos done with
- the MS Windows driver.
- </table></blockquote>
- <blockquote><table cellpadding=0 cellspacing=0>
- <tr><th colspan=4 bgcolor="#CCCC00"><hr><font size="+1">Overall visual quality (1-10), best to worst</font><hr>
- <tr valign=top> <th colspan=4 align=left>Monochrome
- <tr> <td>
- <td><b><tt>fsmono</tt></b>
- <td>
- <td><b><tt>******************</tt></b>
- <tr> <td>
- <td><b><tt>gsmono</tt></b>
- <td>
- <td><b><tt>**********</tt></b>
- <tr> <td>
- <td>
- <td>
- <td><b><tt>0 1 2 3 4 5 6 7 8 9 10</tt></b>
- <tr> <td colspan=4><hr>
- <tr valign=top> <th colspan=4 align=left>Colour
- <tr> <td>
- <td><b><tt>fscmyk</tt></b>
- <td>
- <td><b><tt>*******************</tt></b>
- <tr> <td>
- <td><b><tt>hscmyk</tt></b>
- <td>
- <td><b><tt>*******************</tt></b>
- <tr> <td>
- <td><b><tt>fsrgb</tt></b>
- <td>
- <td><b><tt>******************</tt></b>
- <tr> <td>
- <td><b><tt>fs2</tt></b>
- <td>
- <td><b><tt>*****************</tt></b>
- <tr> <td>
- <td><b><tt>gsrgb</tt></b>
- <td>
- <td><b><tt>**********</tt></b>
- <tr> <td>
- <td><b><tt>gscmyk</tt></b>
- <td>
- <td><b><tt>*********</tt></b>
- <tr> <td>
- <td>
- <td>
- <td><b><tt>0 1 2 3 4 5 6 7 8 9 10</tt></b>
- </table></blockquote>
- <h3><a name="STC_color_transform"></a>Color transformation</h3>
- <p>
- In the initial version of the driver distributed with Ghostscript 3.33, the
- parameter "<b><tt>SpotSize</tt></b>" was the only way to manipulate the
- colors at the driver level. According to the parameters enumerated above,
- this has changed significantly with version 1.16 and above as a result an
- ongoing discussion about dithering algorithms and "false color" on the
- Epson Stylus Color. This initiated the transformation of the
- <b><tt>stcolor</tt></b> driver into a framework for different dithering
- algorithms, providing a generalized interface to the internal Ghostscript
- color models and the other data structures related to Ghostscript drivers.
- <p>
- The main thing such a framework should be able to do is to deliver the
- values the dithering algorithm needs; and since this directly influences
- the optical image impression, this transformation should be adjustable
- without the need for recompilation and relinking. In general the process
- can be described as follows:
- <blockquote><table cellpadding=0 cellspacing=0>
- <tr valign=top> <td colspan=3><b><tt>ColorAdjustMatrix</tt></b>
- <td align=center>Coding
- <td colspan=3>
- <td align=center>Transfer
- <td colspan=3>
- <tr valign=top> <td>|
- <td align=center>Ghostscript color
- <td>|
- <td align=center>=>
- <td>|
- <td align=center>Ghostscript raster
- <td>|
- <td align=center>=>
- <td>|
- <td align=center>Dithering data
- <td>|
- <tr valign=top> <td>|
- <td>
- <td>|
- <td>
- <td>|
- <td align=center>1/2/4/8/16/32-bit
- <td>|
- <td>
- <td>|
- <td>
- <td>|
- <tr valign=top> <td>|
- <td align=center>1/3/4 16-bit values
- <td>|
- <td>
- <td>|
- <td align=center>1/3/4 values
- <td>|
- <td>
- <td>|
- <td align=center>(arbitrary type)
- <td>|
- </table></blockquote>
- <p>
- Due to the limitations on raster storage, information is lost in the first
- transformation step, except for the 16-bit monochrome mode. So any color
- adjustment should take place before this step and this is where the optional
- <b><tt>ColorAdjustMatrix</tt></b> works.
- <p>
- The first transformation step, called "coding", is controlled by the
- <b><tt>?coding</tt></b> arrays. The decoding process expands the range of
- values expontentially to a larger range than that provided by the initial
- Ghostscript color model, and is therefore a reasonable place to make
- device- or algorithm-specific adjustments. This is where the
- <b><tt>?transfer</tt></b> arrays are used. Array access might be not the
- fastest method, but its generality is superior, so this step is always
- based upon internally algorithm-specific array access. If 8 bits are stored
- per color component and if the algorithm uses bytes too, the second
- transformation is included within the first, which saves significant
- computation time when printing the data.
- <h3><a name="STC_CAM"></a><b><tt>ColorAdjustMatrix</tt></b></h3>
- <p>
- The driver supports different values for <b><tt>ProcessColorModel</tt></b>,
- which raises the need for different color adjustments. Here
- "<b><tt>CAM</tt></b>" stands for "<b><tt>ColorAdjustMatrix</tt></b>".
- <dl>
- <dt><b><tt>DeviceGray</tt></b> (three floats)
- <dd><pre>if ((r == g) && (g == b))
- K' = 1.0 - R;
- else
- K' = 1.0 - CAM[0] * R + CAM[1] * G + CAM[2] * B;</pre>
- <p>
- According to the <a href="Drivers.htm">documentation on drivers</a>, the
- latter (the "else" clause) should never happen.
- </dl>
- <dl>
- <dt><b><tt>DeviceRGB</tt></b> (nine floats)
- <dd><pre>if((r == g) && (g == b))
- R' = B' = G' = R;
- else
- R' = CAM[0]*R + CAM[1]*G + CAM[2]*B;
- G' = CAM[3]*R + CAM[4]*G + CAM[5]*B;
- B' = CAM[6]*R + CAM[7]*G + CAM[8]*B;</pre>
- <p>
- The printer always uses four inks, so a special treatment of black is
- provided. Algorithms may take special action if R, G, and B are all
- equal.
- </dl>
- <dl>
- <dt><b><tt>DeviceCMYK</tt></b> (sixteen floats)
- <dd>
- <pre>if((c == m) && (m == y))
- K' = max(C,K);
- C' = M' = Y' = 0;
- else
- K = min(C,M,Y);
- if((K > 0) && ColorAdjustMatrix_present) { => UCR
- C -= K;
- M -= K;
- Y -= K;
- }
- C' = CAM[ 0]*C + CAM[ 1]*M + CAM[ 2]*Y + CAM[ 3]*K;
- M' = CAM[ 4]*C + CAM[ 5]*M + CAM[ 6]*Y + CAM[ 7]*K;
- Y' = CAM[ 8]*C + CAM[ 9]*M + CAM[10]*Y + CAM[11]*K;
- K' = CAM[12]*C + CAM[13]*M + CAM[14]*Y + CAM[15]*K;</pre>
- <p>
- Again we have a special black treatment. "<b><tt>max(C,K)</tt></b>" was introduced
- because of a slight misbehaviour of Ghostscript, which delivers
- black under certain circumstances as (1,1,1,0). Normally, when
- no special black separation and undercolor removal procedures
- are defined at the PostScript level, either (C,M,Y,0) or (0,0,0,K)
- values are mapped. This would make the extended <b><tt>ColorAdjustMatrix</tt></b>
- quite tedious, and so during mapping, black separation is done for
- (C,M,Y,0) requests; and if there is a <b><tt>ColorAdjustMatrix</tt></b>, undercolor
- removal is used too. In other words the default matrix is:
- <blockquote><table>
- <tr> <td>1 <td>0 <td>0 <td>1
- <tr> <td>0 <td>1 <td>0 <td>1
- <tr> <td>0 <td>0 <td>1 <td>1
- <tr> <td>0 <td>0 <td>0 <td>1
- </table></blockquote>
- <p>
- and it is applied to CMYK values with separated and removed black. Raising
- the CMY coefficients while lowering the K coefficients reduces black and
- intensifies color. But be careful, because even small deviations from the
- default cause drastic changes.
- </dl>
- <p>
- If no <b><tt>ColorAdjustMatrix</tt></b> is set, the matrix computations are
- skipped. Thus the transformation reduces to range inversion in monochrome
- mode and black separation in CMYK mode.
- <h3><a name="STC_RGBCMYK_coding"></a>RGB / CMYK coding and transfer, and <b><tt>BitsPerPixel</tt></b></h3>
- <p>
- These two (groups of) parameters are arrays of floating-point numbers in
- the range 0.0 to 1.0. They control the truncation to the desired number of
- bits stored in raster memory (<b><tt>BitsPerPixel</tt></b>) and the ink
- density. The "truncation" may become a nonlinear function if any of the
- <b><tt>?coding</tt></b> arrays is set. Assume the following Ghostscript
- invocation:
- <blockquote><pre>gs -sDEVICE=stcolor -sDithering=fscmyk -dBitsPerPixel=16 \
- -dKcoding='{ 0.0 0.09 0.9 1.0 }' \
- -dMcoding='{ 0.0 0.09 0.9 1.0 }' \
- -dKtransfer='{ 0.0 0.09 0.9 1.0 }' \
- -dYtransfer='{ 0.0 0.09 0.9 1.0 }'</pre>
- </blockquote>
- <p>
- We may have either or both of <b><tt>?coding</tt></b> and
- <b><tt>?transfer</tt></b>, giving four possible combinations. (These four
- combinations appear in the given example.) The resulting mapping appears
- in the following tables, where except for the internal Indices (4
- components × 4 bits = 16 <b><tt>BitsPerPixel</tt></b>), all values
- are normalized to the range 0 to 1. The actual range is 0 to 65535 for the
- Ghostscript color and 0 to 16777215 for the ink values delivered to the
- <b><tt>fscmyk</tt></b> algorithm. Sorry for the bunch of numbers
- following, but you may try this example in conjunction with
- <b><tt>stcinfo.ps</tt></b>, which should give you a graphical printout of
- the following numbers when you issue a <b><tt>showpage</tt></b> command.
- <blockquote><table cellpadding=0 cellspacing=0>
- <tr> <td>
- <td>
- <th colspan=5>Cyan<hr>
- <td>
- <th colspan=5>Magenta<hr>
- <tr valign=top> <th>CI/15
- <td>
- <th>gs_color_values
- <td>
- <th>CI
- <td>
- <th>Ink
- <td>
- <th>gs_color_values
- <td>
- <th>CI
- <td>
- <th>Ink
- <tr> <td colspan=13><hr>
- <tr valign=top> <td align=center>0.000
- <td>
- <td align=center>0.000 - 0.062
- <td>
- <td align=right>0
- <td>
- <td align=center>0.000
- <td>
- <td align=center>-0.123 - 0.123
- <td>
- <td align=right>0
- <td>
- <td align=center>0.000
- <tr valign=top> <td align=center>0.067
- <td>
- <td align=center>0.063 - 0.125
- <td>
- <td align=right>1
- <td>
- <td align=center>0.067
- <td>
- <td align=center>0.123 - 0.299
- <td>
- <td align=right>1
- <td>
- <td align=center>0.247
- <tr valign=top> <td align=center>0.133
- <td>
- <td align=center>0.125 - 0.187
- <td>
- <td align=right>2
- <td>
- <td align=center>0.133
- <td>
- <td align=center>0.299 - 0.365
- <td>
- <td align=right>2
- <td>
- <td align=center>0.351
- <tr valign=top> <td align=center>0.200
- <td>
- <td align=center>0.188 - 0.250
- <td>
- <td align=right>3
- <td>
- <td align=center>0.200
- <td>
- <td align=center>0.365 - 0.392
- <td>
- <td align=right>3
- <td>
- <td align=center>0.379
- <tr valign=top> <td align=center>0.267
- <td>
- <td align=center>0.250 - 0.312
- <td>
- <td align=right>4
- <td>
- <td align=center>0.267
- <td>
- <td align=center>0.392 - 0.420
- <td>
- <td align=right>4
- <td>
- <td align=center>0.406
- <tr valign=top> <td align=center>0.333
- <td>
- <td align=center>0.313 - 0.375
- <td>
- <td align=right>5
- <td>
- <td align=center>0.333
- <td>
- <td align=center>0.420 - 0.447
- <td>
- <td align=right>5
- <td>
- <td align=center>0.433
- <tr valign=top> <td align=center>0.400
- <td>
- <td align=center>0.375 - 0.437
- <td>
- <td align=right>6
- <td>
- <td align=center>0.400
- <td>
- <td align=center>0.447 - 0.475
- <td>
- <td align=right>6
- <td>
- <td align=center>0.461
- <tr valign=top> <td align=center>0.467
- <td>
- <td align=center>0.438 - 0.500
- <td>
- <td align=right>7
- <td>
- <td align=center>0.467
- <td>
- <td align=center>0.475 - 0.502
- <td>
- <td align=right>7
- <td>
- <td align=center>0.488
- <tr valign=top> <td align=center>0.533
- <td>
- <td align=center>0.500 - 0.562
- <td>
- <td align=right>8
- <td>
- <td align=center>0.533
- <td>
- <td align=center>0.502 - 0.529
- <td>
- <td align=right>8
- <td>
- <td align=center>0.516
- <tr valign=top> <td align=center>0.600
- <td>
- <td align=center>0.563 - 0.625
- <td>
- <td align=right>9
- <td>
- <td align=center>0.600
- <td>
- <td align=center>0.529 - 0.557
- <td>
- <td align=right>9
- <td>
- <td align=center>0.543
- <tr valign=top> <td align=center>0.667
- <td>
- <td align=center>0.625 - 0.687
- <td>
- <td align=right>10
- <td>
- <td align=center>0.667
- <td>
- <td align=center>0.557 - 0.584
- <td>
- <td align=right>10
- <td>
- <td align=center>0.571
- <tr valign=top> <td align=center>0.733
- <td>
- <td align=center>0.688 - 0.750
- <td>
- <td align=right>11
- <td>
- <td align=center>0.733
- <td>
- <td align=center>0.584 - 0.612
- <td>
- <td align=right>11
- <td>
- <td align=center>0.598
- <tr valign=top> <td align=center>0.800
- <td>
- <td align=center>0.750 - 0.812
- <td>
- <td align=right>12
- <td>
- <td align=center>0.800
- <td>
- <td align=center>0.612 - 0.639
- <td>
- <td align=right>12
- <td>
- <td align=center>0.626
- <tr valign=top> <td align=center>0.867
- <td>
- <td align=center>0.813 - 0.875
- <td>
- <td align=right>13
- <td>
- <td align=center>0.867
- <td>
- <td align=center>0.639 - 0.715
- <td>
- <td align=right>13
- <td>
- <td align=center>0.653
- <tr valign=top> <td align=center>0.933
- <td>
- <td align=center>0.875 - 0.937
- <td>
- <td align=right>14
- <td>
- <td align=center>0.933
- <td>
- <td align=center>0.715 - 0.889
- <td>
- <td align=right>14
- <td>
- <td align=center>0.778
- <tr valign=top> <td align=center>1.000
- <td>
- <td align=center>0.938 - 1.000
- <td>
- <td align=right>15
- <td>
- <td align=center>1.000
- <td>
- <td align=center>0.889 - 1.111
- <td>
- <td align=right>15
- <td>
- <td align=center>1.000
- </table></blockquote>
- <p>
- The difference between cyan and magenta is the presence of a coding array.
- The coding process must map a range of color values to each of the sixteen
- component indices. If no coding array is given, this is accomplished
- by dividing by 4096, equivalent to a right shift by 12 bits. The
- final ink density resides in the given interval and moves from the left to
- the right side from 0 to 15. For magenta there is a coding array
- and the ink value matches the center of the intervals. But the distribution
- of the mapped intervals follows the given coding array and is nonlinear in
- the linear color space of Ghostscript.
- <p>
- Now let us take a look at the case with transfer arrays:
- <blockquote><table cellpadding=0 cellspacing=0>
- <tr> <td>
- <td>
- <th colspan=5>Yellow<hr>
- <td>
- <th colspan=5>Black<hr>
- <tr valign=top> <th>CI/15
- <td>
- <th>gs_color_values
- <td>
- <th>CI
- <td>
- <th>Ink
- <td>
- <th>gs_color_values
- <td>
- <th>CI
- <td>
- <th>Ink
- <tr> <td colspan=13><hr>
- <tr valign=top> <td align=center>0.000
- <td>
- <td align=center>0.000 - 0.062
- <td>
- <td align=right>0
- <td>
- <td align=center>0.000
- <td>
- <td align=center>-0.123 - 0.123
- <td>
- <td align=right>0
- <td>
- <td align=center>0.000
- <tr valign=top> <td align=center>0.067
- <td>
- <td align=center>0.063 - 0.125
- <td>
- <td align=right>1
- <td>
- <td align=center>0.018
- <td>
- <td align=center>0.123 - 0.299
- <td>
- <td align=right>1
- <td>
- <td align=center>0.067
- <tr valign=top> <td align=center>0.133
- <td>
- <td align=center>0.125 - 0.187
- <td>
- <td align=right>2
- <td>
- <td align=center>0.036
- <td>
- <td align=center>0.299 - 0.365
- <td>
- <td align=right>2
- <td>
- <td align=center>0.133
- <tr valign=top> <td align=center>0.200
- <td>
- <td align=center>0.188 - 0.250
- <td>
- <td align=right>3
- <td>
- <td align=center>0.054
- <td>
- <td align=center>0.365 - 0.392
- <td>
- <td align=right>3
- <td>
- <td align=center>0.200
- <tr valign=top> <td align=center>0.267
- <td>
- <td align=center>0.250 - 0.312
- <td>
- <td align=right>4
- <td>
- <td align=center>0.072
- <td>
- <td align=center>0.392 - 0.420
- <td>
- <td align=right>4
- <td>
- <td align=center>0.267
- <tr valign=top> <td align=center>0.333
- <td>
- <td align=center>0.313 - 0.375
- <td>
- <td align=right>5
- <td>
- <td align=center>0.090
- <td>
- <td align=center>0.420 - 0.447
- <td>
- <td align=right>5
- <td>
- <td align=center>0.333
- <tr valign=top> <td align=center>0.400
- <td>
- <td align=center>0.375 - 0.437
- <td>
- <td align=right>6
- <td>
- <td align=center>0.252
- <td>
- <td align=center>0.447 - 0.475
- <td>
- <td align=right>6
- <td>
- <td align=center>0.400
- <tr valign=top> <td align=center>0.467
- <td>
- <td align=center>0.438 - 0.500
- <td>
- <td align=right>7
- <td>
- <td align=center>0.414
- <td>
- <td align=center>0.475 - 0.502
- <td>
- <td align=right>7
- <td>
- <td align=center>0.467
- <tr valign=top> <td align=center>0.533
- <td>
- <td align=center>0.500 - 0.562
- <td>
- <td align=right>8
- <td>
- <td align=center>0.576
- <td>
- <td align=center>0.502 - 0.529
- <td>
- <td align=right>8
- <td>
- <td align=center>0.533
- <tr valign=top> <td align=center>0.600
- <td>
- <td align=center>0.563 - 0.625
- <td>
- <td align=right>9
- <td>
- <td align=center>0.738
- <td>
- <td align=center>0.529 - 0.557
- <td>
- <td align=right>9
- <td>
- <td align=center>0.600
- <tr valign=top> <td align=center>0.667
- <td>
- <td align=center>0.625 - 0.687
- <td>
- <td align=right>10
- <td>
- <td align=center>0.900
- <td>
- <td align=center>0.557 - 0.584
- <td>
- <td align=right>10
- <td>
- <td align=center>0.667
- <tr valign=top> <td align=center>0.733
- <td>
- <td align=center>0.688 - 0.750
- <td>
- <td align=right>11
- <td>
- <td align=center>0.920
- <td>
- <td align=center>0.584 - 0.612
- <td>
- <td align=right>11
- <td>
- <td align=center>0.733
- <tr valign=top> <td align=center>0.800
- <td>
- <td align=center>0.750 - 0.812
- <td>
- <td align=right>12
- <td>
- <td align=center>0.940
- <td>
- <td align=center>0.612 - 0.639
- <td>
- <td align=right>12
- <td>
- <td align=center>0.800
- <tr valign=top> <td align=center>0.867
- <td>
- <td align=center>0.813 - 0.875
- <td>
- <td align=right>13
- <td>
- <td align=center>0.960
- <td>
- <td align=center>0.639 - 0.715
- <td>
- <td align=right>13
- <td>
- <td align=center>0.867
- <tr valign=top> <td align=center>0.933
- <td>
- <td align=center>0.875 - 0.937
- <td>
- <td align=right>14
- <td>
- <td align=center>0.980
- <td>
- <td align=center>0.715 - 0.889
- <td>
- <td align=right>14
- <td>
- <td align=center>0.933
- <tr valign=top> <td align=center>1.000
- <td>
- <td align=center>0.938 - 1.000
- <td>
- <td align=right>15
- <td>
- <td align=center>1.000
- <td>
- <td align=center>0.889 - 1.111
- <td>
- <td align=right>15
- <td>
- <td align=center>1.000
- </table></blockquote>
- <p>
- Yellow uses a transfer array. There is no linear correspondence between
- the color and the ink values: this correspondence is defined through the
- given array. In other words, the transfer arrays define a nonlinear ink
- characteristic, which is exactly the same functionality that PostScript's
- "(color)transfer" function provides.
- <p>
- While for yellow the intervals match the intervals used with cyan, for
- black the intervals match the magenta intervals. But watch the
- correspondence between the CI/15 values and the ink density for black: this
- is a linear distribution in the ink domain.
- <p>
- Not a bad idea, I think. Consider the <b><tt>fs2</tt></b> algorithm: it
- uses values in the range 0 to 255. If any transfer array were alone, some
- of the 256 possible values would never be used and others would be used for
- adjacent intervals several times. Establishing an identical coding array
- solves this problem, so the full potential of the algorithm is used.
- <p>
- Another useful feature of the coding arrays is that they are internally
- normalized to the range 0-1. In 720x720dpi mode the transfer arrays in
- <b><tt>stcolor.ps</tt></b> limit the dot density to about 50%, so these
- arrays end at 0.5 (and begin at 0.5 for RGB). Because of automatic
- normalization, these arrays can also be used as coding arrays. But of
- course in the <b><tt>fs2</tt></b> case mentioned above, values from 0 to
- 127 will never be delivered to the algorithm, while values 128-255 are
- delivered for adjacent intervals.
- <p>
- To clarify the intended use of the three parameters (parameter groups), keep this in mind:
- <blockquote><ul>
- <li><b><tt>ColorAdjustMatrix</tt></b> is never used when transferring gray
- values. This restricts it to what the name says: adjustment of colors,
- that is, correction for miscolored ink. Do not use it for saturation or
- brightness control.
- <li><b><tt>?transfer</tt></b> arrays control the values delivered to the
- driver, which in turn controls the ink quantity. Use these arrays to
- control saturation and brightness. In general these arrays are identical
- for all inks. If they differ they provide a simpler scheme for color
- correction, which is not necessarily faster than the
- <b><tt>ColorAdjustMatrix</tt></b>.
- <li><b><tt>?coding</tt></b> arrays control the color value intervals mapped
- to the internal color indices.
- </ul></blockquote>
- <h3><a name="What_is_weaving"></a>What is weaving?</h3>
- <p>
- The Epson Stylus Color has a head assembly that contains two physically
- identifiable heads, one for black and one for cyan, magenta, and yellow
- (CMY). This makes four "logical" heads, one for each color component.
- Each of these four heads has several jets at some vertical (Y) distance
- from one another, so several horizontal lines can be printed of a given
- color during one pass of the heads. From experience I think there are
- fifteen jets per color, spaced at 1/90in.
- <p>
- So the question arises of how to print at a Y resolution of 360dpi with
- 90dpi jets. Simply by division one gets 360dpi/90dpi = 4, which tells us
- that 4 passes of the head assembly are needed to achieve a Y resolution of
- 360dpi.
- <p>
- Weaving is the method of how the fifteen jets are used to print adjacent
- horizontal rows separated here by 1/360 inch:
- <blockquote><table cellpadding=0 cellspacing=0>
- <tr><th colspan=17 bgcolor="#CCCC00"><hr><font size="+1">Print-head jets used with and without weaving</font><hr>
- <tr> <td>
- <td>
- <th valign=bottom colspan=7>Weaving<hr>
- <td>
- <th valign=bottom colspan=7>noWeave<hr>
- <tr valign=top> <td>
- <th>Pass
- <th>1
- <td>
- <th>2
- <td>
- <th>3
- <td>
- <th>4
- <td>
- <th>1
- <td>
- <th>2
- <td>
- <th>3
- <td>
- <th>4
- <tr> <th>Row
- <tr valign=top> <td align=center>0
- <td>
- <td align=center>jet 0
- <td>
- <td align=center>--
- <td>
- <td align=center>--
- <td>
- <td align=center>--
- <td>
- <td align=center>jet 0
- <td>
- <td align=center>--
- <td>
- <td align=center>--
- <td>
- <td align=center>--
- <tr valign=top> <td align=center>1
- <td>
- <td align=center>--
- <td>
- <td align=center>jet 1
- <td>
- <td align=center>--
- <td>
- <td align=center>--
- <td>
- <td align=center>--
- <td>
- <td align=center>jet 0
- <td>
- <td align=center>--
- <td>
- <td align=center>--
- <tr valign=top> <td align=center>2
- <td>
- <td align=center>--
- <td>
- <td align=center>--
- <td>
- <td align=center>jet 2
- <td>
- <td align=center>--
- <td>
- <td align=center>--
- <td>
- <td align=center>--
- <td>
- <td align=center>jet 0
- <td>
- <td align=center>--
- <tr valign=top> <td align=center>3
- <td>
- <td align=center>--
- <td>
- <td align=center>--
- <td>
- <td align=center>--
- <td>
- <td align=center>jet 3
- <td>
- <td align=center>--
- <td>
- <td align=center>--
- <td>
- <td align=center>--
- <td>
- <td align=center>jet 0
- <tr valign=top> <td align=center>4
- <td>
- <td align=center>jet 1
- <td>
- <td align=center>--
- <td>
- <td align=center>--
- <td>
- <td align=center>--
- <td>
- <td align=center>jet 1
- <td>
- <td align=center>--
- <td>
- <td align=center>--
- <td>
- <td align=center>--
- <tr valign=top> <td align=center>5
- <td>
- <td align=center>--
- <td>
- <td align=center>jet 2
- <td>
- <td align=center>--
- <td>
- <td align=center>--
- <td>
- <td align=center>--
- <td>
- <td align=center>jet 1
- <td>
- <td align=center>--
- <td>
- <td align=center>--
- <tr valign=top> <td align=center>6
- <td>
- <td align=center>--
- <td>
- <td align=center>--
- <td>
- <td align=center>jet 3
- <td>
- <td align=center>--
- <td>
- <td align=center>--
- <td>
- <td align=center>--
- <td>
- <td align=center>jet 1
- <td>
- <td align=center>--
- <tr valign=top> <th>...
- </table></blockquote>
- <p>
- Now let's assume that the dot diameter is different for each individual
- jet, but the average among the jets matches the desired resolution. With
- weaving, adjacent rows are printed by different jets, thus some averaging
- takes place. Without weaving, adjacent rows are printed by the same jet
- and this makes the dot diameter deviations visible as 1/90in stripes on
- the paper.
- <h3><a name="STC_print_modes"></a>Print mode parameters</h3>
- <p>
- The parameters "<b><tt>Unidirectional</tt></b>",
- "<b><tt>Microweave</tt></b>", "<b><tt>noWeave</tt></b>",
- "<b><tt>OutputCode</tt></b>", "<b><tt>Model</tt></b>" and the given
- resolution control the data generated for the printer.
- <h4><a name="STC_unidirectional"></a><b><tt>Unidirectional</tt></b></h4>
- <p>
- Simply toggles the unidirectional mode of the printer. Setting
- "<b><tt>Unidirectional</tt></b>" definitely slows printing speed, but may
- improve the quality. I use this for printing transparencies, where fast
- head movement could smear the ink.
- <h4><a name="STC_noweave"></a><b><tt>Microweave</tt></b>,
- <b><tt>noWeave</tt></b> and <b><tt>OutputCode=deltarow</tt></b></h4>
- <p>
- The first are two booleans, which implies that four combinations are
- possible. Actually only three exist (if you don't count for
- <b><tt>deltarow</tt></b>): <b><tt>Softweave</tt></b>,
- <b><tt>Microweave</tt></b>, and <b><tt>noWeave</tt></b>. The first and
- second are functionally identical, the difference being whether the driver
- or the printer does the job.
- <p>
- In the default <b><tt>Softweave</tt></b> mode the driver sends the data
- properly arranged to the printer, while in <b><tt>Microweave</tt></b> mode,
- it is the printer that arranges the data. But in general the host processor
- is much faster than the printer's processor, and thus it is faster for the
- host do the job. In addition to that, for 720dpi eight passes are
- required, and the amount of buffer space needed to buffer the data for the
- passes is far beyond the printer's memory. <b><tt>Softweave</tt></b>
- requires an odd value of "<b><tt>escp_Band</tt></b>"; the Stylus Color
- provides fifteen for that.
- <p>
- "<b><tt>OutputCode</tt></b>" controls the encoding used. In the basic
- modes, the choice consists of "plain" and "runlength". The computation of
- runlength-encoded data does not take much time, less than the data tranfer
- to the printer; thus this is the recommended mode, and of course the
- default. With the Stylus Color, Epson introduced some new encoding
- principles, namely "tiff" and "deltarow". While the first was omitted from
- this driver for lack of apparent advantages, "<b><tt>deltarow</tt></b>" is
- available as an option. "<b><tt>Softweave</tt></b>" cannot be used with
- this encoding, so if <b><tt>OutputCode=deltarow</tt></b> is set,
- <b><tt>Microweave</tt></b> becomes the default. Maybe that the size of the
- ESC/P2 code becomes smaller, but I have never observed faster printing
- speed. Things tend to become slower with <b><tt>deltarow</tt></b> compared
- to <b><tt>Softweave</tt></b>.
- <h4><a name="STC_model"></a><b><tt>Model</tt></b></h4>
- <p>
- Some ESC/P2 printers such as the Stylus 800 do not offer
- <b><tt>Microweave</tt></b> or the commands required to do
- <b><tt>Softweave</tt></b>. Setting <b><tt>Model</tt></b> just changes the
- defaults and omits some parts of the initialization sequence which are not
- compatible with the given printer model. Currently only
- "<b><tt>st800</tt></b>" is supported besides the default
- <b><tt>stcolor</tt></b>.
- <h3><a name="STC_Pitfalls"></a>Bugs and pitfalls</h3>
- <ul>
- <li>The given <b><tt>?coding</tt></b> and <b><tt>?transfer</tt></b> arrays
- should be strictly monotonic.
- <li>It is impossible to change <b><tt>WHITE</tt></b>: that's your paper.
- Thus RGB transfer should end at 1.0 and CMYK transfer should start at 0.0.
- <li>Usually 8 bits per component yields fastest operation.
- <li>The <b><tt>ColorAdjustMatrix</tt></b> is not used in the reverse
- transformation used when Ghostscript does the dithering
- (<b><tt>gs</tt></b>* modes). Expect funny results.
- <li>If <b><tt>BitsPerPixel</tt></b> is less than 6, the entire coding and
- transfer process does not work. This is always true for the
- <b><tt>gs</tt></b>* modes and becomes true for the other modes if
- <b><tt>BitsPerPixel</tt></b> is forced to low values.
- <li>720×720dpi printing should never select the <b><tt>gs</tt></b>*
- modes and should always use <b><tt>stcolor.ps</tt></b>. (I prefer
- 360×720.)
- </ul>
- <h3><a name="STC_Tests"></a>Tests</h3>
- <p>
- This section gives an overview of performance in terms of processing and
- printing times, from tests run after version 1.13. Printing was done
- offline (simply copying a processed file to the printer) to measure real
- printing speed without regard to speed of processing on the host, since at
- high resolutions, processing time is the same order of magnitude and thus
- may become the limiting factor.
- <h4><a name="STC_OutputCodes"></a>The various OutputCodes</h4>
- <p>
- I ran several files though Ghostscript and recorded the size of the
- resulting print code, the processing time, and the printing time, at least
- for some of the files, always using these options:
- <blockquote><b><tt>
- gs -sDEVICE=stcolor -sPAPERSIZE=a4 stcolor.ps - < file.ps
- </tt></b></blockquote>
- <p>
- (Actually "<b><tt>-sPAPERSIZE=a4</tt></b>" is in my
- <b><tt>gs_init.ps</tt></b> since I'm a germ.)
- <p>"<b><tt>deltarow</tt></b>" is the new encoding principle
- ("<b><tt>ESC . 3 10 10 1</tt></b>") with
- <b><tt>Microweave</tt></b> on. It is activated with
- "<b><tt>-sOutputCode=deltarow</tt></b>".
- <p>"<b><tt>Softweave</tt></b>" actually means that nothing else was used:
- it is the default, and implies that odd v=40/h=10/m=15 mode
- ("<b><tt>ESC . 1 40 10 15</tt></b>").
- <p>"<b><tt>Microweave</tt></b>" means "<b><tt>-dMicroweave</tt></b>",
- equivalent to "<b><tt>ESC . 1 10 10 1</tt></b>",
- with full skip optimization and microweave activated.
- <p>
- Finally I wanted to see the plain Kathy Ireland, and used
- "<b><tt>-sOutputCode=plain</tt></b>", which just replaces runlength
- encoding (RLE) by no encoding, thus using
- "<b><tt>ESC . 0 40 10 15</tt></b>". [So sorry
- <b><tt>;-)</tt></b> Kathy was still dressed in blue in front of the blue
- sea on a blue air cushion -- nice to see but hard to dither.]
- <p>
- So here are the results.
- <blockquote><table cellpadding=0 cellspacing=0>
- <tr><th colspan=9 bgcolor="#CCCC00"><hr><font size="+1">File sizes and printing speeds with various weaving methods</font><hr>
- <tr valign=bottom>
- <td>
- <td>
- <th><b><tt>golfer.ps</tt></b>
- <td>
- <th><b><tt>colorcir.ps</tt></b>
- <td>
- <th><b><tt>drawing.ps</tt></b>
- <td>
- <th><b><tt>brief.ps</tt></b>
- <tr> <td colspan=9><hr>
- <tr valign=top> <td><b><tt>deltarow</tt></b>
- <td>
- <td>572751/48.180u
- <td>
- <td>643374/41.690u
- <td>
- <td>90142/46.180u/1:50
- <td>
- <td>178563/49.350u/2:22
- <tr valign=top> <td><b><tt>Softweave</tt></b>
- <td>
- <td>559593/46.810u
- <td>
- <td>669966/44.960u
- <td>
- <td>296168/48.160u/1:30
- <td>
- <td>269808/43.320u/1:55
- <tr valign=top> <td><b><tt>Microweave</tt></b>
- <td>
- <td>590999/56.060u
- <td>
- <td>754276/42.890u
- <td>
- <td>338885/47.060u/1:50
- <td>
- <td>282314/44.690u/2:22
- </table></blockquote>
- <blockquote><table cellpadding=0 cellspacing=0>
- <tr><th colspan=3 bgcolor="#CCCC00"><hr><font size="+1">Kathy Ireland</font><hr>
- <tr valign=bottom>
- <td>
- <td>
- <th><b><tt>kathy.ps</tt></b>
- <tr> <td colspan=3><hr>
- <tr valign=top> <td><b><tt>deltarow</tt></b>
- <td>
- <td>3975334/111.940u/5:35
- <tr valign=top> <td><b><tt>Softweave</tt></b>
- <td>
- <td>3897112/101.940u/3:10
- <tr valign=top> <td><b><tt>Microweave</tt></b>
- <td>
- <td>4062829/100.990u/3:15
- <tr valign=top> <td><b><tt>plain/soft</tt></b>
- <td>
- <td>5072255/104.390u/3:05
- </table></blockquote>
- <p>
- It may be that I've not chosen the optimal <b><tt>deltarow</tt></b> code,
- but even if it saves at lot of bytes, printing-speed is not increased.
- <p>
- At least the printer prefers plain Kathy. In other words, sending 1
- Megabyte or 20% more data has no impact on printing speed.
- <b><tt>drawing.ps</tt></b> is an exception to this rule: plain prints
- slower than RLE.
- <p>
- "Unclever" coding -- especially with <b><tt>deltarow</tt></b> -- can
- significantly slow down printing. But even if very significant advantages
- in the size of the code are achieved, "<b><tt>deltarow</tt></b>" is not
- competitive. <b><tt>colorcir.ps</tt></b> shows savings with
- <b><tt>deltarow</tt></b>, but printing is a mess.
- <h4><a name="STC_printing_time"></a>Printing time related to other options</h4>
- <p>
- Full page halftone images printed, unless otherwise noted.
- <blockquote><table cellpadding=0 cellspacing=0>
- <tr><th colspan=11 bgcolor="#CCCC00"><hr><font size="+1">Printing time related to other options</font><hr>
- <tr valign=top> <th>dpi
- <td>
- <th colspan=3>Print mode
- <td>
- <th>Size KB
- <td>
- <th>Time
- <td>
- <th align=left>Comments
- <tr> <td colspan=11><hr>
- <tr valign=top> <td>180x180
- <td>
- <td>mono
- <td>
- <td align=right>-/uni
- <td>
- <td align=right>358
- <td>
- <td align=right>1:15
- <td>
- <td>
- <tr valign=top> <td>
- <td>
- <td align=right>
- <td>
- <td align=right>-/bi
- <td>
- <td align=right>358
- <td>
- <td align=right>0:45
- <td>
- <td>
- <tr valign=top> <td>
- <td>
- <td align=right>
- <td>
- <td align=right>micro/bi
- <td>
- <td align=right>205
- <td>
- <td align=right>0:45
- <td>
- <td>Not weaving
- <tr valign=top> <td>
- <td>
- <td align=right>
- <td>
- <td align=right>soft/bi
- <td>
- <td align=right>179
- <td>
- <td align=right>1:25
- <td>
- <td>
- <tr valign=top> <td>
- <td>
- <td>color
- <td>
- <td align=right>-/bi
- <td>
- <td align=right>641
- <td>
- <td align=right>2:45
- <td>
- <td>
- <tr valign=top> <td>
- <td>
- <td align=right>
- <td>
- <td align=right>soft/bi
- <td>
- <td align=right>556
- <td>
- <td align=right>1:32
- <td>
- <td>
- <tr valign=top> <td>360x360
- <td>
- <td>mono
- <td>
- <td align=right>-/uni
- <td>
- <td align=right>269
- <td>
- <td align=right>0:50
- <td>
- <td>Monochrome text
- <tr valign=top> <td>
- <td>
- <td align=right>
- <td>
- <td align=right>-/bi
- <td>
- <td align=right>269
- <td>
- <td align=right>0:35
- <td>
- <td>Monochrome text
- <tr valign=top> <td>
- <td>
- <td align=right>
- <td>
- <td align=right>micro/bi
- <td>
- <td align=right>269
- <td>
- <td align=right>2:25
- <td>
- <td>Monochrome text
- <tr valign=top> <td>
- <td>
- <td align=right>
- <td>
- <td align=right>soft/uni
- <td>
- <td align=right>250
- <td>
- <td align=right>3:15
- <td>
- <td>Monochrome text
- <tr valign=top> <td>
- <td>
- <td align=right>
- <td>
- <td align=right>soft/bi
- <td>
- <td align=right>250
- <td>
- <td align=right>1:55
- <td>
- <td>Monochrome text
- <tr valign=top> <td>
- <td>
- <td>color
- <td>
- <td align=right>-/bi
- <td>
- <td align=right>346
- <td>
- <td align=right>1:00
- <td>
- <td>Sparse-color page, visible displacements
- <tr valign=top> <td>
- <td>
- <td align=right>
- <td>
- <td align=right>micro/bi
- <td>
- <td align=right>346
- <td>
- <td align=right>1:50
- <td>
- <td>Sparse-color page, looks buggy -- printer?
- <tr valign=top> <td>
- <td>
- <td align=right>
- <td>
- <td align=right>soft/bi
- <td>
- <td align=right>294
- <td>
- <td align=right>1:30
- <td>
- <td>Sparse-color page, O.K.
- <tr valign=top> <td>
- <td>
- <td align=right>
- <td>
- <td align=right>-/bi
- <td>
- <td align=right>2218
- <td>
- <td align=right>2:45
- <td>
- <td>Visible stripes
- <tr valign=top> <td>
- <td>
- <td align=right>
- <td>
- <td align=right>micro/bi
- <td>
- <td align=right>5171
- <td>
- <td align=right>3:17
- <td>
- <td>
- <tr valign=top> <td>
- <td>
- <td align=right>
- <td>
- <td align=right>soft/bi
- <td>
- <td align=right>3675
- <td>
- <td align=right>3:05
- <td>
- <td>
- <tr valign=top> <td>360x720
- <td>
- <td>mono
- <td>
- <td align=right>soft/bi
- <td>
- <td align=right>2761
- <td>
- <td align=right>5:40
- <td>
- <td>
- <tr valign=top> <td>
- <td>
- <td>color
- <td>
- <td align=right>soft/bi
- <td>
- <td align=right>7789
- <td>
- <td align=right>6:15
- <td>
- <td>Just a small difference!
- <tr valign=top> <td>720x360
- <td>
- <td>color
- <td>
- <td align=right>soft/bi
- <td>
- <td align=right>7182
- <td>
- <td align=right>5:40
- <td>
- <td>
- <tr valign=top> <td>720x720
- <td>
- <td>color
- <td>
- <td align=right>micro/bi
- <td>
- <td align=right>14748
- <td>
- <td align=right>30:26
- <td>
- <td>Actually beyond printer's capabilities
- <tr valign=top> <td>
- <td>
- <td align=right>
- <td>
- <td align=right>soft/bi
- <td>
- <td align=right>14407
- <td>
- <td align=right>11:08
- <td>
- <td>
- </table></blockquote>
- <h3><a name="STC_acks"></a>Acknowledgments</h3>
- <p>
- This driver was copied from <b><tt>gdevcdj.c</tt></b> (Ghostscript 3.12),
- which was contributed by George Cameron, Koert Zeilstra, and Eckhard
- Rueggeberg. Some of the ESC/P2 code was drawn from Richard Brown's
- <b><tt>gdevescp.c</tt></b>. The POSIX interrupt code (compilation option
- <b><tt>-DSTC_SIGNAL</tt></b>) is from Frederic Loyer. Several improvements
- are based on discussions with Brian Converse, Bill Davidson, Gero Guenther,
- Jason Patterson, ? Rueschstroer, and Steven Singer.
- <p>
- While I wish to thank everyone mentioned above, they are by no means
- responsible for bugs in the stcolor driver -- just for the features.
- <address>
- Gunther Hess<br>
- Richard Wagner Strasse 112<br>
- D-47057 Duisburg<br>
- Germany<br>
- +49 203 376273 telephone (MET evening hours)<br>
- <<a href="mailto:ghess@elmos.de">ghess@elmos.de</a>>
- </address>
- <hr>
- <h2><a name="Uniprint"></a>uniprint, a flexible unified printer driver</h2>
- <p>
- <b><tt>uniprint</tt></b> is a unified parametric driver by Gunther Hess
- <<a href="mailto:ghess@elmos.de">ghess@elmos.de</a>> for several
- kinds of printers and devices, including
- <blockquote>
- <ul>
- <li>any Epson Stylus Color, Stylus, or Stylus Pro
- <li>HP PCL/RTL
- <li>Canon BubbleJet Color 610
- <li>NEC P2X
- <li>Sun raster file format
- </ul></blockquote>
- <p>
- This driver is intended to <em>become</em> a unified printer driver. If you
- consider it ugly, please send me your suggestions for improvements. The
- driver will be updated with them. Thus the full explanation of the driver's
- name is:
- <blockquote>
- Ugly- -> Updated- -> Unified Printer Driver
- </blockquote>
- <p>
- But you probably want to know something about the functionality.
- At the time of this writing uniprint drives:
- <ul>
- <li>NEC Pinwriter P2X (24-pin monochrome impact printer, ESC/P style)
- <li>Several Epson Stylus Color models (ESC/P2 style)
- <li>HP-DeskJet 550c (basic HP-RTL)
- <li>Canon BJC 610
- </ul>
- <p>
- It can be configured for various other printers without recompilation
- and offers uncompressed (ugly) Sun rasterfiles as another format, but
- this format is intended for testing purposes rather than real use.
- The usage of this driver is quite simple. The typical command line looks
- like this:
- <blockquote>
- <b><tt>gs @</tt></b>{MODEL}<b><tt>.upp -sOutputFile=</tt></b>{printable file}<b><tt> MyFile.ps -c quit</tt></b>
- </blockquote>
- <p>
- For example, from my Linux box:
- <blockquote><b><tt>
- gs @stc.upp -sOutputFile=/dev/lp1 tiger.ps -c quit
- </tt></b></blockquote>
- <blockquote><table cellpadding=0 cellspacing=0>
- <tr><th colspan=6 bgcolor="#CCCC00"><hr><font size="+1">Unified Printer Parameter files distributed with Ghostscript</font><hr>
- <tr> <th align=left colspan=6>Canon BJC 610 (color, rendered)
- <tr valign=top> <td>
- <td><b><tt>bjc610a0.upp</tt></b>
- <td>
- <td>360×360dpi
- <td>
- <td>plain paper, high speed
- <tr valign=top> <td>
- <td><b><tt>bjc610a1.upp</tt></b>
- <td>
- <td>360×360dpi
- <td>
- <td>plain paper
- <tr valign=top> <td>
- <td><b><tt>bjc610a2.upp</tt></b>
- <td>
- <td>360×360dpi
- <td>
- <td>coated paper
- <tr valign=top> <td>
- <td><b><tt>bjc610a3.upp</tt></b>
- <td>
- <td>360×360dpi
- <td>
- <td>transparency film
- <tr valign=top> <td>
- <td><b><tt>bjc610a4.upp</tt></b>
- <td>
- <td>360×360dpi
- <td>
- <td>back print film
- <tr valign=top> <td>
- <td><b><tt>bjc610a5.upp</tt></b>
- <td>
- <td>360×360dpi
- <td>
- <td>fabric sheet
- <tr valign=top> <td>
- <td><b><tt>bjc610a6.upp</tt></b>
- <td>
- <td>360×360dpi
- <td>
- <td>glossy paper
- <tr valign=top> <td>
- <td><b><tt>bjc610a7.upp</tt></b>
- <td>
- <td>360×360dpi
- <td>
- <td>high gloss film
- <tr valign=top> <td>
- <td><b><tt>bjc610a8.upp</tt></b>
- <td>
- <td>360×360dpi
- <td>
- <td>high resolution paper
- <tr> <td>
- <tr valign=top> <td>
- <td><b><tt>bjc610b1.upp</tt></b>
- <td>
- <td>720×720dpi
- <td>
- <td>plain paper
- <tr valign=top> <td>
- <td><b><tt>bjc610b2.upp</tt></b>
- <td>
- <td>720×720dpi
- <td>
- <td>coated paper
- <tr valign=top> <td>
- <td><b><tt>bjc610b3.upp</tt></b>
- <td>
- <td>720×720dpi
- <td>
- <td>transparency film
- <tr valign=top> <td>
- <td><b><tt>bjc610b4.upp</tt></b>
- <td>
- <td>720×720dpi
- <td>
- <td>back print film
- <tr valign=top> <td>
- <td><b><tt>bjc610b6.upp</tt></b>
- <td>
- <td>720×720dpi
- <td>
- <td>glossy paper
- <tr valign=top> <td>
- <td><b><tt>bjc610b7.upp</tt></b>
- <td>
- <td>720×720dpi
- <td>
- <td>high-gloss paper
- <tr valign=top> <td>
- <td><b><tt>bjc610b8.upp</tt></b>
- <td>
- <td>720×720dpi
- <td>
- <td>high resolution paper
- <tr> <td>
- <tr> <th align=left colspan=6>HP Ink-Printers
- <tr valign=top> <td>
- <td><b><tt>cdj550.upp</tt></b>
- <td>
- <td>300×300dpi
- <td>
- <td>32-bit CMYK
- <tr valign=top> <td>
- <td><b><tt>cdj690.upp</tt></b>
- <td>
- <td>300×300dpi
- <td>
- <td>Normal mode
- <tr valign=top> <td>
- <td><b><tt>cdj690ec.upp</tt></b>
- <td>
- <td>300×300dpi
- <td>
- <td>Economy mode
- <tr valign=top> <td>
- <td><b><tt>dnj750c.upp</tt></b>
- <td>
- <td>300×300dpi
- <td>
- <td>Color -- also good for 450C
- <tr valign=top> <td>
- <td><b><tt>dnj750m.upp</tt></b>
- <td>
- <td>600×600dpi
- <td>
- <td>Monochrome
- <tr> <td>
- <tr> <th align=left colspan=6>NEC P2X
- <tr valign=top> <td>
- <td><b><tt>necp2x.upp</tt></b>
- <td>
- <td>360×360dpi
- <td>
- <td>8-bit (Floyd-Steinberg)
- <tr> <td>
- <tr> <th align=left colspan=6>Any Epson Stylus Color
- <tr valign=top> <td>
- <td><b><tt>stcany.upp</tt></b>
- <td>
- <td>360×360dpi
- <td>
- <td>4-bit, PostScript halftoning
- <tr valign=top> <td>
- <td><b><tt>stcany_h.upp</tt></b>
- <td>
- <td>720×720dpi
- <td>
- <td>4-bit, PostScript halftoning
- <tr> <td>
- <tr> <th align=left colspan=6>Original Epson Stylus and Stylus Pro Color
- <tr valign=top> <td>
- <td><b><tt>stc.upp</tt></b>
- <td>
- <td>360×360dpi
- <td>
- <td>32-bit CMYK, 15-pin
- <tr valign=top> <td>
- <td><b><tt>stc_l.upp</tt></b>
- <td>
- <td>360×360dpi
- <td>
- <td>4-bit, PostScript halftoning, weaved noWeave
- <tr valign=top> <td>
- <td><b><tt>stc_h.upp</tt></b>
- <td>
- <td>720×720dpi
- <td>
- <td>32-bit CMYK, 15-pin Weave
- <tr> <td>
- <tr> <th align=left colspan=6>Epson Stylus Color II
- <tr valign=top> <td>
- <td><b><tt>stc2.upp</tt></b>
- <td>
- <td>360×360dpi
- <td>
- <td>32-bit CMYK, 20-pin, Epson Stylus Color II(s)
- <tr valign=top> <td>
- <td><b><tt>stc2_h.upp</tt></b>
- <td>
- <td>720×720dpi
- <td>
- <td>32-bit CMYK, 20-pin, Epson Stylus Color II
- <tr valign=top> <td>
- <td><b><tt>stc2s_h.upp</tt></b>
- <td>
- <td>720×720dpi
- <td>
- <td>32-bit CMYK, 20-pin, Epson Stylus Color IIs
- <tr> <td>
- <tr> <th align=left colspan=6>Epson Stylus Color 200
- <tr valign=top> <td>
- <td><b><tt>stc200.upp</tt></b>
- <td>
- <td>360×720dpi
- <td>
- <td>Plain Paper
- <tr> <td>
- <tr> <th align=left colspan=6>Epson Stylus Color 300
- <tr valign=top> <td>
- <td><b><tt>stc300.upp</tt></b>
- <td>
- <td>360×360dpi
- <td>
- <td>32-bit CMYK, plain paper
- <tr valign=top> <td>
- <td><b><tt>stc300bl.upp</tt></b>
- <td>
- <td>180×180dpi
- <td>
- <td>black only, plain paper
- <tr valign=top> <td>
- <td><b><tt>stc300bm.upp</tt></b>
- <td>
- <td>360×360dpi
- <td>
- <td>black only, plain paper
- <tr> <td>
- <tr> <th align=left colspan=6>Epson Stylus Color 500 (good transfer curves for plain paper)
- <tr valign=top> <td>
- <td><b><tt>stc500p.upp</tt></b>
- <td>
- <td>360×360dpi
- <td>
- <td>32-bit CMYK, noWeave, plain paper
- <tr valign=top> <td>
- <td><b><tt>stc500ph.upp</tt></b>
- <td>
- <td>720×720dpi
- <td>
- <td>32-bit CMYK, noWeave, plain paper
- <tr> <td>
- <tr> <th align=left colspan=6>Epson Stylus Color 600, 32/90-inch weaving
- <tr valign=top> <td>
- <td><b><tt>stc600pl.upp</tt></b>
- <td>
- <td>360×360dpi
- <td>
- <td>32-bit CMYK, 32-pin, plain paper
- <tr valign=top> <td>
- <td><b><tt>stc600p.upp</tt></b>
- <td>
- <td>720×720dpi
- <td>
- <td>32-bit CMYK, 32-pin, plain paper
- <tr valign=top> <td>
- <td><b><tt>stc600ih.upp</tt></b>
- <td>
- <td>1440×720dpi
- <td>
- <td>32-bit CMYK, 30-pin, inkjet paper
- <tr> <td>
- <tr> <th align=left colspan=6>Epson Stylus Color 640
- <tr valign=top> <td>
- <td><b><tt>stc640p.upp</tt></b>
- <td>
- <td>720×720dpi
- <td>
- <td>plain paper?
- <tr valign=top> <td>
- <td><b><tt>st640p.upp</tt></b>
- <td>
- <td>720×720dpi
- <td>
- <td>CMYK, plain paper
- <tr valign=top> <td>
- <td><b><tt>st640pg.upp</tt></b>
- <td>
- <td>720×720dpi
- <td>
- <td>grayscale, plain paper
- <tr valign=top> <td>
- <td><b><tt>st640pl.upp</tt></b>
- <td>
- <td>360×360dpi
- <td>
- <td>CMYK, plain paper
- <tr valign=top> <td>
- <td><b><tt>st640plg.upp</tt></b>
- <td>
- <td>360×360dpi
- <td>
- <td>grayscale, plain paper
- <tr valign=top> <td>
- <td><b><tt>st640ih.upp</tt></b>
- <td>
- <td>1440×720dpi
- <td>
- <td>CMYK, inkjet paper
- <tr valign=top> <td>
- <td><b><tt>st640ihg.upp</tt></b>
- <td>
- <td>1440×720dpi
- <td>
- <td>grayscale, inkjet paper
- <tr> <td>
- <tr> <th align=left colspan=6>Epson Stylus Color 800, 64/180-inch weaving
- <tr valign=top> <td>
- <td><b><tt>stc800pl.upp</tt></b>
- <td>
- <td>360×360dpi
- <td>
- <td>32-bit CMYK, 64-pin, plain paper
- <tr valign=top> <td>
- <td><b><tt>stc800p.upp</tt></b>
- <td>
- <td>720×720dpi
- <td>
- <td>32-bit CMYK, 64-pin, plain paper
- <tr valign=top> <td>
- <td><b><tt>stc800ih.upp</tt></b>
- <td>
- <td>1440×720dpi
- <td>
- <td>32-bit CMYK, 62-pin, inkjet paper
- <tr valign=top> <td>
- <td><b><tt>stc1520.upp</tt></b>
- <td>
- <td>1440×720dpi
- <td>
- <td>32-bit CMYK, 62-pin, inkjet paper
- <tr> <td>
- <tr> <th align=left colspan=6>Sun raster file
- <tr valign=top> <td>
- <td><b><tt>ras1.upp</tt></b>
- <td>
- <td>1-bit
- <td>
- <td>monochrome (Ghostscript)
- <tr valign=top> <td>
- <td><b><tt>ras3.upp</tt></b>
- <td>
- <td>3-bit
- <td>
- <td>RGB (Ghostscript)
- <tr valign=top> <td>
- <td><b><tt>ras4.upp</tt></b>
- <td>
- <td>4-bit
- <td>
- <td>CMYK (Ghostscript)
- <tr valign=top> <td>
- <td><b><tt>ras8m.upp</tt></b>
- <td>
- <td>8-bit
- <td>
- <td>grayscale (Floyd-Steinberg)
- <tr valign=top> <td>
- <td><b><tt>ras24.upp</tt></b>
- <td>
- <td>24-bit
- <td>
- <td>RGB (Floyd-Steinberg)
- <tr valign=top> <td>
- <td><b><tt>ras32.upp</tt></b>
- <td>
- <td>32-bit
- <td>
- <td>CMYK (CMYK-Floyd-Steinberg)
- </table></blockquote>
- <p>
- Thanks to Danilo Beuche, Guido Classen, Mark Goldberg and Hans-Heinrich
- Viehmann for providing the files for the stc200, hp690, stc500 and the
- stc640. Thanks to Michael Lossin <losse@germanymail.com> for the
- newer st640 parameter sets.
- <p>
- Please note the following:
- <blockquote><ul>
- <li>Changing the resolution with Ghostscript's
- <a href="Use.htm#Resolution_switch"><b><tt>-r</tt></b> switch</a> is
- usually not possible.
- <li>For Epson Stylus Color models not listed above, the two
- <b><tt>stc500</tt></b> variants are likely to work in addition to
- <b><tt>stcany</tt></b>, but their gamma correction might be wrong.
- </ul></blockquote>
- <h3><a name="Uni_state"></a>The state of this driver</h3>
- <p>
- The coding of <b><tt>uniprint</tt></b> was triggered by the requirements of
- the various Stylus Color models and some personal needs for HP and NEC
- drivers. Thus the Epson models are well represented among the distributed
- parameter files. When this driver entered the beta test phase, three other
- drivers appreared on the scene that could be at least partially integrated
- into <b><tt>uniprint</tt></b>: <b><tt>cdj850</tt></b> by Uli Wortmann
- (available at <a href="http://www.erdw.ethz.ch/~bonk/hp850/hp850.html">http://www.erdw.ethz.ch/~bonk/hp850/hp850.html</a>),
- <b><tt>hpdj</tt></b> by Martin Lottermoser, and <b><tt>bjc610</tt></b> by
- Helmut Riegler.
- <p>
- Uli addresses features of the more recent DeskJet models that will not be
- available in <b><tt>uniprint</tt></b> soon. Martin taught me a lesson on
- HP-PCL3 headers that will be available in <b><tt>uniprint</tt></b>
- soon. Helmut in turn followed an almost similar idea, but targetted
- primarily for printing on Canon printers from the pbmplus library. Starting
- with version 1.68 of uniprint, BJC support is available. Work on the
- <b><tt>hpdj</tt></b> integration will start after the update of my website.
- <h3><a name="Uni_background"></a>Notes on <b><tt>uniprint</tt></b>'s background</h3>
- <p>
- <b><tt>uniprint</tt></b> is actually an update of <b><tt>stcolor</tt></b>,
- but much more versatile than its predecessor; <b><tt>stcolor</tt></b>, in
- its turn, started as a clone of the color DeskJet family of drivers
- (<b><tt>cdj</tt></b>*). Finally, <b><tt>cdj</tt></b>* can be considered an
- addition of features to the simpler monochrome drivers of Ghostscript. This
- addition of features is useful to get an idea of the functionality of
- <b><tt>uniprint</tt></b>:
- <blockquote>
- <dl>
- <dt>Monochrome to advanced color (<b><tt>cdj</tt></b>*):
- <dd>This adds color mapping and rendering functions to the driver.
- Error diffusion is especially important for the quality of printing.
- </dl>
- <dl>
- <dt>HP color to Epson Color (<b><tt>stcolor</tt></b>)
- <dd>The Epson Stylus Color offered two features simultaneously: it could
- produce 720×720dpi output and it could soak the paper. In other
- words, it required more color management features inside the driver. This
- is still the major conceptual difference in the data generation for HP and
- Epson printers.
- </dl>
- <dl>
- <dt>Weaving techniques (<b><tt>stcolor</tt></b>)
- <dd>Besides the internal color management, the Stylus Color did not provide
- enough buffer space to operate the printer fast at 720×720dpi. The
- use of weaving could yield triple the print speed. Weaving, also called
- interleaving, is present in some monochrome drivers too. The new thing in
- <b><tt>stcolor</tt></b> was the combination with error diffusion.
- Unfortunately the weaving was somehow hard-coded, as the problems with the
- newer members of the Stylus Color family of printers demonstrated.
- </dl>
- <dl>
- <dt>Generalized output format and weaving (<b><tt>uniprint</tt></b>)
- <dd>The features mentioned above yield about 90% of
- <b><tt>stcolor</tt></b>'s source code; only 10% is related to the
- formatting of the output. The idea to make the output format switchable
- came up soon after completing <b><tt>stcolor</tt></b>, but its final design
- was triggered by the (personal) necessity to drive a NEC P2X and a
- Designjet 750c.
- </dl></blockquote>
- <p>
- Thus <b><tt>uniprint</tt></b> accumulates almost any features that can be
- found among the other printer drivers, which clearly has some disadvantage
- in processing speed -- true in particular of version 1.75, since it was
- targetted for functionality, and several speed-gaining features were
- (knowingly) omitted.
- <p>
- To summarize and to introduce the terms used in the description of the
- parameters, the features of <b><tt>uniprint</tt></b> that can be
- parameterized are:
- <blockquote><ul>
- <li>color mapping,
- <li>color rendering (error diffusion or Floyd-Steinberg),
- <li>output format, including
- <li>weaving.
- </ul></blockquote>
- <h3><a name="Uni_make_pfile"></a>Godzilla's guide to the creation of Unified Printer Parameter (<b><tt>.upp</tt></b>) files</h3>
- <p>
- Here is one of the distributed parameter files (<b><tt>stc_l.upp</tt></b>)
- with some added comments. Also see the section that describes
- <a href="#Uni_all_parameters">all <b><tt>uniprint</tt></b>'s parameters in
- brief</a>.
- <pre>
- -supModel="Epson Stylus Color I (and PRO Series), 360x360DpI, noWeave"
- -sDEVICE=uniprint -- Select the driver
- -dNOPAUSE -- Useful with printers
- -dSAFER -- Provides some security
- -dupColorModel=/DeviceCMYK -- Selects the color mapping
- -dupRendering=/ErrorDiffusion -- Selects the color rendering
- -dupOutputFormat=/EscP2 -- Selects the output format
- -r360x360 -- Adjusts the resolution
- -dupMargins="{ 9.0 39.96 9.0 9.0}" -- Establishes (L/B/R/T margins in points)
- -dupComponentBits="{1 1 1 1}" -- Map: bits per component (default: 8)
- -dupWeaveYPasses=4 -- Weave: Y-passes (default: 1)
- -dupOutputPins=15 -- Format/weave: scans per Command
- -dupBeginPageCommand="< -- Goes to the printer
- 1b40 1b40 -- ESC '@' ESC '@' -> dual reset
- 1b2847 0100 01 -- ESC '(' 'G' 1 0 1 -> graphics
- 1b2869 0100 00 -- ESC '(' 'i' 1 0 1 -> no HW weave
- 1b2855 0100 0A -- ESC '(' 'U' 1 0 10 -> 360dpi
- 1b5500 -- ESC 'U' 0 -> bidir print
- 1b2843 0200 0000 -- ESC '(' 'C' 2 0 xx -> page length
- 1b2863 0400 0000 0000 -- ESC '(' 'c' 4 0 xxxx -> margins
- >" -- as it is, unless:
- -dupAdjustPageLengthCommand -- Adjust page length in BOP requested
- -dupAdjustTopMarginCommand -- Adjust top margin in BOP
- -dupAdjustBottomMarginCommand -- Adjust bottom margin in BOP
- -dupEndPageCommand="(\033@\014)" -- Last (but one) data to the printer
- -dupAbortCommand="(\033@\15\12\12\12\12 Printout-Aborted\15\014)"
- </pre>
- <p>
- That's short, and if one removes <b><tt>upWeaveYPasses</tt></b> and
- <b><tt>upOutputPins</tt></b> it becomes shorter, almost
- <b><tt>stcany.upp</tt></b>. This miniature size is because I am most
- familiar with ESC/P2, and was able to add defaults for the omitted
- parameters. Now a few notes about the parameters used in this example:
- <ul>
- <li><b><tt>upModel</tt></b> is a string serving as a comment (and nothing else).
- <li><a href="Use.htm#Output_device"><b><tt>DEVICE</tt></b></a>,
- <a href="Use.htm#NoPause"><b><tt>NOPAUSE</tt></b></a>, <a
- href="Use.htm#Safer"><b><tt>SAFER</tt></b></a> are well-known Ghostscript
- parameters described in the <a href="Use.htm">usage documentation</a>.
- <li><b><tt>upColorModel</tt></b> is one of major <b><tt>uniprint</tt></b>
- parameters: it selects the color mapping and in turn the PostScript color
- model. It supports the devices <b><tt>/DeviceGray</tt></b>, <b><tt>/DeviceRGBW</tt></b>, <b><tt>/DeviceRGB</tt></b>, <b><tt>/DeviceCMYK</tt></b>, and <b><tt>/DeviceCMYKgenerate</tt></b>.
- <li><b><tt>upRendering</tt></b> selects the (color) rendering, supporting
- the values <b><tt>/ErrorDiffusion</tt></b> and <b><tt>/FSCMYK32</tt></b>.
- <b><tt>/ErrorDiffusion</tt></b> is similar to <b><tt>fsmono</tt></b>,
- <b><tt>fsrgb</tt></b> and <b><tt>fsx4</tt></b> of <b><tt>stcolor</tt></b>,
- while <b><tt>/FSCMYK32</tt></b> is (almost) identical to
- <b><tt>fscmyk</tt></b> and <b><tt>hscmyk</tt></b>, but is restricted to
- 32-bit data and should be used in conjunction with
- <b><tt>/DeviceCMYKgenerate</tt></b>.
- <li><b><tt>upOutputFormat</tt></b> selects the output method, supporting the values
- <b><tt>/SunRaster</tt></b>, <b><tt>/Epson</tt></b>, <b><tt>/EscP2</tt></b>, <b><tt>/EscP2XY</tt></b>, and<b><tt>/Pcl</tt></b>.
- <blockquote><table cellpadding=0 cellspacing=0>
- <tr valign=top> <td><b><tt>/SunRaster</tt></b>
- <td>
- <td>creates Sun raster files and requires no other parameters
- <tr valign=top> <td><b><tt>/Epson</tt></b>
- <td>
- <td>is used for the elderly ESC/P format (used by many printers)
- <tr valign=top> <td><b><tt>/EscP2</tt></b>
- <td>
- <td>is used by more recent Epson printers (no X weaving supported)
- <tr valign=top> <td><b><tt>/EscP2XY</tt></b>
- <td>
- <td>supports X-Weaving, used with 1440dpi printers and in <b><tt>stc2s_h</tt></b>
- <tr valign=top> <td><b><tt>/Pcl</tt></b>
- <td>
- <td>HP PCL/RTL-style output formatter without weaving
- </table></blockquote>
- <li><b><tt>-r360x360</tt></b> is Ghostscript's standard
- <a href="Use.htm#Resolution_switch">resolution switch</a>.
- <li><b><tt>upMargins="{ 9.0 39.96 9.0 9.0}"</tt></b>
- has function similar to the Ghostscript parameter
- <b><tt>.HWMargins</tt></b>: it sets the left, bottom, right, and top
- margins in points. <b><tt>uniprint</tt></b> provides this parameter to
- enable automatic left-right exchange if <b><tt>upYFlip</tt></b> is active.
- <li><b><tt>upComponentBits</tt></b> is an array of integers that selects
- the bits stored in raster memory, by default 8 bits per component. In this
- example, 1 bit is selected for each component, thus turning down the
- Floyd-Steinberg algorithm (but still carrying out the time-consuming
- computation). The related parameter "<b><tt>upComponentShift</tt></b>"
- controls positioning the components within raster memory. Each of the
- numbers given corresponds to a component which depends on the selected
- "<b><tt>upColorModel</tt></b>":
- <blockquote><table cellpadding=0 cellspacing=0>
- <tr valign=top> <td align=center>
- <td>
- <td align=center><b><tt>/DeviceGray</tt></b>
- <td>
- <td align=center><b><tt>/DeviceRGBW</tt></b>
- <td>
- <td align=center><b><tt>/DeviceRGB</tt></b>
- <td>
- <td align=center><b><tt>/DeviceCMYK</tt></b>
- <td>
- <td align=center><b><tt>/DeviceCMYKgenerate</tt></b>
- <tr> <td colspan=11><hr>
- <tr valign=top> <td align=center>0
- <td>
- <td align=center>White
- <td>
- <td align=center>White
- <td>
- <td align=center>Red
- <td>
- <td align=center>Black
- <td>
- <td align=center>Black
- <tr valign=top> <td align=center>1
- <td>
- <td align=center>--
- <td>
- <td align=center>Red
- <td>
- <td align=center>Green
- <td>
- <td align=center>Cyan
- <td>
- <td align=center>Cyan
- <tr valign=top> <td align=center>2
- <td>
- <td align=center>--
- <td>
- <td align=center>Green
- <td>
- <td align=center>Blue
- <td>
- <td align=center>Magenta
- <td>
- <td align=center>Magenta
- <tr valign=top> <td align=center>3
- <td>
- <td align=center>--
- <td>
- <td align=center>Blue
- <td>
- <td align=center>--
- <td>
- <td align=center>Yellow
- <td>
- <td align=center>Yellow
- </table>
- <p>
- This order may not be suitable for some printers, so another parameter
- "<b><tt>upOutputComponentOrder</tt></b>", also an array of integers,
- selects the output order using the numbers on the left.
- </blockquote>
- <p>
- One group of very important parameters not used in the example above
- deserves to be mentioned here: the transfer arrays, named
- "<b><tt>up</tt><em>{color}</em><tt>Transfer</tt></b>", where
- <b><em>{color}</em></b> is one of the names in the table above. These are
- arrays of floats in the range 0.0 - 1.0 representing the color transfer
- functions. They are used during mapping and rendering. In the simplest
- case, these arrays ensure an equidistant distribution of the stored values
- within the device space (which means a nonlinear mapping from Ghostscript's
- point of view). If the given array does not cover the entire range from 0
- to 1, which applies for the Stylus Color family at high resolution for some
- media, only the relevant part gets mapped to raster memory (meaning that
- is's fully utilized) and the rendering takes care of the "overhang" (in
- this case the post-diffusion of 1-bit components makes sense).
- <p>
- Finally an important note on the transfer arrays: for monochrome devices
- the stored component is <b><tt>White</tt></b>, which is the way PostScript
- defines these devices, but most printers require <b><tt>Black</tt></b>.
- Thus one has to provide a falling "<b><tt>upWhiteTransfer</tt></b>" for
- such printers.
- <li><b><tt>upWeaveYPasses</tt></b> is an integer that gives the number of
- print head passes required to achieve the requested Ydpi. This makes sense
- only if
- <li><b><tt>upOutputPins</tt></b> is set to something greater than 1. Thus
- multiple pins or nozzles are transferred with a single command, and of
- course such a command must be supported by the device.
- </ul>
- <p>
- If no other weave parameters are given, <b><tt>uniprint</tt></b> computes
- several defaults which together do no weaving. The <b><tt>/Epson</tt></b>
- and <b><tt>/EscP2XY</tt></b> formats take care of
- "<b><tt>upWeaveXPasses</tt></b>" too.
- <ul>
- <li><b><tt>upBeginPageCommand</tt></b> represents the data transferred to
- the printer whenever a new page begins. Before that,
- "<b><tt>upBeginJobCommand</tt></b>" is written to the device only once per
- output file. (Intended for the HP PJL sequences).
- <li><b><tt>upAdjustBottomMarginCommand</tt></b>,
- <b><tt>upAdjustMediaSize</tt></b>,
- <b><tt>upAdjustPageLengthCommand</tt></b>,
- <b><tt>upAdjustPageWidthCommand</tt></b>,
- <b><tt>upAdjustResolutionCommand</tt></b>, and
- <b><tt>upAdjustTopMarginCommand</tt></b>
- <p>
- Normally <b><tt>uniprint</tt></b> does not change the
- "<b><tt>upBeginPageCommand</tt></b>", nor does it provide a default.
- However, if the above boolean values are set, the corresponding values are
- changed (provided that the code of the formatters supports this change and
- the commands to be adjusted are included in the BOP string).
- <li><b><tt>upEndPageCommand</tt></b> is the fixed termination sequence for
- each page, and of course there is an "<b><tt>upEndJobCommand</tt></b>" too.
- <li><b><tt>upAbortCommand</tt></b> is written if <b><tt>uniprint</tt></b>'s
- interrupt detection is enabled and a signal is caught. It replaces
- "<b><tt>upEndPageCommand</tt></b>" and "<b><tt>upEndJobCommand</tt></b>",
- thus allowing the indication of an aborted job. (Ghostscript gets an error
- return from <b><tt>uniprint</tt></b> in this case, and abandons further
- processing.)
- </ul>
- <p>
- For the ESC/P(2) formats all commands represent binary data, while for
- the PCL/RTL formatter some of them are formats for <b><tt>fprintf</tt></b>. These strings
- <b><em>must</em></b> explicitly have a trailing "\0'.
- <p>
- I should write more, but the only recommendation is to
- take a look at the various parameter files. Here are a few more hints.
- <ul>
- <li>If the Driver rejects a configuration, nothing happens until
- <b><tt>showpage</tt></b>; then an error is raised and a message with
- "CALL-REJECTED upd_print_page..." is printed on stderr.
- <li><b><tt>uniprint</tt></b> has lots of messages that can be activated by
- setting bits in the preprocessor macro <b><tt>UPD_MESSAGES</tt></b>. I
- usually use the compile-time option <b><tt>-DUPD_MESSAGES=0x17</tt></b> for
- configuration development. (For the semantics, check the
- <b><tt>UPD_M_</tt></b> macros in the source.)
- <li>A program "<b><tt>uninfo.ps</tt></b>" distributed with Ghostscript
- displays interactively in alphabetical order the contents of the current
- pagedevice dictionary. This includes any parameters generated or changed by
- <b><tt>uniprint</tt></b>.
- </ul>
- <h3><a name="Uni_all_parameters"></a>All parameters in brief</h3>
- <p>
- This table gives a brief explanation of every parameter known to
- <b><tt>uniprint</tt></b>, listing them in alphabetical order. "[ ]"
- denotes that a parameter is an array, and "(RO)" that it is read-only.
- <blockquote><table cellpadding=0 cellspacing=0>
- <tr><th colspan=5 bgcolor="#CCCC00"><hr><font size="+1">All <b><tt>uniprint</tt></b> parameters</font><hr>
- <tr valign=bottom>
- <th align=left>Parameter
- <td>
- <th align=left>Type
- <td>
- <th align=left>Use
- <tr> <td colspan=5><hr>
- <tr valign=top> <td><b><tt>upAbortCommand</tt></b>
- <td>
- <td>String
- <td>
- <td>End of page and file on interrupt
- <tr valign=top> <td><b><tt>upAdjustBottomMarginCommand</tt></b>
- <td>
- <td>Bool
- <td>
- <td>Manipulate bottom margin in <b><tt>upBeginPageCommand</tt></b>
- <tr valign=top> <td><b><tt>upAdjustMediaSizeCommand</tt></b>
- <td>
- <td>Bool
- <td>
- <td>Manipulate <b><tt>Mediasize</tt></b> [intended]
- <tr valign=top> <td><b><tt>upAdjustPageLengthCommand</tt></b>
- <td>
- <td>Bool
- <td>
- <td>Manipulate page length in <b><tt>upBeginPageCommand</tt></b>
- <tr valign=top> <td><b><tt>upAdjustPageWidthCommand</tt></b>
- <td>
- <td>Bool
- <td>
- <td>Manipulate page width in <b><tt>upBeginPageCommand</tt></b>
- <tr valign=top> <td><b><tt>upAdjustResolutionCommand</tt></b>
- <td>
- <td>Bool
- <td>
- <td>Manipulate resolution
- <tr valign=top> <td><b><tt>upAdjustTopMarginCommand</tt></b>
- <td>
- <td>Bool
- <td>
- <td>Manipulate top margin in <b><tt>upBeginPageCommand</tt></b>
- <tr valign=top> <td><b><tt>upBeginJobCommand</tt></b>
- <td>
- <td>String
- <td>
- <td>Begin each output file
- <tr valign=top> <td><b><tt>upBeginPageCommand</tt></b>
- <td>
- <td>String
- <td>
- <td>Begin each page
- <tr valign=top> <td><b><tt>upBlackTransfer</tt></b>
- <td>
- <td>Float[ ]
- <td>
- <td>Black transfer (CMYK only!)
- <tr valign=top> <td><b><tt>upBlueTransfer</tt></b>
- <td>
- <td>Float[ ]
- <td>
- <td>Blue transfer
- <tr valign=top> <td><b><tt>upColorInfo</tt></b>
- <td>
- <td>Int[ ]
- <td>
- <td>struct <b><tt>gx_device_color_info</tt></b>
- <tr valign=top> <td><b><tt>upColorModel</tt></b>
- <td>
- <td>Name
- <td>
- <td>Select color mapping
- <tr valign=top> <td><b><tt>upColorModelInitialized</tt></b>
- <td>
- <td>Bool (RO)
- <td>
- <td>Color mapping OK
- <tr valign=top> <td><b><tt>upComponentBits</tt></b>
- <td>
- <td>Int[ ]
- <td>
- <td>Bits stored per component
- <tr valign=top> <td><b><tt>upComponentShift</tt></b>
- <td>
- <td>Int[ ]
- <td>
- <td>Positioning within <b><tt>gx_color_index</tt></b>
- <tr valign=top> <td><b><tt>upCyanTransfer</tt></b>
- <td>
- <td>Float[ ]
- <td>
- <td>Cyan transfer
- <tr valign=top> <td><b><tt>upEndJobCommand</tt></b>
- <td>
- <td>String
- <td>
- <td>End each file unless <b><tt>upAbortCommand</tt></b>
- <tr valign=top> <td><b><tt>upEndPageCommand</tt></b>
- <td>
- <td>String
- <td>
- <td>End each page unless <b><tt>upAbortCommand</tt></b>
- <tr valign=top> <td><b><tt>upErrorDetected</tt></b>
- <td>
- <td>Bool (RO)
- <td>
- <td>Severe (VM) error, not fully operational
- <tr valign=top> <td><b><tt>upFSFixedDirection</tt></b>
- <td>
- <td>Bool
- <td>
- <td>Inhbits direction toggling in rendering
- <tr valign=top> <td><b><tt>upFSProcessWhiteSpace</tt></b>
- <td>
- <td>Bool
- <td>
- <td>Causes white-space rendering
- <tr valign=top> <td><b><tt>upFSReverseDirection</tt></b>
- <td>
- <td>Bool
- <td>
- <td>Run rendering in reverse (if fixed)
- <tr valign=top> <td><b><tt>upFSZeroInit</tt></b>
- <td>
- <td>Bool
- <td>
- <td>Non-random rendering initialization
- <tr valign=top> <td><b><tt>upFormatXabsolute</tt></b>
- <td>
- <td>Bool
- <td>
- <td>Write absolute X coordinates
- <tr valign=top> <td><b><tt>upFormatYabsolute</tt></b>
- <td>
- <td>Bool
- <td>
- <td>Write absolute Y coordinates
- <tr valign=top> <td><b><tt>upGreenTransfer</tt></b>
- <td>
- <td>Float[ ]
- <td>
- <td>Green transfer
- <tr valign=top> <td><b><tt>upMagentaTransfer</tt></b>
- <td>
- <td>Float[ ]
- <td>
- <td>Magenta transfer
- <tr valign=top> <td><b><tt>upMargins</tt></b>
- <td>
- <td>Float[ ]
- <td>
- <td>L/B/R/T margins in points
- <tr valign=top> <td><b><tt>upModel</tt></b>
- <td>
- <td>String
- <td>
- <td>Comment string, holds some info
- <tr valign=top> <td><b><tt>upOutputAborted</tt></b>
- <td>
- <td>Bool (RO)
- <td>
- <td>Caught an interrupt
- <tr valign=top> <td><b><tt>upOutputBuffers</tt></b>
- <td>
- <td>Int
- <td>
- <td>Number of rendering buffers (2^<small><sup><b>N</b></sup></small>)
- <tr valign=top> <td><b><tt>upOutputComponentOrder</tt></b>
- <td>
- <td>Int[ ]
- <td>
- <td>Order of components when printing
- <tr valign=top> <td><b><tt>upOutputComponents</tt></b>
- <td>
- <td>Int
- <td>
- <td>Number of written components, not fully operational
- <tr valign=top> <td><b><tt>upOutputFormat</tt></b>
- <td>
- <td>Name
- <td>
- <td>Select output format
- <tr valign=top> <td><b><tt>upOutputFormatInitialized</tt></b>
- <td>
- <td>Bool (RO)
- <td>
- <td>Format data OK
- <tr valign=top> <td><b><tt>upOutputHeight</tt></b>
- <td>
- <td>Int
- <td>
- <td>Output height in pixels
- <tr valign=top> <td><b><tt>upOutputPins</tt></b>
- <td>
- <td>Int
- <td>
- <td>Number of pins / nozzles per command
- <tr valign=top> <td><b><tt>upOutputWidth</tt></b>
- <td>
- <td>Int
- <td>
- <td>Output width in pixels
- <tr valign=top> <td><b><tt>upOutputXOffset</tt></b>
- <td>
- <td>Int
- <td>
- <td>Offset in pixels, if <b><tt>upFormatXabsolute</tt></b>
- <tr valign=top> <td><b><tt>upOutputXStep</tt></b>
- <td>
- <td>Int
- <td>
- <td>Divisor or multiplier for X coords
- <tr valign=top> <td><b><tt>upOutputYOffset</tt></b>
- <td>
- <td>Int
- <td>
- <td>Offset in pixels, if <b><tt>upFormatYabsolute</tt></b>
- <tr valign=top> <td><b><tt>upOutputYStep</tt></b>
- <td>
- <td>Int
- <td>
- <td>Divisor or multiplier for Y coords
- <tr valign=top> <td><b><tt>upRasterBufferInitialized</tt></b>
- <td>
- <td>Bool (RO)
- <td>
- <td>GS buffer OK
- <tr valign=top> <td><b><tt>upRedTransfer</tt></b>
- <td>
- <td>Float[ ]
- <td>
- <td>Red transfer
- <tr valign=top> <td><b><tt>upRendering</tt></b>
- <td>
- <td>Name
- <td>
- <td>Select rendering algorithm
- <tr valign=top> <td><b><tt>upRenderingInitialized</tt></b>
- <td>
- <td>Bool (RO)
- <td>
- <td>Rendering parameters OK
- <tr valign=top> <td><b><tt>upSelectComponentCommands</tt></b>
- <td>
- <td>String[ ]
- <td>
- <td>Establish color (output order!)
- <tr valign=top> <td><b><tt>upSetLineFeedCommand</tt></b>
- <td>
- <td>String
- <td>
- <td>Adjust linefeed (Epson only)
- <tr valign=top> <td><b><tt>upVersion</tt></b>
- <td>
- <td>String (RO)
- <td>
- <td>Source code version
- <tr valign=top> <td><b><tt>upWeaveFinalPins</tt></b>
- <td>
- <td>Int[ ]
- <td>
- <td>Number of bottom pins on EOP passes
- <tr valign=top> <td><b><tt>upWeaveFinalScan</tt></b>
- <td>
- <td>Int
- <td>
- <td>Begin EOP passes (Y-coord)
- <tr valign=top> <td><b><tt>upWeaveFinalXStarts</tt></b>
- <td>
- <td>Int[ ]
- <td>
- <td>X-pass indices for EOP passes
- <tr valign=top> <td><b><tt>upWeaveFinalYFeeds</tt></b>
- <td>
- <td>Int[ ]
- <td>
- <td>Y increments for EOP passes
- <tr valign=top> <td><b><tt>upWeaveInitialPins</tt></b>
- <td>
- <td>Int[ ]
- <td>
- <td>Number of top pins on BOP passes
- <tr valign=top> <td><b><tt>upWeaveInitialScan</tt></b>
- <td>
- <td>Int
- <td>
- <td>End BOP passes (Y coord)
- <tr valign=top> <td><b><tt>upWeaveInitialXStarts</tt></b>
- <td>
- <td>Int[ ]
- <td>
- <td>X-pass indices for BOP passes
- <tr valign=top> <td><b><tt>upWeaveInitialYFeeds</tt></b>
- <td>
- <td>int[ ]
- <td>
- <td>Y increments for BOP passes
- <tr valign=top> <td><b><tt>upWeavePasses</tt></b>
- <td>
- <td>Int
- <td>
- <td>XPasses × YPasses
- <tr valign=top> <td><b><tt>upWeaveXPasses</tt></b>
- <td>
- <td>Int
- <td>
- <td>Number of X passes
- <tr valign=top> <td><b><tt>upWeaveXStarts</tt></b>
- <td>
- <td>Int[ ]
- <td>
- <td>X-pass indices for normal passes
- <tr valign=top> <td><b><tt>upWeaveYFeeds</tt></b>
- <td>
- <td>Int[ ]
- <td>
- <td>Y increments for normal passes
- <tr valign=top> <td><b><tt>upWeaveYOffset</tt></b>
- <td>
- <td>Int
- <td>
- <td>Number of blank or incomplete scans at BOP
- <tr valign=top> <td><b><tt>upWeaveYPasses</tt></b>
- <td>
- <td>Int
- <td>
- <td>Number of X passes
- <tr valign=top> <td><b><tt>upWhiteTransfer</tt></b>
- <td>
- <td>Float[ ]
- <td>
- <td>White transfer (monochrome devices!)
- <tr valign=top> <td><b><tt>upWriteComponentCommands</tt></b>
- <td>
- <td>String[ ]
- <td>
- <td>Commands to write each component
- <tr valign=top> <td><b><tt>upWroteData</tt></b>
- <td>
- <td>Bool (RO)
- <td>
- <td>Something (<b><tt>BeginJob</tt></b>) written to output
- <tr valign=top> <td><b><tt>upXMoveCommand</tt></b>
- <td>
- <td>String
- <td>
- <td>X positioning command
- <tr valign=top> <td><b><tt>upXStepCommand</tt></b>
- <td>
- <td>String
- <td>
- <td>Single step to the right
- <tr valign=top> <td><b><tt>upYFlip</tt></b>
- <td>
- <td>Bool
- <td>
- <td>Flips output along the Y axis
- <tr valign=top> <td><b><tt>upYMoveCommand</tt></b>
- <td>
- <td>String
- <td>
- <td>Y positioning command
- <tr valign=top> <td><b><tt>upYStepCommand</tt></b>
- <td>
- <td>String
- <td>
- <td>Single step down
- <tr valign=top> <td><b><tt>upYellowTransfer</tt></b>
- <td>
- <td>Float[ ]
- <td>
- <td>Yellow transfer
- </table></blockquote>
- <h3><a name="Uni_honors"></a><b><tt>uniprint</tt></b>'s Roll of Honor</h3>
- <p>
- I should mention all of the people who were involved in
- <b><tt>stcolor</tt></b>'s evolution, but I've decided to start from scratch
- here for <b><tt>uniprint</tt></b>:
- <blockquote>
- <dl>
- <dt>John P. Beale
- <dd>for testing the <b><tt>stc600</tt></b> modes
- <dt>Bill Davidson
- <dd>who triggered some weaving research and tested <b><tt>stc2s_h</tt></b>
- <dt>L. Peter Deutsch
- <dd>who triggered ease of configuration
- <dt>Mark Goldberg
- <dd>who prepared the <b><tt>stc500</tt></b> transfers
- <dt>Scott F. Johnston and Scott J. Kramer
- <dd>for testing the <b><tt>stc800</tt></b> modes
- <dt>Martin Lottermoser
- <dd>for his great commented H-P DeskJet driver
- <dt>Helmut Riegler
- <dd>for the BJC extension
- <dt>Hans-Gerd Straeter
- <dd>for some measured transfer curves and more
- <dt>Uli Wortmann
- <dd>for discussions and his <b><tt>cdj850</tt></b> driver
- <dt>My family
- <dd>for tolerating my printer-driver hacking
- </dl>
- </blockquote>
- <address>
- Gunther Hess<br>
- Duesseldorfer Landstr. 16b<br>
- D-47249 Duisburg<br>
- Germany<br>
- +49 203 376273 telephone (MET evening hours)<br>
- <<a href="mailto:ghess@elmos.de">ghess@elmos.de</a>>
- </address>
- <h3><a name="Uni_weaving_howto"></a><tt>Uniprint</tt> weaving parameters howto</h3>
- This section was contributed by Glenn Ramsey.<p>
- <p>I wrote this because the documentation was very brief and I really struggled
- with it for a while, but it is very simple once you understand what is going
- on.
- <p>This only describes how to work out the Y parameters, I haven't looked
- at the X parameters yet.
- <ol>
- <li>
- <b>Determine the nozzle geometry (upOutputPins)</b>
- <p>
- You need to know how many nozzles the printer has and the spacing between
- them. Usually you can find this out from the printer manual, or the printer
- supplier, but you may have to dissect a couple of printer output files
- produced with the driver supplied with the printer. There is a utility
- called escp2ras<a href="#escp2ras"><sup>*</sup></a> that will help with that.
- Sometimes the term pin is used instead of nozzle but they mean the same thing.
- <p>The number of nozzles will be the value assigned to the upOutputPins
- parameter.
- <p>Actually you don't have to print with all the pins available but for
- the purpose of demonstration I'll assume that we are using them all.
- <p>
- <a name="escp2ras"></a>* escp2ras is available from Gunther Hess' page at <a href="http://www-md.e-technik.uni-rostock.de/ma/gunther/gs/index.html">http://www-md.e-technik.uni-rostock.de/ma/gunther/gs/index.html</a>
- </li>
- <p>
- <li><b>Determine how many passes are required (upWeaveYPasses)</b>
- <p>The number of passes required is going to depend on the required resolution
- and the nozzle spacing.
- <blockquote>
- <tt>passes = resolution * nozzle spacing
- </tt>
- </blockquote>
- This will be the value assigned to the upWeaveYPasses parameter.
- <p>For example if the desired resolution is 360 dpi and the nozzles are
- spaced at 1/90in then 360 * 1/90 = 4 passes are required. For 720 dpi 8
- passes would be required. The printer would, of course, have to be capable
- of moving the paper in increments of either 360 or 720 dpi too.
- </li>
- <p>
- <li>
- <b>Determine the normal Y feed increment (upWeaveYFeeds)</b>
- <p>
- You need to work out how much to feed the paper so that when the paper
- has moved by one head length in however many passes you have then each
- row space on the paper has been passed over by at least one nozzle. There
- will be one feed value for each pass and the feed values must comply with
- the following rules:
- <blockquote>
- <tt>
- <p>sum of feeds = passes * nozzles
- <br>feed%passes != 0 (feed is not exactly divisible by passes)
- <br>sum of (nozzles - feed) = 0
- </tt>
- </blockquote>
- <p>For example if passes=4 and nozzles=15, then sum of feeds=60. The feed
- values could be 1,1,1,57 or 15,15,15,15 or 14,15,18,13.
- <p>These values will be assigned to the upWeaveYFeeds parameter.
- <p>You would need to experiment to see what combination looks best on the
- printer.
- <p>I found it convenient to draw several lines of nozzles and then move
- them around to see how the different combinations would fill the paper.
- A computer drawing tool makes this easier than pencil and paper (I used
- Dia, a GNOME app). The number of nozzles would probably be be a good place
- to start.
- <p>Remember that if the number of passes is more than 1 then the feed increment
- will be less than the nozzle spacing and <tt>passes × feed increment size</tt>
- must equal the physical distance between each nozzle.
- </li>
- <p>
- <li>
- <b>Determine the beginning of page pins (upWeaveInitialPins)</b>
- <p>
- These values will be assigned to the upWeaveInitialPins parameter and are
- the numbers of nozzles to operate in each of the initial passes at the top
- of a page. The nozzles that the values refer to are the topmost nozzles
- on the head, nearest the top margin. If the image doesn't start at the
- top margin then uniprint doesn't use these feeds.
- <p>I don't know a mathematical relation for this except that at least one
- of the values must be the number of nozzles, but I'm sure that there must
- be one. I used a graphical method, the description that follows refers
- to the ascii diagram in below.
- <p>Draw a line of nozzles for each pass arranged as they would be using
- the normal Y feed increment determined in step 3. In the diagram below
- this would be passes 5-8.
- <p>Draw a line of nozzles that would print just before the first normal
- pass. The feed increment for this pass will be close to and most likely
- 1 or 2 units less than the feed increment of the last normal pass. In the
- example below this line is pass 4 and the feed increment is 13 whereas
- the normal feed increment is 15.
- <p>Draw each pass before that with a small feed increment so that if all
- of the nozzles appearing above the first nozzle of the first normal pass
- operate then all of the spaces will be filled. This feed increment is usually
- 1 except in cases where some jiggery pokery is going on to make the printer
- print at an apparent higher resolution than the nozzle diameter.
- <p>Now select the nozzles that will operate in each of theses initial passes
- so that the paper is filled. In each pass the nozzles must be adjacent
- to each other and at least one of the passes will have all the nozzles
- operating. I suspect that for each combination of normal Y feed increments
- there will only be one set of valid beginning of page increments.
- </li>
- </ol>
- <h4>Example: stc.upp from Aladdin Ghostscript 6.01</h4>
- 15 nozzles spaced at 1/90 in, 360 dpi requires 4 passes.
- <blockquote><tt><pre>
- -dupWeaveYPasses=4
- -dupOutputPins=15
- -dupWeaveYFeeds="{15 15 15 15}"
- -dupWeaveInitialYFeeds="{1 1 1 13}"
- -dupWeaveInitialPins="{ 4 15 11 7}"
- </pre></tt></blockquote>
- The following diagram shows which nozzles operate during each pass.
- <br>Passes 1-4 are beginning of page passes and passes 5-8 are normal passes.
- <blockquote>
- <p>x=nozzle operates, o=nozzle not used in this pass<tt></tt>
- <p><tt> 1 2 3 4 5 6 7 8 - pass no</tt>
- <br><tt>0 x</tt>
- <br><tt>1 x</tt>
- <br><tt>2 x</tt>
- <br><tt>3 x</tt>
- <br><tt>4 x</tt>
- <br><tt>5 x</tt>
- <br><tt>6 x</tt>
- <br><tt>7 x</tt>
- <br><tt>8 x</tt>
- <br><tt>9 x</tt>
- <br><tt>0 x</tt>
- <br><tt>1 x</tt>
- <br><tt>2 x</tt>
- <br><tt>3 x</tt>
- <br><tt>4 x</tt>
- <br><tt>5 x</tt>
- <br><tt>6 o x</tt>
- <br><tt>7 x</tt>
- <br><tt>8 x</tt>
- <br><tt>9 x</tt>
- <br><tt>0 o x</tt>
- <br><tt>1 x</tt>
- <br><tt>2 x</tt>
- <br><tt>3 x</tt>
- <br><tt>4 o x</tt>
- <br><tt>5 x</tt>
- <br><tt>6 x</tt>
- <br><tt>7 x</tt>
- <br><tt>8 o x</tt>
- <br><tt>9 x</tt>
- <br><tt>0 x</tt>
- <br><tt>1 o x</tt>
- <br><tt>2 o x</tt>
- <br><tt>3 x</tt>
- <br><tt>4 x</tt>
- <br><tt>5 o x</tt>
- <br><tt>6 o x</tt>
- <br><tt>7 x</tt>
- <br><tt>8 x</tt>
- <br><tt>9 o x</tt>
- <br><tt>0 o x</tt>
- <br><tt>1 x</tt>
- <br><tt>2 x</tt>
- <br><tt>3 o x</tt>
- <br><tt>4 o x</tt>
- <br><tt>5 x</tt>
- <br><tt>6 o
- x</tt>
- <br><tt>7 o x</tt>
- <br><tt>8 o x</tt>
- <br><tt>9 x</tt>
- <br><tt>0 o
- x</tt>
- <br><tt>1 o x</tt>
- <br><tt>2 o x</tt>
- <br><tt>3 x</tt>
- <br><tt>4 o
- x</tt>
- <br><tt>5 o x</tt>
- <br><tt>6 o x</tt>
- <br><tt>7 x</tt>
- <br><tt>8 o
- x</tt>
- <br><tt>9 o x</tt>
- <br><tt>0 x</tt>
- <br><tt>1
- x</tt>
- <br><tt>2
- x</tt>
- <br><tt>3 x</tt>
- <br><tt>4 x</tt>
- <br><tt>5
- x</tt>
- <br><tt>6
- x</tt>
- <br><tt>7 x</tt>
- <br><tt>8 x</tt>
- <br><tt>9
- x</tt>
- <br><tt>0
- x</tt>
- <br><tt>1 x</tt>
- <br><tt>2 x</tt>
- <br><tt>3
- x</tt>
- <br><tt>4
- x</tt>
- <br><tt>5 x</tt>
- <br><tt>6</tt>
- <br><tt>7
- x</tt>
- <br><tt>8
- x</tt>
- <br><tt>9 x</tt>
- <br><tt>0</tt>
- <br><tt>1
- x</tt>
- <br><tt>2
- x</tt>
- <br><tt>3 x</tt>
- <br><tt>4</tt>
- <br><tt>5
- x</tt>
- <br><tt>6
- x</tt>
- <br><tt>7 x</tt>
- <br><tt>8</tt>
- <br><tt>9
- x</tt>
- <br><tt>0
- x</tt>
- <br><tt>1</tt>
- <br><tt>2</tt>
- <br><tt>3
- x</tt>
- <br><tt>4
- x</tt>
- <br><tt>5</tt>
- <br><tt>6</tt>
- <br><tt>7
- x</tt>
- <br><tt>8
- x</tt>
- <br><tt>9</tt>
- <br><tt>0</tt>
- <br><tt>1
- x</tt>
- <br><tt>2
- x</tt>
- <br><tt>3</tt>
- <br><tt>4</tt>
- <br><tt>5
- x</tt>
- <br><tt>6</tt>
- <br><tt>7</tt>
- <br><tt>8</tt>
- <br><tt>9
- x</tt>
- <br><tt>0</tt>
- <br><tt>1</tt>
- <br><tt>2</tt>
- <br><tt>3
- x</tt>
- <br><tt>4</tt>
- <br><tt>5</tt>
- <br><tt>6</tt>
- <br><tt>7
- x</tt>
- </blockquote>
- <p>These parameters would also work:
- <blockquote><tt><pre>
- -dupWeaveYPasses=4
- -dupOutputPins=15
- -dupWeaveYFeeds="{14 15 18 13}"
- -dupWeaveInitialYFeeds="{1 1 1 13}"
- -dupWeaveInitialPins="{ 4 11 7 15}"
- </pre></tt></blockquote>
- <p>
- <hr>
- <h3><a name="Uni_esc300"></a>Extension to <tt>uniprint</tt> for the Epson Stylus Color 300</h3>
- This section was contributed by Glenn Ramsey.<p>
- The Epson Stylus Color 300 uses a different command set to other Epson
- Stylus Color printers that use the ESC/P2 language. As far as I can
- tell its commands are a subset of ESC/P2. In ESC/P2 the colour to be
- printed is selected by a 'set colour' command and then the data sent
- is only printed in that colour until the colour is changed with another
- 'set colour' command. The Stylus Color 300 lacks this functionality.
- The data sent to the printer maps directly to the ink nozzles and colour
- of an output scan line in the printed output is determined by the position
- of the scan line within the data. This means that the driver must know
- how the nozzles are arranged and must format the output accordingly.
- The extension adds a format that I have called EscNozzleMap and adds some
- additional parameters to uniprint.<br>
- <ul>
- <li><b><tt>upOutputFormat</tt></b>selects the output method, and should be set to the value
- <b><tt>/EscNozzleMap</tt></b> to select this format.
- <blockquote>
- <table cellpadding="0" cellspacing="0">
- <tbody>
- <tr valign="Top">
- <td><b><tt>/EscNozzleMap</tt></b></td>
- <td> </td>
- <td>produces output for the Epson Stylus Color 300
- </td>
- </tr>
- <tbody>
- </table>
- </blockquote>
- </ul>
- <blockquote>
- <table cellpadding="0" cellspacing="0">
- <tbody>
- <tr>
- <th colspan="5" bgcolor="#cccc00">
- <hr><font size="+1"><b><tt>uniprint</tt></b> parameters for the
- EscNozzleMap format</font>
- <hr></th>
- </tr>
- <tr valign="Bottom">
- <th align="Left">Parameter
- </th>
- <td>
- </td>
- <th align="Left">Type
- </th>
- <td>
- </td>
- <th align="Left">Use
- </th>
- </tr>
- <tr>
- <td colspan="5">
- <hr></td>
- </tr>
- <tr valign="Top">
- <td><b><tt>upNozzleMapRowsPerPass</tt></b></td>
- <td>
- </td>
- <td>Int
- </td>
- <td>
- </td>
- <td>output rows to generate for each pass of the head
- </td>
- </tr>
- <tr valign="Top">
- <td><b><tt>upNozzleMapPatternRepeat</tt></b></td>
- <td>
- </td>
- <td>Int
- </td>
- <td>
- </td>
- <td>no. of rows that correspond to the repeat pattern of the
- nozzles
- </td>
- </tr>
- <tr valign="Top">
- <td><b><tt>upNozzleMapRowMask</tt></b></td>
- <td>
- </td>
- <td>Int[]
- </td>
- <td>
- </td>
- <td>mask indicating the colour of the nozzles
- </td>
- </tr>
- <tr valign="Top">
- <td><b><tt>upNozzleMapMaskScanOffset</tt></b></td>
- <td>
- </td>
- <td>Int[]
- </td>
- <td>
- </td>
- <td>mask indicating the physical position of the nozzles
- </td>
- </tr>
- </tbody>
- </table>
- </blockquote>
- <h4>A more detailed description of the new parameters</h4>
- <ul>
- <li><b><tt>upNozzleMapRowsPerPass</tt></b><br>
- The number of rows of data that are required to address all nozzles for a
- single pass of the head. There will always be this number of rows of output
- data generated. I'd expect it to be the same as the total number of nozzles but
- it wouldn't break the formatter if it wasn't. So if you wanted to print with
- only the 10th nozzle then row 10 would contain data corresponding to the bit
- pattern and all of the others would be padded with zeros.
- </li>
- <li><b><tt>upNozzleMapPatternRepeat</tt></b><br>
- The number of nozzles in each repeated group on the printing head.
- This parameter must correspond with the length of the upNozzleMapRowMask array.
- </li>
- <li><b><tt>upNozzleMapRowMask</tt></b><br>
- An array of integers that defines the colour of the nozzles on the
- head and whether the nozzles will be used to print. The array index
- defines the row index for the nozzle in the output data
- and the value defines the colour of the nozzle. The mapping
- of colours to values is defined in the table below.
- <blockquote>
- <table cellpadding="0" cellspacing="0">
- <tbody>
- <tr valign="Bottom">
- <th align="Left">colour
- </th>
- <td>
- </td>
- <th align="center">mask value
- </th>
- </tr>
- <tr>
- <td colspan="5">
- <hr></td>
- </tr>
- <tr valign="Top" align="middle">
- <td><b><tt>K</tt></b></td>
- <td>
- </td>
- <td>1
- </td>
- </tr>
- <tr valign="Top" align="middle">
- <td><b><tt>C</tt></b></td>
- <td>
- </td>
- <td>2
- </tr>
- <tr valign="Top" align="middle">
- <td><b><tt>M</tt></b></td>
- <td>
- </td>
- <td>3
- </td>
- </tr>
- <tr valign="Top" align="middle">
- <td><b><tt>Y</tt></b></td>
- <td>
- </td>
- <td>4
- </td>
- </tr>
- <tr valign="Top" align="middle">
- <td><b><tt>no data</tt></b></td>
- <td>
- </td>
- <td>0
- </td>
- </tr>
- </tbody>
- </table>
- </blockquote>
- A value of 0 means that the nozzle is not used and the row in the output data will be
- padded with zeros.<br>
- </li>
- <li><b><tt>upNozzleMapMaskScanOffset</tt></b><br>
- An array of integers that defines the physical position of the nozzles relative
- to the first nozzle in the repeated group. The relative distance is measured in
- printed line widths and will be different for different printing resolutions.
- This parameter is used because the physical spacing of the nozzles may not
- correspond to their mapping in the output data. For example the ESC300 has nozzles
- physically arranged something like this:
- <table>
- <tr>
- <td bgcolor="#00ffff">
- </td>
- <td bgcolor="#ffff00">
- </td>
- <td bgcolor="#000000">
- </td>
- <td bgcolor="#ff00ff">
- </td>
- <td bgcolor="#000000">
- </td>
- <td>
- </td>
- <td bgcolor="#000000">
- </td>
- <td>
- </td>
- <td>
- </td>
- <td>
- </td>
- <td>
- </td>
- <td>
- </td>
- <td bgcolor="#00ffff">
- </td>
- <td bgcolor="#ffff00">
- </td>
- <td bgcolor="#000000">
- </td>
- <td bgcolor="#ff00ff">
- </td>
- <td bgcolor="#000000">
- </td>
- <td>
- </td>
- <td bgcolor="#000000">
- </td>
- <td bgcolor="#ffffff">
- </td>
- </tr>
- <td>
- </td>
- <td>
- </td>
- <td>
- </td>
- <td>
- </td>
- <td>
- </td>
- <td>
- </td>
- <td bgcolor="#00ffff">
- </td>
- <td bgcolor="#ffff00">
- </td>
- <td bgcolor="#000000">
- </td>
- <td bgcolor="#ff00ff">
- </td>
- <td bgcolor="#000000">
- </td>
- <td>
- </td>
- <td bgcolor="#000000">
- </td>
- <td>
- </td>
- <td>
- </td>
- <td>
- </td>
- <td>
- </td>
- <td>
- </td>
- <td bgcolor="#00ffff">
- </td>
- <td bgcolor="#ffff00">
- </td>
- <td>etc ...
- </td>
- <tr>
- </tr>
- </table>
- There is a one nozzle width space between the last two nozzles in each group.
- In the output data the data for the last nozzle in the group would be in row 5
- (numbering starts at 0) but the nozzle is physically positioned at 6 spaces from
- the first nozzle.
- </ul>
- <h4>Example 1 - Epson Stylus Color 300 - 360 dpi colour</h4>
- <blockquote><pre>
- -dupWeaveYPasses=6
- -dupOutputPins=11
- -dupWeaveYFeeds="{ 11 11 11 11 11 11 }"
- -dupWeaveInitialYFeeds="{ 1 1 1 1 1 7 }"
- -dupWeaveInitialPins="{ 2 11 9 7 5 3 }"
- -dupNozzleMapRowsPerPass=64
- -dupNozzleMapPatternRepeat=6
- -dupNozzleMapRowMask="{ 2 4 1 3 0 0 }"
- -dupNozzleMapMaskScanOffset="{ 0 1 2 3 0 0 }"
- </pre></blockquote>
- The weaving parameters are the same as for any other uniprint driver
- but they must be consistent with the nozzle map parameters. In this printer
- the coloured nozzles are spaced at 1/60" so 6 passes are required for 360
- dpi resolution.
- <p>
- In the example there are 64 rows of data required for each head pass. Each
- row must be completely filled with data for each pass so if certain nozzles
- do not print in the pass then the rows for those nozzles will be padded
- with zeroes.
- <P>
- The row mask translates to "C Y K M 0 0" so in the output data rows 0,7,13,...
- will contain data for cyan, rows 1,8,14,... will contain data for yellow, etc. Rows 4,10,16,...
- and 5, 11,15,... will always be padded with zeroes. The <i>upNozzleMapPatternRepeat</i>
- parameter defines the length of the mask.
- <p>
- The row mask is repeated for each group of <i>upNozzleMapPatternRepeat</i> rows
- in the output data. In this case there are 64 rows so there will be 10 groups
- of "C Y K M 0 0" followed by "C Y K M" which is equivalent to 11 output
- pins.
- <P>
- The <i>upNozzleMaskScanOffset</i> array indicates how the data from the scan
- buffer is mapped to the output data. The data is presented to the formatter
- as a buffer of four colour scanlines. The index of the scanline being printed,
- lets call it y, always corresponds, in this example, to the physical position of
- the cyan nozzle but since the nozzles are not on the same horizontal
- line then the other colours for the current pass must come from other
- scanlines in the scan buffer. The example is { 0 1 2 3 0 0 }, this means that
- when printing a 4 colour image the magenta data would come from scanline y+3,
- the black from scanline y+2, etc. It would have been possible in this case
- to use the array index instead of the <i>upNozzleMaskScanOffset</i> parameter
- however the parameter is necessary to be able to use the full capability of the
- printer in black only mode.
- <h4>Example 2 - Epson Stylus Color 300 - 180 dpi black only</h4>
- <blockquote>
- <pre>
- -dupMargins="{ 9.0 39.96 9.0 9.0}"
- -dupWeaveYPasses=1
- -dupOutputPins=31
- -dupNozzleMapRowsPerPass=64
- -dupNozzleMapPatternRepeat=6
- -dupNozzleMapRowMask="{ 0 0 1 0 1 1}"
- -dupNozzleMapMaskScanOffset="{ 0 0 0 0 1 2 }"
- </pre>
- </blockquote>
- In this example there is no weaving.
- <p>
- The ESC300 has black nozzles evenly physically arranged as K K K but the data must
- be sent to the printer as 00K0KK. This is handled by the <i>upNozzleMapRowMask</i>
- and <i>upNozzleMaskScanOffset</i> arrays. The <i>upNozzleMapRowMask</i> array is
- { 0 0 1 0 1 1} which translates to { 0 0 K 0 K K } so rows 0, 1 and 3 will always
- contain zeros and the other rows will contain data.
- <p>
- The <i>upNozzleMaskScanOffset</i> array
- in this case is { 0 0 0 0 1 2 } so if the data for the 1st nozzle comes from row
- y in the scan buffer then the data for the 2nd and 3rd nozzles will come from rows
- y+1 and y+2.
- <h4>Example 3 - Epson Stylus Color 300 - 360 dpi black only</h4>
- <blockquote>
- <pre>
- -dupWeaveYPasses=2
- -dupOutputPins=31
- -dupWeaveYFeeds="{31 31}"
- -dupWeaveInitialYFeeds="{1 31}"
- -dupWeaveInitialPins="{16 31}"
- -dupNozzleMapRowsPerPass=64
- -dupNozzleMapPatternRepeat=6
- -dupNozzleMapRowMask="{ 0 0 1 0 1 1}"
- -dupNozzleMapMaskScanOffset="{ 0 0 0 0 2 4 }"
- </pre>
- </blockquote>
- In this example 2 weave passes are required to achieve the desired resolution.
- <p>
- The <i>upNozzleMaskScanOffset</i> array in this case is { 0 0 0 0 2 4 } because
- there are two weave passes so if the data for the first nozzle comes from row y
- in the scan buffer then the data for the 2nd and 3rd nozzles must come from rows
- y+(1*2) and y+(2*2).
- <p>
- <address>
- Glenn Ramsey<br>
- glennr at users.sourceforge.net<br>
- February 2001
- </address>
- <br>
- <hr>
- <h2><a name="SPARCprinter"></a>Sun SPARCprinter</h2>
- <p>
- This section was contributed by Martin Schulte.
- <p>
- With a SPARCprinter you always buy software that enables you to do
- PostScript printing on it. A page image is composed on the host, which
- sends a bitmap to the SPARCprinter through a special SBUS video interface.
- So the need for a Ghostscript interface to the SPARCPrinter seems low, but
- on the other hand, Sun's software prints some PostScript drawings
- incorrectly: some pages contain a thin vertical line of rubbish, and on
- some Mathematica drawings the text at the axes isn't rotated. Ghostscript,
- however, gives the correct results. Moreover, replacing proprietary
- software should never be a bad idea.
- <p>
- The problem is that there has yet been no effort to make the SPARCPrinter
- driver behave like a BSD output filter. I made my tests using the script
- shown here.
- <h3><a name="SPARC_install"></a>Installation</h3>
- <p>
- Add <b><tt>sparc.dev</tt></b> to <b><tt>DEVICE_DEVS</tt></b> and compile
- Ghostscript as described in the documentation on <a href="Make.htm">how to
- build Ghostscript</a>. Afterwards you can use the following script as an
- example for printing after modifying it with the right pathnames --
- including for <b>{GSPATH}</b> the full pathname of the Ghostscript
- executable:
- <blockquote>
- <pre>outcmd1='/vol/local/lib/troff2/psxlate -r'
- outcmd2='<b><em>{GSPATH}</em></b> -sDEVICE=sparc -sOUTPUTFILE=/dev/lpvi0 -'
- if [ $# -eq 0 ]
- then
- $outcmd1 | $outcmd2
- else
- cat $* | $outcmd1 | $outcmd2
- fi
- </pre></blockquote>
- <h3><a name="SPARC_problems"></a>Problems</h3>
- <p>
- Since <b><tt>/dev/lpi</tt></b> can be opened only for exclusive use, if
- another job has it open (engine_ctl_sparc or another Ghostscript are the
- most likely candidates), Ghostscript stops with "Error: /invalidfileaccess
- in --.outputpage--"
- <p>
- In case of common printer problems like being out of paper, a warning
- describing the reason is printed to stdout. The driver tries access again
- each five seconds. Due to a problem with the device driver (in the kernel)
- the reason for printer failure isn't always reported correctly to the
- program. This is the case, for instance, if you open the top cover (error
- E5 on the printer's display). Look at the display on the printer itself if
- a "Printer problem with unknown reason" is reported. Fatal errors cause
- the print job to be terminated.
- <hr>
- <h2><a name="Apple"></a>Apple dot matrix printer</h2>
- <p>
- This section was contributed by Mark Wedel
- <<a href="mailto:master@cats.ucsc.edu">master@cats.ucsc.edu</a>>.
- <p>
- The Apple Dot Matrix Printer (DMP) was a parallel predecessor to the
- Imagewriter printer. As far as I know, Imagewriter commands are a superset
- of the Dot Matrix printer's, so the driver should generate output that can
- be printed on Imagewriters.
- <p>
- To print images, the driver sets the printer for unidirectional printing
- and 15 characters per inch (cpi), or 120dpi. It sets the line feed to 1/9
- inch. When finished, it sets the printer to bidirectional printing,
- 1/8-inch line feeds, and 12 cpi. There appears to be no way to reset the
- printer to initial values.
- <p>
- This code does not set for 8-bit characters (which is required). It also
- assumes that carriage return-newline is needed, and not just carriage
- return. These are all switch settings on the DMP, and I have configured
- them for 8-bit data and carriage return exclusively. Ensure that the Unix
- printer daemon handles 8-bit (binary) data properly; in my SunOS 4.1.1
- <b><tt>printcap</tt></b> file the string "<b><tt>ms=pass8,-opost</tt></b>"
- works fine for this.
- <p>
- Finally, you can search <b><tt>devdemp.c</tt></b> for
- "<b><tt>Init</tt></b>" and "<b><tt>Reset</tt></b>" to find the strings that
- initialize the printer and reset things when finished, and change them to
- meet your needs.
- <!-- [2.0 end contents] ==================================================== -->
- <!-- [3.0 begin visible trailer] =========================================== -->
- <hr>
- <p>
- <small>Copyright © 1996, 2000 Aladdin Enterprises.
- All rights reserved.</small>
- <p>
- <small>This file is part of AFPL Ghostscript. See the
- <a href="Public.htm">Aladdin Free Public License</a> (the "License") for
- full details of the terms of using, copying, modifying, and redistributing
- AFPL Ghostscript.</small>
- <p>
- <small>Ghostscript version 7.04, 31 January 2002
- <!-- [3.0 end visible trailer] ============================================= -->
- </body>
- </html>
|