| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942294329442945294629472948294929502951295229532954295529562957295829592960296129622963296429652966296729682969297029712972297329742975297629772978297929802981298229832984298529862987298829892990299129922993299429952996299729982999300030013002300330043005300630073008300930103011301230133014301530163017301830193020302130223023302430253026302730283029303030313032303330343035303630373038303930403041304230433044304530463047304830493050305130523053305430553056305730583059306030613062306330643065306630673068306930703071307230733074307530763077307830793080308130823083308430853086308730883089309030913092309330943095309630973098309931003101310231033104310531063107310831093110311131123113311431153116311731183119312031213122312331243125312631273128312931303131313231333134313531363137313831393140314131423143314431453146314731483149315031513152315331543155315631573158315931603161316231633164316531663167316831693170317131723173317431753176317731783179318031813182318331843185318631873188318931903191319231933194319531963197319831993200320132023203320432053206320732083209321032113212321332143215321632173218321932203221322232233224322532263227322832293230323132323233323432353236323732383239324032413242324332443245324632473248324932503251325232533254325532563257325832593260326132623263326432653266326732683269327032713272327332743275327632773278327932803281328232833284328532863287328832893290329132923293329432953296329732983299330033013302330333043305330633073308330933103311331233133314331533163317331833193320332133223323332433253326332733283329333033313332333333343335333633373338333933403341334233433344334533463347334833493350335133523353335433553356335733583359336033613362336333643365336633673368336933703371337233733374337533763377337833793380338133823383338433853386338733883389339033913392339333943395339633973398339934003401340234033404340534063407340834093410341134123413341434153416341734183419342034213422342334243425342634273428342934303431343234333434343534363437343834393440344134423443344434453446344734483449345034513452345334543455345634573458345934603461346234633464346534663467346834693470347134723473347434753476347734783479348034813482348334843485348634873488348934903491349234933494349534963497349834993500350135023503350435053506350735083509351035113512351335143515351635173518351935203521352235233524352535263527352835293530353135323533353435353536353735383539354035413542354335443545354635473548354935503551355235533554355535563557355835593560356135623563356435653566356735683569357035713572357335743575357635773578357935803581358235833584358535863587358835893590359135923593359435953596359735983599360036013602360336043605360636073608360936103611361236133614361536163617361836193620362136223623362436253626362736283629363036313632363336343635363636373638363936403641364236433644364536463647364836493650365136523653365436553656365736583659366036613662366336643665366636673668366936703671367236733674367536763677367836793680368136823683368436853686368736883689369036913692369336943695369636973698369937003701370237033704370537063707370837093710371137123713371437153716371737183719372037213722372337243725372637273728372937303731373237333734373537363737373837393740374137423743374437453746374737483749375037513752375337543755375637573758375937603761376237633764376537663767376837693770377137723773377437753776377737783779378037813782378337843785378637873788378937903791379237933794379537963797379837993800380138023803380438053806380738083809381038113812381338143815381638173818381938203821382238233824382538263827382838293830383138323833383438353836383738383839384038413842384338443845384638473848384938503851385238533854385538563857385838593860386138623863386438653866386738683869387038713872387338743875387638773878387938803881388238833884388538863887388838893890389138923893389438953896389738983899390039013902390339043905390639073908390939103911391239133914391539163917391839193920392139223923392439253926392739283929393039313932393339343935393639373938393939403941394239433944394539463947394839493950395139523953395439553956395739583959396039613962396339643965396639673968396939703971397239733974397539763977397839793980398139823983398439853986398739883989399039913992399339943995399639973998399940004001400240034004400540064007400840094010401140124013401440154016401740184019402040214022402340244025402640274028402940304031403240334034403540364037403840394040404140424043404440454046404740484049405040514052405340544055405640574058405940604061406240634064406540664067406840694070407140724073407440754076407740784079408040814082408340844085408640874088408940904091409240934094409540964097409840994100410141024103410441054106410741084109411041114112411341144115411641174118411941204121412241234124412541264127412841294130413141324133413441354136413741384139414041414142414341444145414641474148414941504151415241534154415541564157415841594160416141624163416441654166416741684169417041714172417341744175417641774178417941804181418241834184418541864187418841894190419141924193419441954196419741984199420042014202420342044205420642074208420942104211421242134214421542164217421842194220422142224223422442254226422742284229423042314232423342344235423642374238423942404241424242434244424542464247424842494250425142524253425442554256425742584259426042614262426342644265426642674268426942704271427242734274427542764277427842794280428142824283428442854286428742884289429042914292429342944295429642974298429943004301430243034304430543064307430843094310431143124313431443154316431743184319432043214322432343244325432643274328432943304331433243334334433543364337433843394340434143424343434443454346434743484349435043514352435343544355435643574358435943604361436243634364436543664367436843694370437143724373437443754376437743784379438043814382438343844385438643874388438943904391439243934394439543964397439843994400440144024403440444054406440744084409441044114412441344144415441644174418441944204421442244234424442544264427442844294430443144324433443444354436443744384439444044414442444344444445444644474448444944504451445244534454445544564457445844594460446144624463446444654466446744684469447044714472447344744475447644774478447944804481448244834484448544864487448844894490449144924493449444954496449744984499450045014502450345044505450645074508450945104511451245134514451545164517451845194520452145224523452445254526452745284529453045314532453345344535453645374538453945404541454245434544454545464547454845494550455145524553455445554556455745584559456045614562456345644565456645674568456945704571457245734574457545764577457845794580458145824583458445854586458745884589459045914592459345944595459645974598459946004601460246034604460546064607460846094610461146124613461446154616461746184619462046214622462346244625462646274628462946304631463246334634463546364637463846394640464146424643464446454646464746484649465046514652465346544655465646574658465946604661466246634664466546664667466846694670467146724673467446754676467746784679468046814682468346844685468646874688468946904691469246934694469546964697469846994700470147024703470447054706470747084709471047114712471347144715471647174718471947204721472247234724472547264727472847294730473147324733473447354736473747384739474047414742474347444745474647474748474947504751475247534754475547564757475847594760476147624763476447654766476747684769477047714772477347744775477647774778477947804781478247834784478547864787478847894790479147924793479447954796479747984799480048014802480348044805480648074808480948104811481248134814481548164817481848194820482148224823482448254826482748284829483048314832483348344835483648374838483948404841484248434844484548464847484848494850485148524853485448554856485748584859486048614862486348644865486648674868486948704871487248734874487548764877487848794880488148824883488448854886488748884889489048914892489348944895489648974898489949004901490249034904490549064907490849094910491149124913491449154916491749184919492049214922492349244925492649274928492949304931493249334934493549364937493849394940494149424943494449454946494749484949495049514952495349544955495649574958495949604961496249634964496549664967496849694970497149724973497449754976497749784979498049814982498349844985498649874988498949904991499249934994499549964997499849995000500150025003500450055006500750085009501050115012501350145015501650175018501950205021502250235024502550265027502850295030503150325033503450355036503750385039504050415042504350445045504650475048504950505051505250535054505550565057505850595060506150625063506450655066506750685069507050715072507350745075507650775078507950805081508250835084508550865087508850895090509150925093509450955096509750985099510051015102510351045105510651075108510951105111511251135114511551165117511851195120512151225123512451255126512751285129513051315132513351345135513651375138513951405141514251435144514551465147514851495150515151525153515451555156515751585159516051615162516351645165516651675168516951705171517251735174517551765177517851795180518151825183518451855186518751885189519051915192519351945195519651975198519952005201520252035204520552065207520852095210521152125213521452155216521752185219522052215222522352245225522652275228522952305231523252335234523552365237523852395240524152425243524452455246524752485249525052515252525352545255525652575258525952605261526252635264526552665267526852695270527152725273527452755276527752785279528052815282528352845285528652875288528952905291529252935294529552965297529852995300530153025303530453055306530753085309531053115312531353145315531653175318531953205321532253235324532553265327532853295330533153325333533453355336533753385339534053415342534353445345534653475348534953505351535253535354535553565357535853595360536153625363536453655366536753685369537053715372537353745375537653775378537953805381538253835384538553865387538853895390539153925393539453955396539753985399540054015402540354045405540654075408540954105411541254135414541554165417541854195420542154225423542454255426542754285429543054315432543354345435543654375438543954405441544254435444544554465447544854495450545154525453545454555456545754585459546054615462546354645465546654675468546954705471547254735474547554765477547854795480548154825483548454855486548754885489549054915492549354945495549654975498549955005501550255035504550555065507550855095510551155125513551455155516551755185519552055215522552355245525552655275528552955305531553255335534553555365537553855395540554155425543554455455546554755485549555055515552555355545555555655575558555955605561556255635564556555665567556855695570557155725573557455755576557755785579558055815582558355845585558655875588558955905591559255935594559555965597559855995600560156025603560456055606560756085609561056115612561356145615561656175618561956205621562256235624562556265627562856295630563156325633563456355636563756385639564056415642564356445645564656475648564956505651565256535654565556565657565856595660566156625663566456655666566756685669567056715672567356745675567656775678567956805681568256835684568556865687568856895690569156925693569456955696569756985699570057015702570357045705570657075708570957105711571257135714571557165717571857195720572157225723572457255726572757285729573057315732573357345735573657375738573957405741574257435744574557465747574857495750575157525753575457555756575757585759576057615762576357645765576657675768576957705771577257735774577557765777577857795780578157825783578457855786578757885789579057915792579357945795579657975798579958005801580258035804580558065807580858095810581158125813581458155816581758185819582058215822582358245825582658275828582958305831583258335834583558365837583858395840584158425843584458455846584758485849585058515852585358545855585658575858585958605861586258635864586558665867586858695870587158725873587458755876587758785879588058815882588358845885588658875888588958905891589258935894589558965897589858995900590159025903590459055906590759085909591059115912591359145915591659175918591959205921592259235924592559265927592859295930593159325933593459355936593759385939594059415942594359445945594659475948594959505951595259535954595559565957595859595960596159625963596459655966596759685969597059715972597359745975597659775978597959805981598259835984598559865987598859895990599159925993599459955996599759985999600060016002600360046005600660076008600960106011601260136014601560166017601860196020602160226023602460256026602760286029603060316032603360346035603660376038603960406041604260436044604560466047604860496050605160526053605460556056605760586059606060616062606360646065606660676068606960706071607260736074607560766077607860796080608160826083608460856086608760886089609060916092609360946095609660976098609961006101610261036104610561066107610861096110611161126113611461156116611761186119612061216122612361246125612661276128612961306131613261336134613561366137613861396140614161426143614461456146614761486149615061516152615361546155615661576158615961606161616261636164616561666167616861696170617161726173617461756176617761786179618061816182618361846185618661876188618961906191619261936194619561966197619861996200620162026203620462056206620762086209621062116212621362146215621662176218621962206221622262236224622562266227622862296230623162326233623462356236623762386239624062416242624362446245624662476248624962506251625262536254625562566257625862596260626162626263626462656266626762686269627062716272627362746275627662776278627962806281628262836284628562866287628862896290629162926293629462956296629762986299630063016302630363046305630663076308630963106311631263136314631563166317631863196320632163226323632463256326632763286329633063316332633363346335633663376338633963406341634263436344634563466347634863496350635163526353635463556356635763586359636063616362636363646365636663676368636963706371637263736374637563766377637863796380638163826383638463856386638763886389639063916392639363946395639663976398639964006401640264036404640564066407640864096410641164126413641464156416641764186419642064216422642364246425642664276428642964306431643264336434643564366437643864396440644164426443644464456446644764486449645064516452645364546455645664576458645964606461646264636464646564666467646864696470647164726473647464756476647764786479648064816482648364846485648664876488648964906491649264936494649564966497649864996500650165026503650465056506650765086509651065116512651365146515651665176518651965206521652265236524652565266527652865296530653165326533653465356536653765386539654065416542654365446545654665476548654965506551655265536554655565566557655865596560656165626563656465656566656765686569657065716572657365746575657665776578657965806581658265836584658565866587658865896590659165926593659465956596659765986599660066016602660366046605660666076608660966106611661266136614661566166617661866196620662166226623662466256626662766286629663066316632663366346635663666376638663966406641664266436644664566466647664866496650665166526653665466556656665766586659666066616662666366646665666666676668666966706671667266736674667566766677667866796680668166826683668466856686668766886689669066916692669366946695669666976698669967006701670267036704670567066707670867096710671167126713671467156716671767186719672067216722672367246725672667276728672967306731673267336734673567366737673867396740674167426743674467456746674767486749675067516752675367546755675667576758675967606761676267636764676567666767676867696770677167726773677467756776677767786779678067816782678367846785678667876788678967906791679267936794679567966797679867996800680168026803680468056806680768086809681068116812681368146815681668176818681968206821682268236824682568266827682868296830683168326833683468356836683768386839684068416842684368446845684668476848684968506851685268536854685568566857685868596860686168626863686468656866686768686869687068716872687368746875687668776878687968806881688268836884688568866887688868896890689168926893689468956896689768986899690069016902690369046905690669076908690969106911691269136914691569166917691869196920692169226923692469256926692769286929693069316932693369346935693669376938693969406941694269436944694569466947694869496950695169526953695469556956695769586959696069616962696369646965696669676968696969706971697269736974697569766977697869796980698169826983698469856986698769886989699069916992699369946995699669976998699970007001700270037004700570067007700870097010701170127013701470157016701770187019702070217022702370247025702670277028702970307031703270337034703570367037703870397040704170427043704470457046704770487049705070517052705370547055705670577058705970607061706270637064706570667067706870697070707170727073707470757076707770787079708070817082708370847085708670877088708970907091709270937094709570967097709870997100710171027103710471057106710771087109711071117112711371147115711671177118711971207121712271237124712571267127712871297130713171327133713471357136713771387139714071417142714371447145714671477148714971507151715271537154715571567157715871597160716171627163716471657166716771687169717071717172717371747175717671777178717971807181718271837184718571867187718871897190719171927193719471957196719771987199720072017202720372047205720672077208720972107211721272137214721572167217721872197220722172227223722472257226722772287229723072317232723372347235723672377238723972407241724272437244724572467247724872497250725172527253725472557256725772587259726072617262726372647265726672677268726972707271727272737274727572767277727872797280728172827283728472857286728772887289729072917292729372947295729672977298729973007301730273037304730573067307730873097310731173127313731473157316731773187319732073217322732373247325732673277328732973307331733273337334733573367337733873397340734173427343734473457346734773487349735073517352735373547355735673577358735973607361736273637364736573667367736873697370737173727373737473757376737773787379738073817382738373847385738673877388738973907391739273937394739573967397739873997400740174027403740474057406740774087409741074117412741374147415741674177418741974207421742274237424742574267427742874297430743174327433743474357436743774387439744074417442744374447445744674477448744974507451745274537454745574567457745874597460746174627463746474657466746774687469747074717472747374747475747674777478747974807481748274837484748574867487748874897490749174927493749474957496749774987499750075017502750375047505750675077508750975107511751275137514751575167517751875197520752175227523752475257526752775287529753075317532753375347535753675377538753975407541754275437544754575467547754875497550755175527553755475557556755775587559756075617562756375647565756675677568756975707571757275737574757575767577757875797580758175827583758475857586758775887589759075917592759375947595759675977598759976007601760276037604760576067607760876097610761176127613761476157616761776187619762076217622762376247625762676277628762976307631763276337634763576367637763876397640764176427643764476457646764776487649765076517652765376547655765676577658765976607661766276637664766576667667766876697670767176727673767476757676767776787679768076817682768376847685768676877688768976907691769276937694769576967697769876997700770177027703770477057706770777087709771077117712771377147715771677177718771977207721772277237724772577267727772877297730773177327733773477357736773777387739774077417742774377447745774677477748774977507751775277537754775577567757775877597760776177627763776477657766776777687769777077717772777377747775777677777778777977807781778277837784778577867787778877897790779177927793779477957796779777987799780078017802780378047805780678077808780978107811781278137814781578167817781878197820782178227823782478257826782778287829783078317832783378347835783678377838783978407841784278437844784578467847784878497850785178527853785478557856785778587859786078617862786378647865786678677868786978707871787278737874787578767877787878797880788178827883788478857886788778887889789078917892789378947895789678977898789979007901790279037904790579067907790879097910791179127913791479157916791779187919792079217922792379247925792679277928792979307931793279337934793579367937793879397940794179427943794479457946794779487949795079517952795379547955795679577958795979607961796279637964796579667967796879697970797179727973797479757976797779787979798079817982798379847985798679877988798979907991799279937994799579967997799879998000800180028003800480058006800780088009801080118012801380148015801680178018801980208021802280238024802580268027802880298030803180328033803480358036803780388039804080418042804380448045804680478048804980508051805280538054805580568057805880598060806180628063806480658066806780688069807080718072807380748075807680778078807980808081808280838084808580868087808880898090809180928093809480958096809780988099810081018102810381048105810681078108810981108111811281138114811581168117811881198120812181228123812481258126812781288129813081318132813381348135813681378138813981408141814281438144814581468147814881498150815181528153815481558156815781588159816081618162816381648165816681678168816981708171817281738174817581768177817881798180818181828183818481858186818781888189819081918192819381948195819681978198819982008201820282038204820582068207820882098210821182128213821482158216821782188219822082218222822382248225822682278228822982308231823282338234823582368237823882398240824182428243824482458246824782488249825082518252825382548255825682578258825982608261826282638264826582668267826882698270827182728273827482758276827782788279828082818282828382848285828682878288828982908291829282938294829582968297829882998300830183028303830483058306830783088309831083118312831383148315831683178318831983208321832283238324832583268327832883298330833183328333833483358336833783388339834083418342834383448345834683478348834983508351835283538354835583568357835883598360836183628363836483658366836783688369837083718372837383748375837683778378837983808381838283838384838583868387838883898390839183928393839483958396839783988399840084018402840384048405840684078408840984108411841284138414841584168417841884198420842184228423842484258426842784288429843084318432843384348435843684378438843984408441844284438444844584468447844884498450845184528453845484558456845784588459846084618462846384648465846684678468846984708471847284738474847584768477847884798480848184828483848484858486848784888489849084918492849384948495849684978498849985008501850285038504850585068507850885098510851185128513851485158516851785188519852085218522852385248525852685278528852985308531853285338534853585368537853885398540854185428543854485458546854785488549855085518552855385548555855685578558855985608561856285638564856585668567856885698570857185728573857485758576857785788579858085818582858385848585858685878588858985908591859285938594859585968597859885998600860186028603860486058606860786088609861086118612861386148615861686178618861986208621862286238624862586268627862886298630863186328633863486358636863786388639864086418642864386448645864686478648864986508651865286538654865586568657865886598660866186628663866486658666866786688669867086718672867386748675867686778678867986808681868286838684868586868687868886898690869186928693869486958696869786988699870087018702870387048705870687078708870987108711871287138714871587168717871887198720872187228723872487258726872787288729873087318732873387348735873687378738873987408741874287438744874587468747874887498750875187528753875487558756875787588759876087618762876387648765876687678768876987708771877287738774877587768777877887798780878187828783878487858786878787888789879087918792879387948795879687978798879988008801880288038804880588068807880888098810881188128813881488158816881788188819882088218822882388248825882688278828882988308831883288338834883588368837883888398840884188428843884488458846884788488849885088518852885388548855885688578858885988608861886288638864886588668867886888698870887188728873887488758876887788788879888088818882888388848885888688878888888988908891889288938894889588968897889888998900890189028903890489058906890789088909891089118912891389148915891689178918891989208921892289238924892589268927892889298930893189328933893489358936893789388939894089418942894389448945894689478948894989508951895289538954895589568957895889598960896189628963896489658966896789688969897089718972897389748975897689778978897989808981898289838984898589868987898889898990899189928993899489958996899789988999900090019002900390049005900690079008900990109011901290139014901590169017901890199020902190229023902490259026902790289029903090319032903390349035903690379038903990409041904290439044904590469047904890499050905190529053905490559056905790589059906090619062906390649065906690679068906990709071907290739074907590769077907890799080908190829083908490859086908790889089909090919092909390949095909690979098909991009101910291039104910591069107910891099110911191129113911491159116911791189119912091219122912391249125912691279128912991309131913291339134913591369137913891399140914191429143914491459146914791489149915091519152915391549155915691579158915991609161916291639164916591669167916891699170917191729173917491759176917791789179918091819182918391849185918691879188918991909191919291939194919591969197919891999200920192029203920492059206920792089209921092119212921392149215921692179218921992209221922292239224922592269227922892299230923192329233923492359236923792389239924092419242924392449245924692479248924992509251925292539254925592569257925892599260926192629263926492659266926792689269927092719272927392749275927692779278927992809281928292839284928592869287928892899290929192929293929492959296929792989299930093019302930393049305930693079308930993109311931293139314931593169317931893199320932193229323932493259326932793289329933093319332933393349335933693379338933993409341934293439344934593469347934893499350935193529353935493559356935793589359936093619362936393649365936693679368936993709371937293739374937593769377937893799380938193829383938493859386938793889389939093919392939393949395939693979398939994009401940294039404940594069407940894099410941194129413941494159416941794189419942094219422942394249425942694279428942994309431943294339434943594369437943894399440944194429443944494459446944794489449945094519452945394549455945694579458945994609461946294639464946594669467946894699470947194729473947494759476947794789479948094819482948394849485948694879488948994909491949294939494949594969497949894999500950195029503950495059506950795089509951095119512951395149515951695179518951995209521952295239524952595269527952895299530953195329533953495359536953795389539954095419542954395449545 |
- <!DOCTYPE html>
- <html xmlns="http://www.w3.org/1999/xhtml" lang="" xml:lang="">
- <head>
- <meta charset="utf-8" />
- <meta name="generator" content="pandoc" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
- <meta name="author" content="Version 2.13.0.9" />
- <title>Zint Barcode Generator and Zint Barcode Studio User Manual</title>
- <style>
- html {
- font-family: TeX Gyre Pagella;
- color: #1a1a1a;
- background-color: #ffffff;
- }
- body {
- line-height: 1.2;
- margin: 0 auto;
- max-width: 50em;
- padding-left: 50px;
- padding-right: 50px;
- padding-top: 50px;
- padding-bottom: 50px;
- hyphens: auto;
- overflow-wrap: break-word;
- text-rendering: optimizeLegibility;
- font-kerning: normal;
- }
- @media (max-width: 600px) {
- body {
- font-size: 0.9em;
- padding: 12px;
- }
- h1 {
- font-size: 1.8em;
- }
- }
- @media print {
- html {
- background-color: white;
- }
- body {
- background-color: transparent;
- color: black;
- font-size: 12pt;
- }
- p, h2, h3 {
- orphans: 3;
- widows: 3;
- }
- h2, h3, h4 {
- page-break-after: avoid;
- }
- }
- p {
- margin: 1em 0;
- }
- a {
- color: #800000;
- }
- a:visited {
- color: #800000;
- }
- a:not(:hover) {
- text-decoration: none;
- }
- figure {
- margin-left: 0;
- margin-right: 0;
- text-align: center;
- }
- img {
- max-width: 100%;
- }
- img.btn {
- height: 0.9em;
- }
- img.win {
- max-width: 80%;
- }
- img.pop {
- max-width: 60%;
- }
- img[src*="gui_set_printing_scale.png"] {
- max-width: 50%;
- }
- img.lin {
- max-height: 10em;
- }
- img[src*="code128_rotate90.svg"] {
- max-height: 20em;
- }
- img.i2d {
- max-height: 10em;
- }
- img[src*="upnqr.svg"] {
- max-height: 20em;
- }
- img.i2dbig {
- }
- img.trk {
- max-height: 3em;
- }
- img[src*="fim.svg"] {
- max-height: 10em;
- }
- img.dotty {
- max-height: 7em;
- }
- img.ultra {
- max-height: 12em;
- }
- img.upcean {
- max-height: 12em;
- }
- h1, h2, h3, h4, h5, h6 {
- margin-top: 1.4em;
- }
- h5, h6 {
- font-size: 1em;
- font-style: italic;
- }
- h6 {
- font-weight: normal;
- }
- ol, ul {
- padding-left: 1.7em;
- margin-top: 1em;
- }
- li > ol, li > ul {
- margin-top: 0;
- }
- dt {
- font-weight:bold;
- }
- blockquote {
- margin: 1em 0 1em 1.7em;
- padding-left: 1em;
- border-left: 2px solid #e6e6e6;
- color: #606060;
- }
- code {
- font-family: Liberation Mono;
- font-size: 90%;
- margin: 0;
- hyphens: manual;
- color: #000000;
- }
- pre {
- margin: 1em 0;
- overflow: auto;
- }
- pre code {
- padding: 0;
- overflow: visible;
- overflow-wrap: normal;
- }
- .sourceCode {
- background-color: transparent;
- overflow: visible;
- }
- div.sourceCode {
- background-color: #f7f7f7;
- padding: 0.3em 0;
- }
- aside.footnotes {
- font-size:90%;
- }
- hr {
- background-color: #1a1a1a;
- border: none;
- height: 1px;
- margin: 1em 0;
- }
- table {
- margin: 0 auto 0.4em auto;
- border-collapse: collapse;
- overflow-x: auto;
- font-variant-numeric: lining-nums tabular-nums;
- }
- #tbl\:gridmatrix_eccs {
- margin-top: 1em;
- }
- table caption {
- margin-bottom: 0.75em;
- }
- tbody {
- margin-top: 0.5em;
- border-top: 1px solid #1a1a1a;
- border-bottom: 1px solid #1a1a1a;
- }
- th {
- border-top: 1px solid #1a1a1a;
- padding: 0.25em 0.5em 0.25em 0.5em;
- }
- td {
- padding: 0.125em 0.5em 0.25em 0.5em;
- vertical-align: top;
- }
- tbody tr:first-child td {
- padding-top: 0.5em;
- }
- thead > tr {
- margin-bottom: 4em;
- text-align: center;
- }
- #banner {
- text-align: center;
- }
- #banner img.img_hdr {
- height: 7em;
- }
- #TOC {
- font-size: 115%;
- }
- #TOC li {
- list-style: none;
- margin-bottom: 0.1em;
- margin-top: 0.2em;
- }
- #TOC ul {
- padding-left: 1.3em;
- }
- #TOC > ul {
- padding-left: 0;
- }
- #TOC > ul > li {
- margin-top: 0.5em;
- }
- #TOC > ul > li > a {
- font-weight: bold;
- }
- #TOC a:not(:hover) {
- color: #1a1a1a;
- text-decoration: none;
- }
- dd > p {
- margin-bottom:1.5em;
- margin-top:0.5em;
- }
- #exit-status + dl > dt {
- float: left;
- }
- #exit-status + dl > dd {
- margin-bottom: 1em;
- }
- code{white-space: pre-wrap;}
- span.smallcaps{font-variant: small-caps;}
- div.columns{display: flex; gap: min(4vw, 1.5em);}
- div.column{flex: auto; overflow-x: auto;}
- div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;}
- /* The extra [class] is a hack that increases specificity enough to
- override a similar rule in reveal.js */
- ul.task-list[class]{list-style: none;}
- ul.task-list li input[type="checkbox"] {
- font-size: inherit;
- width: 0.8em;
- margin: 0 0.8em 0.2em -1.6em;
- vertical-align: middle;
- }
- .display.math{display: block; text-align: center; margin: 0.5rem auto;}
- /* CSS for syntax highlighting */
- html { -webkit-text-size-adjust: 100%; }
- pre > code.sourceCode { white-space: pre; position: relative; }
- pre > code.sourceCode > span { display: inline-block; line-height: 1.25; }
- pre > code.sourceCode > span:empty { height: 1.2em; }
- .sourceCode { overflow: visible; }
- code.sourceCode > span { color: inherit; text-decoration: inherit; }
- div.sourceCode { margin: 1em 0; }
- pre.sourceCode { margin: 0; }
- @media screen {
- div.sourceCode { overflow: auto; }
- }
- @media print {
- pre > code.sourceCode { white-space: pre-wrap; }
- pre > code.sourceCode > span { text-indent: -5em; padding-left: 5em; }
- }
- pre.numberSource code
- { counter-reset: source-line 0; }
- pre.numberSource code > span
- { position: relative; left: -4em; counter-increment: source-line; }
- pre.numberSource code > span > a:first-child::before
- { content: counter(source-line);
- position: relative; left: -1em; text-align: right; vertical-align: baseline;
- border: none; display: inline-block;
- -webkit-touch-callout: none; -webkit-user-select: none;
- -khtml-user-select: none; -moz-user-select: none;
- -ms-user-select: none; user-select: none;
- padding: 0 4px; width: 4em;
- color: #aaaaaa;
- }
- pre.numberSource { margin-left: 3em; border-left: 1px solid #aaaaaa; padding-left: 4px; }
- div.sourceCode
- { }
- @media screen {
- pre > code.sourceCode > span > a:first-child::before { text-decoration: underline; }
- }
- code span.al { color: #ff0000; } /* Alert */
- code span.an { color: #008000; } /* Annotation */
- code span.at { } /* Attribute */
- code span.bu { } /* BuiltIn */
- code span.cf { color: #0000ff; } /* ControlFlow */
- code span.ch { color: #008080; } /* Char */
- code span.cn { } /* Constant */
- code span.co { color: #008000; } /* Comment */
- code span.cv { color: #008000; } /* CommentVar */
- code span.do { color: #008000; } /* Documentation */
- code span.er { color: #ff0000; font-weight: bold; } /* Error */
- code span.ex { } /* Extension */
- code span.im { } /* Import */
- code span.in { color: #008000; } /* Information */
- code span.kw { color: #0000ff; } /* Keyword */
- code span.op { } /* Operator */
- code span.ot { color: #ff4000; } /* Other */
- code span.pp { color: #ff4000; } /* Preprocessor */
- code span.sc { color: #008080; } /* SpecialChar */
- code span.ss { color: #008080; } /* SpecialString */
- code span.st { color: #008080; } /* String */
- code span.va { } /* Variable */
- code span.vs { color: #008080; } /* VerbatimString */
- code span.wa { color: #008000; font-weight: bold; } /* Warning */
- </style>
- <!--[if lt IE 9]>
- <script src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv-printshiv.min.js"></script>
- <![endif]-->
- </head>
- <body>
- <div id="banner">
- <img src="images/zint.png" class="img_hdr">
- <img src="images/zint-qt.png" class="img_hdr">
- </div>
- <header id="title-block-header">
- <h1 class="title">Zint Barcode Generator and Zint Barcode Studio User
- Manual</h1>
- <p class="author">Version 2.13.0.9</p>
- <p class="date">December 2024</p>
- </header>
- <nav id="TOC" role="doc-toc">
- <ul>
- <li><a href="#introduction" id="toc-introduction">1. Introduction</a>
- <ul>
- <li><a href="#glossary" id="toc-glossary">1.1 Glossary</a></li>
- </ul></li>
- <li><a href="#installing-zint" id="toc-installing-zint">2. Installing
- Zint</a>
- <ul>
- <li><a href="#linux" id="toc-linux">2.1 Linux</a></li>
- <li><a href="#bsd" id="toc-bsd">2.2 BSD</a></li>
- <li><a href="#microsoft-windows" id="toc-microsoft-windows">2.3
- Microsoft Windows</a></li>
- <li><a href="#apple-macos" id="toc-apple-macos">2.4 Apple macOS</a></li>
- <li><a href="#zint-tcl-backend" id="toc-zint-tcl-backend">2.5 Zint Tcl
- Backend</a></li>
- </ul></li>
- <li><a href="#using-zint-barcode-studio"
- id="toc-using-zint-barcode-studio">3. Using Zint Barcode Studio</a>
- <ul>
- <li><a href="#main-window-and-data-tab"
- id="toc-main-window-and-data-tab">3.1 Main Window and Data Tab</a></li>
- <li><a href="#gs1-composite-groupbox"
- id="toc-gs1-composite-groupbox">3.2 GS1 Composite Groupbox</a></li>
- <li><a href="#additional-ecidata-segments-groupbox"
- id="toc-additional-ecidata-segments-groupbox">3.3 Additional ECI/Data
- Segments Groupbox</a></li>
- <li><a href="#symbology-specific-groupbox"
- id="toc-symbology-specific-groupbox">3.4 Symbology-specific
- Groupbox</a></li>
- <li><a href="#symbology-specific-tab"
- id="toc-symbology-specific-tab">3.5 Symbology-specific Tab</a></li>
- <li><a href="#appearance-tab" id="toc-appearance-tab">3.6 Appearance
- Tab</a></li>
- <li><a href="#data-dialog" id="toc-data-dialog">3.7 Data Dialog</a></li>
- <li><a href="#sequence-dialog" id="toc-sequence-dialog">3.8 Sequence
- Dialog</a></li>
- <li><a href="#export-dialog" id="toc-export-dialog">3.9 Export
- Dialog</a></li>
- <li><a href="#cli-equivalent-dialog" id="toc-cli-equivalent-dialog">3.10
- CLI Equivalent Dialog</a></li>
- </ul></li>
- <li><a href="#using-the-command-line" id="toc-using-the-command-line">4.
- Using the Command Line</a>
- <ul>
- <li><a href="#inputting-data" id="toc-inputting-data">4.1 Inputting
- Data</a></li>
- <li><a href="#directing-output" id="toc-directing-output">4.2 Directing
- Output</a></li>
- <li><a href="#selecting-barcode-type"
- id="toc-selecting-barcode-type">4.3 Selecting Barcode Type</a></li>
- <li><a href="#adjusting-height" id="toc-adjusting-height">4.4 Adjusting
- Height</a></li>
- <li><a href="#adjusting-whitespace" id="toc-adjusting-whitespace">4.5
- Adjusting Whitespace</a></li>
- <li><a href="#adding-boundary-bars-and-boxes"
- id="toc-adding-boundary-bars-and-boxes">4.6 Adding Boundary Bars and
- Boxes</a></li>
- <li><a href="#using-colour" id="toc-using-colour">4.7 Using
- Colour</a></li>
- <li><a href="#rotating-the-symbol" id="toc-rotating-the-symbol">4.8
- Rotating the Symbol</a></li>
- <li><a href="#adjusting-image-size-x-dimension"
- id="toc-adjusting-image-size-x-dimension">4.9 Adjusting Image Size
- (X-dimension)</a>
- <ul>
- <li><a href="#scaling-by-x-dimension-and-resolution"
- id="toc-scaling-by-x-dimension-and-resolution">4.9.1 Scaling by
- X-dimension and Resolution</a></li>
- <li><a href="#scaling-example" id="toc-scaling-example">4.9.2 Scaling
- Example</a></li>
- <li><a href="#maxicode-raster-scaling"
- id="toc-maxicode-raster-scaling">4.9.3 MaxiCode Raster Scaling</a></li>
- </ul></li>
- <li><a href="#human-readable-text-hrt-options"
- id="toc-human-readable-text-hrt-options">4.10 Human Readable Text (HRT)
- Options</a></li>
- <li><a href="#input-modes" id="toc-input-modes">4.11 Input Modes</a>
- <ul>
- <li><a href="#unicode-data-and-gs1-modes"
- id="toc-unicode-data-and-gs1-modes">4.11.1 Unicode, Data, and GS1
- Modes</a></li>
- <li><a href="#input-modes-and-eci" id="toc-input-modes-and-eci">4.11.2
- Input Modes and ECI</a>
- <ul>
- <li><a href="#input-modes-and-eci-example-1"
- id="toc-input-modes-and-eci-example-1">4.11.2.1 Input Modes and ECI
- Example 1</a></li>
- <li><a href="#input-modes-and-eci-example-2"
- id="toc-input-modes-and-eci-example-2">4.11.2.2 Input Modes and ECI
- Example 2</a></li>
- <li><a href="#input-modes-and-eci-example-3"
- id="toc-input-modes-and-eci-example-3">4.11.2.3 Input Modes and ECI
- Example 3</a></li>
- </ul></li>
- </ul></li>
- <li><a href="#batch-processing" id="toc-batch-processing">4.12 Batch
- Processing</a></li>
- <li><a href="#direct-output-to-stdout"
- id="toc-direct-output-to-stdout">4.13 Direct Output to stdout</a></li>
- <li><a href="#automatic-filenames" id="toc-automatic-filenames">4.14
- Automatic Filenames</a></li>
- <li><a href="#working-with-dots" id="toc-working-with-dots">4.15 Working
- with Dots</a></li>
- <li><a href="#multiple-segments" id="toc-multiple-segments">4.16
- Multiple Segments</a></li>
- <li><a href="#structured-append" id="toc-structured-append">4.17
- Structured Append</a></li>
- <li><a href="#help-options" id="toc-help-options">4.18 Help
- Options</a></li>
- <li><a href="#other-options" id="toc-other-options">4.19 Other
- Options</a></li>
- </ul></li>
- <li><a href="#using-the-api" id="toc-using-the-api">5. Using the API</a>
- <ul>
- <li><a href="#creating-and-deleting-symbols"
- id="toc-creating-and-deleting-symbols">5.1 Creating and Deleting
- Symbols</a></li>
- <li><a href="#encoding-and-saving-to-file"
- id="toc-encoding-and-saving-to-file">5.2 Encoding and Saving to
- File</a></li>
- <li><a href="#encoding-and-printing-functions-in-depth"
- id="toc-encoding-and-printing-functions-in-depth">5.3 Encoding and
- Printing Functions in Depth</a></li>
- <li><a href="#buffering-symbols-in-memory-raster"
- id="toc-buffering-symbols-in-memory-raster">5.4 Buffering Symbols in
- Memory (raster)</a></li>
- <li><a href="#buffering-symbols-in-memory-vector"
- id="toc-buffering-symbols-in-memory-vector">5.5 Buffering Symbols in
- Memory (vector)</a></li>
- <li><a href="#buffering-symbols-in-memory-memfile"
- id="toc-buffering-symbols-in-memory-memfile">5.6 Buffering Symbols in
- Memory (memfile)</a></li>
- <li><a href="#setting-options" id="toc-setting-options">5.7 Setting
- Options</a></li>
- <li><a href="#handling-errors" id="toc-handling-errors">5.8 Handling
- Errors</a></li>
- <li><a href="#specifying-a-symbology"
- id="toc-specifying-a-symbology">5.9 Specifying a Symbology</a></li>
- <li><a href="#adjusting-output-options"
- id="toc-adjusting-output-options">5.10 Adjusting Output Options</a></li>
- <li><a href="#setting-the-input-mode"
- id="toc-setting-the-input-mode">5.11 Setting the Input Mode</a></li>
- <li><a href="#multiple-segments-1" id="toc-multiple-segments-1">5.12
- Multiple Segments</a></li>
- <li><a href="#scaling-helpers" id="toc-scaling-helpers">5.13 Scaling
- Helpers</a></li>
- <li><a href="#verifying-symbology-availability"
- id="toc-verifying-symbology-availability">5.14 Verifying Symbology
- Availability</a></li>
- <li><a href="#checking-symbology-capabilities"
- id="toc-checking-symbology-capabilities">5.15 Checking Symbology
- Capabilities</a></li>
- <li><a href="#zint-version" id="toc-zint-version">5.16 Zint
- Version</a></li>
- </ul></li>
- <li><a href="#types-of-symbology" id="toc-types-of-symbology">6. Types
- of Symbology</a>
- <ul>
- <li><a href="#one-dimensional-symbols"
- id="toc-one-dimensional-symbols">6.1 One-Dimensional Symbols</a>
- <ul>
- <li><a href="#code-11" id="toc-code-11">6.1.1 Code 11</a></li>
- <li><a href="#code-2-of-5" id="toc-code-2-of-5">6.1.2 Code 2 of 5</a>
- <ul>
- <li><a href="#standard-code-2-of-5"
- id="toc-standard-code-2-of-5">6.1.2.1 Standard Code 2 of 5</a></li>
- <li><a href="#iata-code-2-of-5" id="toc-iata-code-2-of-5">6.1.2.2 IATA
- Code 2 of 5</a></li>
- <li><a href="#industrial-code-2-of-5"
- id="toc-industrial-code-2-of-5">6.1.2.3 Industrial Code 2 of 5</a></li>
- <li><a href="#interleaved-code-2-of-5-iso-16390"
- id="toc-interleaved-code-2-of-5-iso-16390">6.1.2.4 Interleaved Code 2 of
- 5 (ISO 16390)</a></li>
- <li><a href="#code-2-of-5-data-logic"
- id="toc-code-2-of-5-data-logic">6.1.2.5 Code 2 of 5 Data Logic</a></li>
- <li><a href="#itf-14" id="toc-itf-14">6.1.2.6 ITF-14</a></li>
- <li><a href="#deutsche-post-leitcode"
- id="toc-deutsche-post-leitcode">6.1.2.7 Deutsche Post Leitcode</a></li>
- <li><a href="#deutsche-post-identcode"
- id="toc-deutsche-post-identcode">6.1.2.8 Deutsche Post
- Identcode</a></li>
- </ul></li>
- <li><a href="#upc-universal-product-code-iso-15420"
- id="toc-upc-universal-product-code-iso-15420">6.1.3 UPC (Universal
- Product Code) (ISO 15420)</a>
- <ul>
- <li><a href="#upc-version-a" id="toc-upc-version-a">6.1.3.1 UPC Version
- A</a></li>
- <li><a href="#upc-version-e" id="toc-upc-version-e">6.1.3.2 UPC Version
- E</a></li>
- </ul></li>
- <li><a href="#ean-european-article-number-iso-15420"
- id="toc-ean-european-article-number-iso-15420">6.1.4 EAN (European
- Article Number) (ISO 15420)</a>
- <ul>
- <li><a href="#ean-2-ean-5-ean-8-and-ean-13"
- id="toc-ean-2-ean-5-ean-8-and-ean-13">6.1.4.1 EAN-2, EAN-5, EAN-8 and
- EAN-13</a></li>
- <li><a href="#sbn-isbn-and-isbn-13"
- id="toc-sbn-isbn-and-isbn-13">6.1.4.2 SBN, ISBN and ISBN-13</a></li>
- </ul></li>
- <li><a href="#plessey" id="toc-plessey">6.1.5 Plessey</a>
- <ul>
- <li><a href="#uk-plessey" id="toc-uk-plessey">6.1.5.1 UK
- Plessey</a></li>
- <li><a href="#msi-plessey" id="toc-msi-plessey">6.1.5.2 MSI
- Plessey</a></li>
- </ul></li>
- <li><a href="#telepen" id="toc-telepen">6.1.6 Telepen</a>
- <ul>
- <li><a href="#telepen-alpha" id="toc-telepen-alpha">6.1.6.1 Telepen
- Alpha</a></li>
- <li><a href="#telepen-numeric" id="toc-telepen-numeric">6.1.6.2 Telepen
- Numeric</a></li>
- </ul></li>
- <li><a href="#code-39" id="toc-code-39">6.1.7 Code 39</a>
- <ul>
- <li><a href="#standard-code-39-iso-16388"
- id="toc-standard-code-39-iso-16388">6.1.7.1 Standard Code 39 (ISO
- 16388)</a></li>
- <li><a href="#extended-code-39" id="toc-extended-code-39">6.1.7.2
- Extended Code 39</a></li>
- <li><a href="#code-93" id="toc-code-93">6.1.7.3 Code 93</a></li>
- <li><a href="#pzn-pharmazentralnummer"
- id="toc-pzn-pharmazentralnummer">6.1.7.4 PZN
- (Pharmazentralnummer)</a></li>
- <li><a href="#logmars" id="toc-logmars">6.1.7.5 LOGMARS</a></li>
- <li><a href="#code-32" id="toc-code-32">6.1.7.6 Code 32</a></li>
- <li><a href="#hibc-code-39" id="toc-hibc-code-39">6.1.7.7 HIBC Code
- 39</a></li>
- <li><a href="#vehicle-identification-number-vin"
- id="toc-vehicle-identification-number-vin">6.1.7.8 Vehicle
- Identification Number (VIN)</a></li>
- </ul></li>
- <li><a href="#codabar-en-798" id="toc-codabar-en-798">6.1.8 Codabar (EN
- 798)</a></li>
- <li><a href="#pharmacode" id="toc-pharmacode">6.1.9 Pharmacode</a></li>
- <li><a href="#code-128" id="toc-code-128">6.1.10 Code 128</a>
- <ul>
- <li><a href="#standard-code-128-iso-15417"
- id="toc-standard-code-128-iso-15417">6.1.10.1 Standard Code 128 (ISO
- 15417)</a></li>
- <li><a href="#code-128-suppress-code-set-c-code-sets-a-and-b-only"
- id="toc-code-128-suppress-code-set-c-code-sets-a-and-b-only">6.1.10.2
- Code 128 Suppress Code Set C (Code Sets A and B only)</a></li>
- <li><a href="#gs1-128" id="toc-gs1-128">6.1.10.3 GS1-128</a></li>
- <li><a href="#ean-14" id="toc-ean-14">6.1.10.4 EAN-14</a></li>
- <li><a href="#nve-18-sscc-18" id="toc-nve-18-sscc-18">6.1.10.5 NVE-18
- (SSCC-18)</a></li>
- <li><a href="#hibc-code-128" id="toc-hibc-code-128">6.1.10.6 HIBC Code
- 128</a></li>
- <li><a href="#dpd-code" id="toc-dpd-code">6.1.10.7 DPD Code</a></li>
- <li><a href="#upu-s10" id="toc-upu-s10">6.1.10.8 UPU S10</a></li>
- </ul></li>
- <li><a href="#gs1-databar-iso-24724"
- id="toc-gs1-databar-iso-24724">6.1.11 GS1 DataBar (ISO 24724)</a>
- <ul>
- <li><a href="#gs1-databar-omnidirectional-and-gs1-databar-truncated"
- id="toc-gs1-databar-omnidirectional-and-gs1-databar-truncated">6.1.11.1
- GS1 DataBar Omnidirectional and GS1 DataBar Truncated</a></li>
- <li><a href="#gs1-databar-limited" id="toc-gs1-databar-limited">6.1.11.2
- GS1 DataBar Limited</a></li>
- <li><a href="#gs1-databar-expanded"
- id="toc-gs1-databar-expanded">6.1.11.3 GS1 DataBar Expanded</a></li>
- </ul></li>
- <li><a href="#korea-post-barcode" id="toc-korea-post-barcode">6.1.12
- Korea Post Barcode</a></li>
- <li><a href="#channel-code" id="toc-channel-code">6.1.13 Channel
- Code</a></li>
- <li><a href="#bc412-semi-t1-95" id="toc-bc412-semi-t1-95">6.1.14 BC412
- (SEMI T1-95)</a></li>
- </ul></li>
- <li><a href="#stacked-symbologies" id="toc-stacked-symbologies">6.2
- Stacked Symbologies</a>
- <ul>
- <li><a href="#basic-symbol-stacking"
- id="toc-basic-symbol-stacking">6.2.1 Basic Symbol Stacking</a></li>
- <li><a href="#codablock-f" id="toc-codablock-f">6.2.2
- Codablock-F</a></li>
- <li><a href="#code-16k-en-12323" id="toc-code-16k-en-12323">6.2.3 Code
- 16K (EN 12323)</a></li>
- <li><a href="#pdf417-iso-15438" id="toc-pdf417-iso-15438">6.2.4 PDF417
- (ISO 15438)</a></li>
- <li><a href="#compact-pdf417-iso-15438"
- id="toc-compact-pdf417-iso-15438">6.2.5 Compact PDF417 (ISO
- 15438)</a></li>
- <li><a href="#micropdf417-iso-24728"
- id="toc-micropdf417-iso-24728">6.2.6 MicroPDF417 (ISO 24728)</a></li>
- <li><a href="#gs1-databar-stacked-iso-24724"
- id="toc-gs1-databar-stacked-iso-24724">6.2.7 GS1 DataBar Stacked (ISO
- 24724)</a>
- <ul>
- <li><a href="#gs1-databar-stacked" id="toc-gs1-databar-stacked">6.2.7.1
- GS1 DataBar Stacked</a></li>
- <li><a href="#gs1-databar-stacked-omnidirectional"
- id="toc-gs1-databar-stacked-omnidirectional">6.2.7.2 GS1 DataBar Stacked
- Omnidirectional</a></li>
- <li><a href="#gs1-databar-expanded-stacked"
- id="toc-gs1-databar-expanded-stacked">6.2.7.3 GS1 DataBar Expanded
- Stacked</a></li>
- </ul></li>
- <li><a href="#code-49" id="toc-code-49">6.2.8 Code 49</a></li>
- </ul></li>
- <li><a href="#gs1-composite-symbols-iso-24723"
- id="toc-gs1-composite-symbols-iso-24723">6.3 GS1 Composite Symbols (ISO
- 24723)</a>
- <ul>
- <li><a href="#cc-a" id="toc-cc-a">6.3.1 CC-A</a></li>
- <li><a href="#cc-b" id="toc-cc-b">6.3.2 CC-B</a></li>
- <li><a href="#cc-c" id="toc-cc-c">6.3.3 CC-C</a></li>
- </ul></li>
- <li><a href="#two-track-symbols" id="toc-two-track-symbols">6.4
- Two-Track Symbols</a>
- <ul>
- <li><a href="#two-track-pharmacode" id="toc-two-track-pharmacode">6.4.1
- Two-Track Pharmacode</a></li>
- <li><a href="#postnet" id="toc-postnet">6.4.2 POSTNET</a></li>
- <li><a href="#planet" id="toc-planet">6.4.3 PLANET</a></li>
- <li><a href="#brazilian-cepnet" id="toc-brazilian-cepnet">6.4.4
- Brazilian CEPNet</a></li>
- <li><a href="#dx-film-edge-barcode" id="toc-dx-film-edge-barcode">6.4.5
- DX Film Edge Barcode</a></li>
- </ul></li>
- <li><a href="#state-postal-codes" id="toc-state-postal-codes">6.5
- 4-State Postal Codes</a>
- <ul>
- <li><a href="#australia-post-4-state-symbols"
- id="toc-australia-post-4-state-symbols">6.5.1 Australia Post 4-State
- Symbols</a>
- <ul>
- <li><a href="#customer-barcodes" id="toc-customer-barcodes">6.5.1.1
- Customer Barcodes</a></li>
- <li><a href="#reply-paid-barcode" id="toc-reply-paid-barcode">6.5.1.2
- Reply Paid Barcode</a></li>
- <li><a href="#routing-barcode" id="toc-routing-barcode">6.5.1.3 Routing
- Barcode</a></li>
- <li><a href="#redirect-barcode" id="toc-redirect-barcode">6.5.1.4
- Redirect Barcode</a></li>
- </ul></li>
- <li><a href="#dutch-post-kix-code" id="toc-dutch-post-kix-code">6.5.2
- Dutch Post KIX Code</a></li>
- <li><a href="#royal-mail-4-state-customer-code-rm4scc"
- id="toc-royal-mail-4-state-customer-code-rm4scc">6.5.3 Royal Mail
- 4-State Customer Code (RM4SCC)</a></li>
- <li><a href="#royal-mail-4-state-mailmark"
- id="toc-royal-mail-4-state-mailmark">6.5.4 Royal Mail 4-State
- Mailmark</a></li>
- <li><a href="#usps-intelligent-mail"
- id="toc-usps-intelligent-mail">6.5.5 USPS Intelligent Mail</a></li>
- <li><a href="#japanese-postal-code" id="toc-japanese-postal-code">6.5.6
- Japanese Postal Code</a></li>
- <li><a href="#daft-code" id="toc-daft-code">6.5.7 DAFT Code</a></li>
- </ul></li>
- <li><a href="#matrix-symbols" id="toc-matrix-symbols">6.6 Matrix
- Symbols</a>
- <ul>
- <li><a href="#data-matrix-iso-16022"
- id="toc-data-matrix-iso-16022">6.6.1 Data Matrix (ISO 16022)</a></li>
- <li><a href="#royal-mail-2d-mailmark-cmdm-data-matrix"
- id="toc-royal-mail-2d-mailmark-cmdm-data-matrix">6.6.2 Royal Mail 2D
- Mailmark (CMDM) (Data Matrix)</a></li>
- <li><a href="#qr-code-iso-18004" id="toc-qr-code-iso-18004">6.6.3 QR
- Code (ISO 18004)</a></li>
- <li><a href="#micro-qr-code-iso-18004"
- id="toc-micro-qr-code-iso-18004">6.6.4 Micro QR Code (ISO
- 18004)</a></li>
- <li><a href="#rectangular-micro-qr-code-rmqr-iso-23941"
- id="toc-rectangular-micro-qr-code-rmqr-iso-23941">6.6.5 Rectangular
- Micro QR Code (rMQR) (ISO 23941)</a></li>
- <li><a href="#upnqr-univerzalnega-plačilnega-naloga-qr"
- id="toc-upnqr-univerzalnega-plačilnega-naloga-qr">6.6.6 UPNQR
- (Univerzalnega Plačilnega Naloga QR)</a></li>
- <li><a href="#maxicode-iso-16023" id="toc-maxicode-iso-16023">6.6.7
- MaxiCode (ISO 16023)</a></li>
- <li><a href="#aztec-code-iso-24778" id="toc-aztec-code-iso-24778">6.6.8
- Aztec Code (ISO 24778)</a></li>
- <li><a href="#aztec-runes-iso-24778"
- id="toc-aztec-runes-iso-24778">6.6.9 Aztec Runes (ISO 24778)</a></li>
- <li><a href="#code-one" id="toc-code-one">6.6.10 Code One</a></li>
- <li><a href="#grid-matrix" id="toc-grid-matrix">6.6.11 Grid
- Matrix</a></li>
- <li><a href="#dotcode" id="toc-dotcode">6.6.12 DotCode</a></li>
- <li><a href="#han-xin-code-iso-20830"
- id="toc-han-xin-code-iso-20830">6.6.13 Han Xin Code (ISO 20830)</a></li>
- <li><a href="#ultracode" id="toc-ultracode">6.6.14 Ultracode</a></li>
- </ul></li>
- <li><a href="#other-barcode-like-markings"
- id="toc-other-barcode-like-markings">6.7 Other Barcode-Like Markings</a>
- <ul>
- <li><a href="#facing-identification-mark-fim"
- id="toc-facing-identification-mark-fim">6.7.1 Facing Identification Mark
- (FIM)</a></li>
- <li><a href="#flattermarken" id="toc-flattermarken">6.7.2
- Flattermarken</a></li>
- </ul></li>
- </ul></li>
- <li><a href="#legal-and-version-information"
- id="toc-legal-and-version-information">7. Legal and Version
- Information</a>
- <ul>
- <li><a href="#license" id="toc-license">7.1 License</a></li>
- <li><a href="#patent-issues" id="toc-patent-issues">7.2 Patent
- Issues</a></li>
- <li><a href="#version-information" id="toc-version-information">7.3
- Version Information</a></li>
- <li><a href="#sources-of-information"
- id="toc-sources-of-information">7.4 Sources of Information</a></li>
- <li><a href="#standards-compliance" id="toc-standards-compliance">7.5
- Standards Compliance</a>
- <ul>
- <li><a href="#symbology-standards" id="toc-symbology-standards">7.5.1
- Symbology Standards</a></li>
- <li><a href="#general-standards" id="toc-general-standards">7.5.2
- General Standards</a></li>
- </ul></li>
- </ul></li>
- <li><a href="#annex-a.-character-encoding"
- id="toc-annex-a.-character-encoding">Annex A. Character Encoding</a>
- <ul>
- <li><a href="#a.1-ascii-standard" id="toc-a.1-ascii-standard">A.1 ASCII
- Standard</a></li>
- <li><a href="#a.2-latin-alphabet-no.-1-isoiec-8859-1"
- id="toc-a.2-latin-alphabet-no.-1-isoiec-8859-1">A.2 Latin Alphabet No. 1
- (ISO/IEC 8859-1)</a></li>
- </ul></li>
- <li><a href="#annex-b.-qt-backend-qzint"
- id="toc-annex-b.-qt-backend-qzint">Annex B. Qt Backend QZint</a></li>
- <li><a href="#annex-c.-tcl-backend-binding"
- id="toc-annex-c.-tcl-backend-binding">Annex C. Tcl Backend
- Binding</a></li>
- <li><a href="#annex-d.-man-page-zint1"
- id="toc-annex-d.-man-page-zint1">Annex D. Man Page ZINT(1)</a><ul>
- <li><a href="#name" id="toc-name">NAME</a></li>
- <li><a href="#synopsis" id="toc-synopsis">SYNOPSIS</a></li>
- <li><a href="#description" id="toc-description">DESCRIPTION</a></li>
- <li><a href="#options" id="toc-options">OPTIONS</a></li>
- <li><a href="#exit-status" id="toc-exit-status">EXIT STATUS</a></li>
- <li><a href="#examples" id="toc-examples">EXAMPLES</a></li>
- <li><a href="#bugs" id="toc-bugs">BUGS</a></li>
- <li><a href="#see-also" id="toc-see-also">SEE ALSO</a></li>
- <li><a href="#conforming-to" id="toc-conforming-to">CONFORMING
- TO</a></li>
- <li><a href="#copyright" id="toc-copyright">COPYRIGHT</a></li>
- <li><a href="#author" id="toc-author">AUTHOR</a></li>
- </ul>
- </nav>
- <h1 id="introduction">1. Introduction</h1>
- <p>The Zint project aims to provide a complete cross-platform open
- source barcode generating solution. The package currently consists of a
- Qt-based GUI, a CLI command line executable and a library with an API to
- allow developers access to the capabilities of Zint. It is hoped that
- Zint provides a solution which is flexible enough for professional users
- while at the same time takes care of as much of the processing as
- possible to allow easy translation from input data to barcode image.</p>
- <p>The library which forms the main component of the Zint project is
- currently able to encode data in over 50 barcode symbologies (types of
- barcode), for each of which it is possible to translate that data from
- either UTF-8 (Unicode) or a raw 8-bit data stream. The image can be
- rendered as a</p>
- <ul>
- <li>Windows Bitmap (BMP),</li>
- <li>Enhanced Metafile Format (EMF),</li>
- <li>Encapsulated PostScript (EPS),</li>
- <li>Graphics Interchange Format (GIF),</li>
- <li>ZSoft Paintbrush (PCX) image,</li>
- <li>Portable Network Graphic (PNG) image,</li>
- <li>Tagged Image File Format (TIF), or a</li>
- <li>Scalable Vector Graphic (SVG).</li>
- </ul>
- <p>Many options are available for setting the characteristics of the
- output image including the size and colour of the image, the amount of
- error correction used in the symbol and the orientation of the
- image.</p>
- <h2 id="glossary">1.1 Glossary</h2>
- <p>Some of the words and phrases used in this document are specific to
- barcoding, and so a brief explanation is given to help
- understanding:</p>
- <dl>
- <dt>symbol</dt>
- <dd>
- <p>A symbol is an image which encodes data according to one of the
- standards. This encompasses barcodes (linear symbols) as well as any of
- the other methods of representing data used in this program.</p>
- </dd>
- <dt>symbology</dt>
- <dd>
- <p>A method of encoding data to create a certain type of symbol.</p>
- </dd>
- <dt>linear</dt>
- <dd>
- <p>A linear or one-dimensional symbol is one which consists of bars and
- spaces, and is what most people associate with the term ‘barcode’.
- Examples include Code 128.</p>
- </dd>
- <dt>stacked</dt>
- <dd>
- <p>A stacked symbol consists of multiple linear symbols placed one above
- another and which together hold the message, usually alongside some
- error correction data. Examples include PDF417.</p>
- </dd>
- <dt>matrix</dt>
- <dd>
- <p>A matrix symbol is one based on a (usually square) grid of elements
- called modules. Examples include Data Matrix, but MaxiCode and DotCode
- are also considered matrix symbologies.</p>
- </dd>
- <dt>composite</dt>
- <dd>
- <p>A composite symbology is one which is made up of elements which are
- both linear and stacked. Those currently supported are made up of a
- linear ‘primary’ message above which is printed a stacked component
- based on the PDF417 symbology. These symbols also have a separator which
- separates the linear and the stacked components. The stacked component
- is most often referred to as the 2D (two-dimensional) component.</p>
- </dd>
- <dt>X-dimension</dt>
- <dd>
- <p>The X-dimension of a symbol is the size (usually the width) of the
- smallest element. For a linear symbology this is the width of the
- smallest bar. For matrix symbologies it is the width of the smallest
- module (usually a square). Barcode widths and heights are expressed in
- X-dimensions. Most linear symbologies can have their height varied
- whereas most matrix symbologies have a fixed width-to-height ratio where
- the height is determined by the width.</p>
- </dd>
- <dt>GS1 data</dt>
- <dd>
- <p>This is a structured way of representing information which consists
- of ‘chunks’ of data, each of which starts with an Application Identifier
- (AI). The AI identifies what type of information is being encoded.</p>
- </dd>
- <dt>Reader Initialisation (Programming)</dt>
- <dd>
- <p>Some symbologies allow a special character to be included which can
- be detected by the scanning equipment as signifying that the data is
- used to program or change settings in that equipment. This data is
- usually not passed on to the software which handles normal input data.
- This feature should only be used if you are familiar with the
- programming codes relevant to your scanner.</p>
- </dd>
- <dt>ECI</dt>
- <dd>
- <p>The Extended Channel Interpretations (ECI) mechanism allows for
- multi-language data to be encoded in symbols which would usually support
- only Latin-1 (ISO/IEC 8859-1 plus ASCII) characters. This can be useful,
- for example, if you need to encode Cyrillic characters, but should be
- used with caution as not all scanners support this method.</p>
- </dd>
- </dl>
- <p>Two other concepts that are important are raster and vector.</p>
- <dl>
- <dt>raster</dt>
- <dd>
- <p>A low level bitmap representation of an image. BMP, GIF, PCX, PNG and
- TIF are raster file formats.</p>
- </dd>
- <dt>vector</dt>
- <dd>
- <p>A high level command- or data-based representation of an image. EMF,
- EPS and SVG are vector file formats. They require renderers to turn them
- into bitmaps.</p>
- </dd>
- </dl>
- <h1 id="installing-zint">2. Installing Zint</h1>
- <h2 id="linux">2.1 Linux</h2>
- <p>The easiest way to configure compilation is to take advantage of the
- CMake utilities. You will need to install CMake and
- <code>libpng-dev</code> first. For instance on <code>apt</code>
- systems:</p>
- <div class="sourceCode" id="cb1"><pre
- class="sourceCode bash"><code class="sourceCode bash"><span id="cb1-1"><a href="#cb1-1" aria-hidden="true" tabindex="-1"></a><span class="fu">sudo</span> apt install git cmake build-essential libpng-dev</span></code></pre></div>
- <p>If you want to take advantage of Zint Barcode Studio you will also
- need to have Qt and its component <code>"Desktop gcc 64-bit"</code>
- installed, as well as <code>mesa</code>. For details see
- <code>"README.linux"</code> in the project root directory.</p>
- <p>Once you have fulfilled these requirements unzip the source code
- tarball or clone the latest source</p>
- <div class="sourceCode" id="cb2"><pre
- class="sourceCode bash"><code class="sourceCode bash"><span id="cb2-1"><a href="#cb2-1" aria-hidden="true" tabindex="-1"></a><span class="fu">git</span> clone https://git.code.sf.net/p/zint/code zint</span></code></pre></div>
- <p>and follow these steps in the top directory:</p>
- <div class="sourceCode" id="cb3"><pre
- class="sourceCode bash"><code class="sourceCode bash"><span id="cb3-1"><a href="#cb3-1" aria-hidden="true" tabindex="-1"></a><span class="fu">mkdir</span> build</span>
- <span id="cb3-2"><a href="#cb3-2" aria-hidden="true" tabindex="-1"></a><span class="bu">cd</span> build</span>
- <span id="cb3-3"><a href="#cb3-3" aria-hidden="true" tabindex="-1"></a><span class="fu">cmake</span> ..</span>
- <span id="cb3-4"><a href="#cb3-4" aria-hidden="true" tabindex="-1"></a><span class="fu">make</span></span>
- <span id="cb3-5"><a href="#cb3-5" aria-hidden="true" tabindex="-1"></a><span class="fu">sudo</span> make install</span></code></pre></div>
- <p>The CLI command line program can be accessed by typing</p>
- <div class="sourceCode" id="cb4"><pre
- class="sourceCode bash"><code class="sourceCode bash"><span id="cb4-1"><a href="#cb4-1" aria-hidden="true" tabindex="-1"></a><span class="ex">zint</span> <span class="pp">[</span><span class="ss">options</span><span class="pp">]</span></span></code></pre></div>
- <p>The GUI can be accessed by typing</p>
- <div class="sourceCode" id="cb5"><pre
- class="sourceCode bash"><code class="sourceCode bash"><span id="cb5-1"><a href="#cb5-1" aria-hidden="true" tabindex="-1"></a><span class="ex">zint-qt</span></span></code></pre></div>
- <p>To test that the installation has been successful a shell script is
- included in the <code>"frontend"</code> sub-directory. To run the test
- type</p>
- <div class="sourceCode" id="cb6"><pre
- class="sourceCode bash"><code class="sourceCode bash"><span id="cb6-1"><a href="#cb6-1" aria-hidden="true" tabindex="-1"></a><span class="ex">./test.sh</span></span></code></pre></div>
- <p>This should create numerous files in the sub-directory
- <code>"frontend/test_sh_out"</code> showing the many modes of operation
- which are available from Zint.</p>
- <h2 id="bsd">2.2 BSD</h2>
- <p>The latest Zint CLI, <code>libzint</code> library and GUI can be
- installed from the <code>zint</code> package on FreeBSD:</p>
- <div class="sourceCode" id="cb7"><pre
- class="sourceCode bash"><code class="sourceCode bash"><span id="cb7-1"><a href="#cb7-1" aria-hidden="true" tabindex="-1"></a><span class="fu">su</span></span>
- <span id="cb7-2"><a href="#cb7-2" aria-hidden="true" tabindex="-1"></a><span class="ex">pkg</span> install zint</span>
- <span id="cb7-3"><a href="#cb7-3" aria-hidden="true" tabindex="-1"></a><span class="bu">exit</span></span></code></pre></div>
- <p>and on OpenBSD (where the GUI is in a separate <code>zint-gui</code>
- package):</p>
- <div class="sourceCode" id="cb8"><pre
- class="sourceCode bash"><code class="sourceCode bash"><span id="cb8-1"><a href="#cb8-1" aria-hidden="true" tabindex="-1"></a><span class="fu">su</span></span>
- <span id="cb8-2"><a href="#cb8-2" aria-hidden="true" tabindex="-1"></a><span class="ex">pkg_add</span> zint zint-gui</span>
- <span id="cb8-3"><a href="#cb8-3" aria-hidden="true" tabindex="-1"></a><span class="bu">exit</span></span></code></pre></div>
- <p>To build from source (including for NetBSD) see
- <code>"README.bsd"</code> in the project root directory.</p>
- <h2 id="microsoft-windows">2.3 Microsoft Windows</h2>
- <p>For Microsoft Windows, Zint is distributed as a binary executable.
- Simply download the ZIP file, then right-click on the ZIP file and
- <code>"Extract All"</code>. A new folder will be created within which
- are two binary files:</p>
- <ul>
- <li><code>qtZint.exe</code> - Zint Barcode Studio</li>
- <li><code>zint.exe</code> - Command Line Interface</li>
- </ul>
- <p>For fresh releases you will get a warning message from Microsoft
- Defender SmartScreen that this is an ‘unrecognised app’. This happens
- because Zint is a free and open-source software project with no
- advertising and hence no income, meaning we are not able to afford the
- $664 per year to have the application digitally signed by Microsoft.</p>
- <p>To build Zint on Windows from source, see
- <code>"win32/README"</code>.</p>
- <h2 id="apple-macos">2.4 Apple macOS</h2>
- <p>The latest Zint CLI and <code>libzint</code> can be installed using
- Homebrew.<a href="#fn1" class="footnote-ref" id="fnref1"
- role="doc-noteref"><sup>1</sup></a> To install Homebrew input the
- following line into the macOS terminal</p>
- <div class="sourceCode" id="cb9"><pre
- class="sourceCode bash"><code class="sourceCode bash"><span id="cb9-1"><a href="#cb9-1" aria-hidden="true" tabindex="-1"></a><span class="ex">/bin/bash</span> <span class="at">-c</span> <span class="st">"</span><span class="va">$(</span><span class="ex">curl</span> <span class="at">-fsSL</span> <span class="dt">\</span></span>
- <span id="cb9-2"><a href="#cb9-2" aria-hidden="true" tabindex="-1"></a> https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh<span class="va">)</span><span class="st">"</span></span></code></pre></div>
- <p>Once Homebrew is installed use the following command to install the
- CLI and library</p>
- <div class="sourceCode" id="cb10"><pre
- class="sourceCode bash"><code class="sourceCode bash"><span id="cb10-1"><a href="#cb10-1" aria-hidden="true" tabindex="-1"></a><span class="ex">brew</span> install zint</span></code></pre></div>
- <p>To build from source (and install the GUI) see
- <code>"README.macos"</code> in the project root directory.</p>
- <h2 id="zint-tcl-backend">2.5 Zint Tcl Backend</h2>
- <p>The Tcl backend in the <code>"backend_tcl"</code> sub-directory may
- be built using the provided TEA (Tcl Extension Architecture) build on
- Linux, Windows, macOS and Android. For Windows, an MSVC6 makefile is
- also available. See <a href="#annex-c.-tcl-backend-binding">Annex C. Tcl
- Backend Binding</a> for further details.</p>
- <h1 id="using-zint-barcode-studio">3. Using Zint Barcode Studio</h1>
- <p>Zint Barcode Studio is the graphical user interface for Zint. If you
- are starting from a command line interface you can start the GUI by
- typing</p>
- <div class="sourceCode" id="cb11"><pre
- class="sourceCode bash"><code class="sourceCode bash"><span id="cb11-1"><a href="#cb11-1" aria-hidden="true" tabindex="-1"></a><span class="ex">zint-qt</span></span></code></pre></div>
- <p>or on Windows</p>
- <div class="sourceCode" id="cb12"><pre
- class="sourceCode bash"><code class="sourceCode bash"><span id="cb12-1"><a href="#cb12-1" aria-hidden="true" tabindex="-1"></a><span class="ex">qtZint.exe</span></span></code></pre></div>
- <p>See the note in section <a href="#microsoft-windows">2.3 Microsoft
- Windows</a> about Microsoft Defender SmartScreen.</p>
- <p>Below is a brief guide to Zint Barcode Studio.</p>
- <h2 id="main-window-and-data-tab">3.1 Main Window and Data Tab</h2>
- <figure>
- <img src="images/gui_main.png" title="fig:" class="win"
- alt="Zint Barcode Studio on startup - main window with Data tab" />
- <figcaption aria-hidden="true">Zint Barcode Studio on startup - main
- window with Data tab</figcaption>
- </figure>
- <p>This is the main window of Zint Barcode Studio. The top of the window
- shows a preview of the barcode that the current settings would create.
- These settings can be changed using the controls below. The text box in
- the <code>"Data to Encode"</code> groupbox on this first Data tab allows
- you to enter the data to be encoded. When you are happy with your
- settings you can use the <code>"Save..."</code> button to save the
- resulting image to a file.</p>
- <p>The <code>"Symbology"</code> drop-down box gives access to all of the
- symbologies supported by Zint shown in alphabetical order. The text box
- to its right can filter the drop-down to only show matching symbologies.
- For instance typing <code>"mail"</code> will only show barcodes in the
- drop-down whose names contain the word <code>"mail"</code>. Each word
- entered will match. So typing <code>"mail post"</code> will show
- barcodes whose names contain <code>"mail"</code> or <code>"post"</code>
- (or both).</p>
- <p>The ellipsis button <code>"..."</code> to the right of the data text
- box invokes the Data Dialog - see <a href="#data-dialog">3.7 Data
- Dialog</a> for details. The delete button <img
- src="images/gui_delete.png" class="btn" alt="delete" /> next to it will
- clear the data text box and the ECI (Extended Channel Interpretations)
- drop-down if set.</p>
- <p>To set the barcode as a Programming Initialisation symbol click the
- <code>"Reader Init"</code> checkbox. The <code>"1234.."</code> button to
- its right invokes the Sequence Dialog - see <a
- href="#sequence-dialog">3.8 Sequence Dialog</a>. The zap button <img
- src="images/gui_zap.png" class="btn" alt="zap" /> will clear all data
- and reset all settings for the barcode to defaults.</p>
- <p>The <code>"BMP"</code> and <code>"SVG"</code> buttons at the bottom
- will copy the image to the clipboard in BMP format and SVG format
- respectively. Further copy-to-clipboard formats are available by
- clicking the <code>"Menu"</code> button, along with
- <code>"CLI Equivalent..."</code>, <code>"Save As..."</code>,
- <code>"Factory Reset..."</code>, <code>"Help"</code>,
- <code>"About..."</code> and <code>"Quit"</code> options. Most of the
- options are also available in a context menu by right-clicking the
- preview.</p>
- <figure>
- <img src="images/gui_menus.png" title="fig:" class="win"
- alt="Zint Barcode Studio main menu (left) and context menu (right)" />
- <figcaption aria-hidden="true">Zint Barcode Studio main menu (left) and
- context menu (right)</figcaption>
- </figure>
- <h2 id="gs1-composite-groupbox">3.2 GS1 Composite Groupbox</h2>
- <figure>
- <img src="images/gui_composite.png" title="fig:" class="win"
- alt="Zint Barcode Studio encoding GS1 Composite data" />
- <figcaption aria-hidden="true">Zint Barcode Studio encoding GS1
- Composite data</figcaption>
- </figure>
- <p>In the middle of the Data tab is an area for creating composite
- symbologies which appears when the currently selected symbology is
- supported by the GS1 Composite symbology standard. GS1 data can then be
- entered with square brackets used to separate Application Identifier
- (AI) information from data as shown here. For details, see <a
- href="#gs1-composite-symbols-iso-24723">6.3 GS1 Composite Symbols (ISO
- 24723)</a>.</p>
- <h2 id="additional-ecidata-segments-groupbox">3.3 Additional ECI/Data
- Segments Groupbox</h2>
- <figure>
- <img src="images/gui_segs.png" title="fig:" class="win"
- alt="Zint Barcode Studio encoding multiple segments" />
- <figcaption aria-hidden="true">Zint Barcode Studio encoding multiple
- segments</figcaption>
- </figure>
- <p>For symbologies that support ECIs (Extended Channel Interpretations)
- the middle of the Data tab is an area for entering additional data
- segments with their own ECIs. Up to 4 segments (including the main
- <code>"Data to Encode"</code> as segment 0) may be specified. See <a
- href="#multiple-segments">4.16 Multiple Segments</a> for details.</p>
- <h2 id="symbology-specific-groupbox">3.4 Symbology-specific
- Groupbox</h2>
- <figure>
- <img src="images/gui_c25inter.png" title="fig:" class="win"
- alt="Zint Barcode Studio showing Code 2 of 5 Interleaved settings" />
- <figcaption aria-hidden="true">Zint Barcode Studio showing Code 2 of 5
- Interleaved settings</figcaption>
- </figure>
- <p>Many symbologies have extra options to change the content, format and
- appearance of the symbol generated. For those with few additional
- options (and no support for GS1 data or ECIs), the middle of the Data
- tab is an area for setting those options.</p>
- <p>Here is shown the check digit options for an Interleaved Code 2 of 5
- symbol (see <a href="#interleaved-code-2-of-5-iso-16390">6.1.2.4
- Interleaved Code 2 of 5 (ISO 16390)</a>).</p>
- <p>Symbologies with more than a few options (or support for GS1 data or
- ECIs) have a second Symbology-specific tab, shown next.</p>
- <h2 id="symbology-specific-tab">3.5 Symbology-specific Tab</h2>
- <figure>
- <img src="images/gui_aztec.png" title="fig:" class="win"
- alt="Zint Barcode Studio showing Aztec Code options" />
- <figcaption aria-hidden="true">Zint Barcode Studio showing Aztec Code
- options</figcaption>
- </figure>
- <p>A second tab appears for those symbologies with more than a few extra
- options.</p>
- <p>Here is shown the options available for an Aztec Code symbol.</p>
- <p>You can adjust its size or error correction level (see <a
- href="#aztec-code-iso-24778">6.6.8 Aztec Code (ISO 24778)</a>), select
- how its data is to be treated (see <a href="#input-modes">4.11 Input
- Modes</a>), and set it as part of a Structured Append sequence of
- symbols (see <a href="#structured-append">4.17 Structured
- Append</a>).</p>
- <h2 id="appearance-tab">3.6 Appearance Tab</h2>
- <figure>
- <img src="images/gui_appearance.png" title="fig:" class="win"
- alt="Zint Barcode Studio showing Appearance tab options" />
- <figcaption aria-hidden="true">Zint Barcode Studio showing Appearance
- tab options</figcaption>
- </figure>
- <p>The Appearance tab can be used to adjust the dimensions and other
- properties of the symbol.</p>
- <p>The <code>"Height"</code> value affects the height of symbologies
- which do not have a fixed width-to-height ratio, i.e. those other than
- matrix symbologies. For such symbologies the
- <code>"Automatic Height"</code> checkbox will be enabled - uncheck this
- to manually adjust the height. The <code>"Compliant Height"</code>
- checkbox applies to symbologies that define a standard height - see <a
- href="#adjusting-height">4.4 Adjusting Height</a>.</p>
- <p>Boundary bars can be added with the <code>"Border Type"</code>
- drop-down and their size adjusted with <code>"Border Width"</code>, and
- whitespace can be adjusted both horizontally (first spinbox) and
- vertically (second spinbox), and also through the
- <code>"Quiet Zones"</code> checkbox if standard quiet zones are defined
- for the symbology.</p>
- <p>The size of the saved image can be specified with
- <code>"Printing Scale"</code>, and also by clicking the <img
- src="images/gui_scaling.png" class="btn" alt="scaling" /> icon to invoke
- the Set Printing Scale Dialog - see <a
- href="#adjusting-image-size-x-dimension">4.9 Adjusting Image Size
- (X-dimension)</a> for further details.</p>
- <figure>
- <img src="images/gui_set_printing_scale.png" title="fig:" class="pop"
- alt="Adjusting the Print Size" />
- <figcaption aria-hidden="true">Adjusting the Print Size</figcaption>
- </figure>
- <p>The foreground and background colours can be set either using the
- text boxes which accept <code>"RRGGBBAA"</code> hexadecimal values and
- <code>"C,M,Y,K"</code> decimal percentage values, or by clicking the
- foreground eye <img src="images/gui_black_eye.png" class="btn"
- alt="eye" /> and background eye <img src="images/gui_white_eye.png"
- class="btn" alt="eye" /> buttons which invoke a colour picker.</p>
- <figure>
- <img src="images/gui_colour.png" title="fig:" class="pop"
- alt="The colour picker tool" />
- <figcaption aria-hidden="true">The colour picker tool</figcaption>
- </figure>
- <p>(Note that to change the colours visually, the luminence slider, the
- long narrow column on the right, must be adjusted.) The color picker
- only deals in RGB(A), and will overwrite any CMYK values with RGB(A)
- values once <code>"OK"</code> is selected.</p>
- <p>Back in the Appearance tab, the colours can be reset to
- black-on-white using the <code>"Reset"</code> button, and exchanged one
- for the other using the swap <img src="images/gui_swap.png" class="btn"
- alt="swap" /> button next to it.</p>
- <h2 id="data-dialog">3.7 Data Dialog</h2>
- <figure>
- <img src="images/gui_data_dialog.png" title="fig:" class="pop"
- alt="Entering longer text input" />
- <figcaption aria-hidden="true">Entering longer text input</figcaption>
- </figure>
- <p>Clicking on the ellipsis <code>"..."</code> button next to the
- <code>"Data to Encode"</code> text box in the Data tab opens a larger
- window which can be used to enter longer strings of text. You can also
- use this window to load data from a file.</p>
- <p>The dialog is also available for additional ECI/Data segments by
- clicking the ellipsis button to the right of their data text boxes.</p>
- <p>Note that if your data contains line feeds (<code>LF</code>) then the
- data will be split into separate lines in the dialog box. On saving the
- data back to the main text box any separate lines in the data will be
- escaped as <code>'\n'</code> and the <code>"Parse Escapes"</code>
- checkbox will be set. This only affects line feeds, not carriage returns
- (<code>CR</code>) or <code>CR+LF</code> pairs, and behaves the same on
- both Windows and Unix. (For details on escape sequences, see <a
- href="#inputting-data">4.1 Inputting Data</a>.)</p>
- <h2 id="sequence-dialog">3.8 Sequence Dialog</h2>
- <figure>
- <img src="images/gui_sequence.png" title="fig:" class="pop"
- alt="Creating a sequence of barcode symbols" />
- <figcaption aria-hidden="true">Creating a sequence of barcode
- symbols</figcaption>
- </figure>
- <p>Clicking on the sequence button (labelled <code>"1234.."</code>) in
- the Data tab opens the Sequence Dialog. This allows you to create
- multiple barcode images by entering a sequence of data inputs in the
- right hand panel. Sequences can also be automatically generated by
- entering parameters on the left hand side or by importing the data from
- a file. Zint will generate a separate barcode image for each line of
- text in the right hand panel. The format field determines the format of
- the automatically generated sequence where characters have the meanings
- as given below:</p>
- <div id="tbl:sequence_format_characters" class="tablenos">
- <table id="tbl:sequence_format_characters"
- data-tag=": Sequence Format Characters">
- <caption><span>Table : Sequence Format Characters</span> </caption>
- <thead>
- <tr>
- <th style="text-align: left;">Character</th>
- <th style="text-align: left;">Effect</th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <td style="text-align: left;"><code>$</code></td>
- <td style="text-align: left;">Insert leading zeroes</td>
- </tr>
- <tr>
- <td style="text-align: left;"><code>#</code></td>
- <td style="text-align: left;">Insert leading spaces</td>
- </tr>
- <tr>
- <td style="text-align: left;"><code>*</code></td>
- <td style="text-align: left;">Insert leading asterisks</td>
- </tr>
- <tr>
- <td style="text-align: left;">Any other character</td>
- <td style="text-align: left;">Interpreted literally</td>
- </tr>
- </tbody>
- </table>
- </div>
- <p>Once you’re happy with the Sequence Data, click the
- <code>"Export..."</code> button to bring up the Export Dialog, discussed
- next.</p>
- <h2 id="export-dialog">3.9 Export Dialog</h2>
- <figure>
- <img src="images/gui_export.png" title="fig:" class="pop"
- alt="Setting filenames for an exported sequence of barcode symbols" />
- <figcaption aria-hidden="true">Setting filenames for an exported
- sequence of barcode symbols</figcaption>
- </figure>
- <p>The Export Dialog invoked by pressing the <code>"Export..."</code>
- button in the Sequence Dialog sets the parameters for exporting the
- sequence of barcode images. Here you can set the output directory, the
- format of the output filenames and what their image type will be. Note
- that the symbology, colour and other formatting information are taken
- from the main window.</p>
- <h2 id="cli-equivalent-dialog">3.10 CLI Equivalent Dialog</h2>
- <figure>
- <img src="images/gui_cli_equivalent.png" title="fig:" class="pop"
- alt="CLI Equivalent Dialog" />
- <figcaption aria-hidden="true">CLI Equivalent Dialog</figcaption>
- </figure>
- <p>The CLI Equivalent Dialog can be invoked from the main menu or the
- context menu and displays the CLI command that will reproduce the
- barcode as currently configured in the GUI. Press the
- <code>"Copy"</code> button to copy the command to the clipboard, which
- can then be pasted into the command line.</p>
- <h1 id="using-the-command-line">4. Using the Command Line</h1>
- <p>This section describes how to encode data using the command line
- frontend (CLI) program. The examples given are for the Unix platform,
- but the same options are available for Windows - just remember to
- include the executable file extension if <code>".EXE"</code> is not in
- your <code>PATHEXT</code> environment variable, i.e.:</p>
- <div class="sourceCode" id="cb13"><pre
- class="sourceCode bash"><code class="sourceCode bash"><span id="cb13-1"><a href="#cb13-1" aria-hidden="true" tabindex="-1"></a><span class="ex">zint.exe</span> <span class="at">-d</span> <span class="st">"This Text"</span></span></code></pre></div>
- <p>For compatibility with Windows the examples use double quotes to
- delimit data, though on Unix single quotes are generally preferable as
- they stop the shell from processing any characters such as backslash or
- dollar. A single quote itself is dealt with by terminating the
- single-quoted text, backslashing the single quote, and then
- continuing:</p>
- <div class="sourceCode" id="cb14"><pre
- class="sourceCode bash"><code class="sourceCode bash"><span id="cb14-1"><a href="#cb14-1" aria-hidden="true" tabindex="-1"></a><span class="ex">zint</span> <span class="at">-d</span> <span class="st">'Text containing a single quote '</span><span class="dt">\'</span><span class="st">' in the middle'</span></span></code></pre></div>
- <p>Some examples use backslash (<code>\</code>) to continue commands
- onto the next line. For Windows, use caret (<code>^</code>) instead.</p>
- <p>Certain options that take values have short names as well as long
- ones, namely <code>-b</code> (<code>--barcode</code>), <code>-d</code>
- (<code>--data</code>), <code>-i</code> (<code>--input</code>),
- <code>-o</code> (<code>--output</code>) and <code>-w</code>
- (<code>--whitesp</code>). For these a space should be used to separate
- the short name from its value, to avoid ambiguity. For long names a
- space or an equals sign may be used. For instance:</p>
- <div class="sourceCode" id="cb15"><pre
- class="sourceCode bash"><code class="sourceCode bash"><span id="cb15-1"><a href="#cb15-1" aria-hidden="true" tabindex="-1"></a><span class="ex">zint</span> <span class="at">-d</span> <span class="st">"This Text"</span></span>
- <span id="cb15-2"><a href="#cb15-2" aria-hidden="true" tabindex="-1"></a><span class="ex">zint</span> <span class="at">--data</span><span class="op">=</span><span class="st">"This Text"</span></span>
- <span id="cb15-3"><a href="#cb15-3" aria-hidden="true" tabindex="-1"></a><span class="ex">zint</span> <span class="at">--data</span> <span class="st">"This Text"</span></span></code></pre></div>
- <p>The examples use a space separator for short option names, and an
- equals sign for long option names.</p>
- <h2 id="inputting-data">4.1 Inputting Data</h2>
- <p>The data to encode can be entered at the command line using the
- <code>-d</code> or <code>--data</code> option, for example</p>
- <div class="sourceCode" id="cb16"><pre
- class="sourceCode bash"><code class="sourceCode bash"><span id="cb16-1"><a href="#cb16-1" aria-hidden="true" tabindex="-1"></a><span class="ex">zint</span> <span class="at">-d</span> <span class="st">"This Text"</span></span></code></pre></div>
- <p>This will encode the text <code>"This Text"</code>. Zint will use the
- default symbology, Code 128, and output to the default file
- <code>"out.png"</code> in the current directory. Alternatively, if
- <code>libpng</code> was not present when Zint was built, the default
- output file will be <code>"out.gif"</code>.</p>
- <p>The data input to the Zint CLI is assumed to be encoded in UTF-8
- (Unicode) format (Zint will correctly handle UTF-8 data on Windows). If
- you are encoding characters beyond the 7-bit ASCII set using a scheme
- other than UTF-8 then you will need to set the appropriate input options
- as shown in <a href="#input-modes">4.11 Input Modes</a> below.</p>
- <p>Non-printing characters can be entered on the command line using
- backslash (<code>\</code>) as an escape character in combination with
- the <code>--esc</code> switch. Permissible sequences are shown in the
- table below.</p>
- <div id="tbl:escape_sequences" class="tablenos">
- <table id="tbl:escape_sequences" data-tag=": Escape Sequences">
- <caption><span>Table : Escape Sequences</span> </caption>
- <colgroup>
- <col style="width: 15%" />
- <col style="width: 15%" />
- <col style="width: 10%" />
- <col style="width: 57%" />
- </colgroup>
- <thead>
- <tr>
- <th style="text-align: left;">Escape Sequence</th>
- <th style="text-align: left;">ASCII Equivalent</th>
- <th style="text-align: left;">Name</th>
- <th style="text-align: left;">Interpretation</th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <td style="text-align: left;"><code>\0</code></td>
- <td style="text-align: left;">0x00</td>
- <td style="text-align: left;"><code>NUL</code></td>
- <td style="text-align: left;">Null character</td>
- </tr>
- <tr>
- <td style="text-align: left;"><code>\E</code></td>
- <td style="text-align: left;">0x04</td>
- <td style="text-align: left;"><code>EOT</code></td>
- <td style="text-align: left;">End of Transmission</td>
- </tr>
- <tr>
- <td style="text-align: left;"><code>\a</code></td>
- <td style="text-align: left;">0x07</td>
- <td style="text-align: left;"><code>BEL</code></td>
- <td style="text-align: left;">Bell</td>
- </tr>
- <tr>
- <td style="text-align: left;"><code>\b</code></td>
- <td style="text-align: left;">0x08</td>
- <td style="text-align: left;"><code>BS</code></td>
- <td style="text-align: left;">Backspace</td>
- </tr>
- <tr>
- <td style="text-align: left;"><code>\t</code></td>
- <td style="text-align: left;">0x09</td>
- <td style="text-align: left;"><code>HT</code></td>
- <td style="text-align: left;">Horizontal Tab</td>
- </tr>
- <tr>
- <td style="text-align: left;"><code>\n</code></td>
- <td style="text-align: left;">0x0A</td>
- <td style="text-align: left;"><code>LF</code></td>
- <td style="text-align: left;">Line Feed</td>
- </tr>
- <tr>
- <td style="text-align: left;"><code>\v</code></td>
- <td style="text-align: left;">0x0B</td>
- <td style="text-align: left;"><code>VT</code></td>
- <td style="text-align: left;">Vertical Tab</td>
- </tr>
- <tr>
- <td style="text-align: left;"><code>\f</code></td>
- <td style="text-align: left;">0x0C</td>
- <td style="text-align: left;"><code>FF</code></td>
- <td style="text-align: left;">Form Feed</td>
- </tr>
- <tr>
- <td style="text-align: left;"><code>\r</code></td>
- <td style="text-align: left;">0x0D</td>
- <td style="text-align: left;"><code>CR</code></td>
- <td style="text-align: left;">Carriage Return</td>
- </tr>
- <tr>
- <td style="text-align: left;"><code>\e</code></td>
- <td style="text-align: left;">0x1B</td>
- <td style="text-align: left;"><code>ESC</code></td>
- <td style="text-align: left;">Escape</td>
- </tr>
- <tr>
- <td style="text-align: left;"><code>\G</code></td>
- <td style="text-align: left;">0x1D</td>
- <td style="text-align: left;"><code>GS</code></td>
- <td style="text-align: left;">Group Separator</td>
- </tr>
- <tr>
- <td style="text-align: left;"><code>\R</code></td>
- <td style="text-align: left;">0x1E</td>
- <td style="text-align: left;"><code>RS</code></td>
- <td style="text-align: left;">Record Separator</td>
- </tr>
- <tr>
- <td style="text-align: left;"><code>\\</code></td>
- <td style="text-align: left;">0x5C</td>
- <td style="text-align: left;"><code>\</code></td>
- <td style="text-align: left;">Backslash</td>
- </tr>
- <tr>
- <td style="text-align: left;"><code>\dNNN</code></td>
- <td style="text-align: left;">NNN</td>
- <td style="text-align: left;"></td>
- <td style="text-align: left;">Any 8-bit character where NNN is decimal
- (000-255)</td>
- </tr>
- <tr>
- <td style="text-align: left;"><code>\oNNN</code></td>
- <td style="text-align: left;">0oNNN</td>
- <td style="text-align: left;"></td>
- <td style="text-align: left;">Any 8-bit character where NNN is octal
- (000-377)</td>
- </tr>
- <tr>
- <td style="text-align: left;"><code>\xNN</code></td>
- <td style="text-align: left;">0xNN</td>
- <td style="text-align: left;"></td>
- <td style="text-align: left;">Any 8-bit character where NN is
- hexadecimal (00-FF)</td>
- </tr>
- <tr>
- <td style="text-align: left;"><code>\uNNNN</code></td>
- <td style="text-align: left;"></td>
- <td style="text-align: left;"></td>
- <td style="text-align: left;">Any 16-bit Unicode BMP<a href="#fn2"
- class="footnote-ref" id="fnref2" role="doc-noteref"><sup>2</sup></a>
- character where NNNN is hexadecimal (0000-FFFF)</td>
- </tr>
- <tr>
- <td style="text-align: left;"><code>\UNNNNNN</code></td>
- <td style="text-align: left;"></td>
- <td style="text-align: left;"></td>
- <td style="text-align: left;">Any 21-bit Unicode character where NNNNNN
- is hexadecimal (000000-10FFFF)</td>
- </tr>
- </tbody>
- </table>
- </div>
- <p>(Special escape sequences are available for Code 128 only to manually
- switch Code Sets and insert special FNC1 characters - see <a
- href="#standard-code-128-iso-15417">6.1.10.1 Standard Code 128 (ISO
- 15417)</a> for details.)</p>
- <p>Input data can be read directly from file using the <code>-i</code>
- or <code>--input</code> switch as shown below. The input file is assumed
- to be UTF-8 formatted unless an alternative mode is selected. This
- option replaces the use of the <code>-d</code> switch.</p>
- <div class="sourceCode" id="cb17"><pre
- class="sourceCode bash"><code class="sourceCode bash"><span id="cb17-1"><a href="#cb17-1" aria-hidden="true" tabindex="-1"></a><span class="ex">zint</span> <span class="at">-i</span> somefile.txt</span></code></pre></div>
- <p>To read from stdin specify a single hyphen <code>"-"</code> as the
- input file.</p>
- <p>Note that except when batch processing (see <a
- href="#batch-processing">4.12 Batch Processing</a> below), the file (or
- stdin) should not end with a newline (<code>LF</code> on Unix,
- <code>CR+LF</code> on Windows) unless you want the newline to be encoded
- in the symbol.</p>
- <h2 id="directing-output">4.2 Directing Output</h2>
- <p>Output can be directed to a file other than the default using the
- <code>-o</code> or <code>--output</code> switch. For example:</p>
- <div class="sourceCode" id="cb18"><pre
- class="sourceCode bash"><code class="sourceCode bash"><span id="cb18-1"><a href="#cb18-1" aria-hidden="true" tabindex="-1"></a><span class="ex">zint</span> <span class="at">-o</span> here.png <span class="at">-d</span> <span class="st">"This Text"</span></span></code></pre></div>
- <p>This draws a Code 128 barcode in the file <code>"here.png"</code>. If
- an Encapsulated PostScript file is needed simply append the filename
- with <code>".eps"</code>, and so on for the other supported file
- types:</p>
- <div class="sourceCode" id="cb19"><pre
- class="sourceCode bash"><code class="sourceCode bash"><span id="cb19-1"><a href="#cb19-1" aria-hidden="true" tabindex="-1"></a><span class="ex">zint</span> <span class="at">-o</span> there.eps <span class="at">-d</span> <span class="st">"This Text"</span></span></code></pre></div>
- <p>The currently supported output file formats are shown in the
- following table.</p>
- <div id="tbl:output_file_formats" class="tablenos">
- <table id="tbl:output_file_formats" data-tag=": Output File Formats">
- <caption><span>Table : Output File Formats</span> </caption>
- <thead>
- <tr>
- <th>Extension</th>
- <th style="text-align: left;">File format</th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <td>bmp</td>
- <td style="text-align: left;">Windows Bitmap</td>
- </tr>
- <tr>
- <td>emf</td>
- <td style="text-align: left;">Enhanced Metafile Format</td>
- </tr>
- <tr>
- <td>eps</td>
- <td style="text-align: left;">Encapsulated PostScript</td>
- </tr>
- <tr>
- <td>gif</td>
- <td style="text-align: left;">Graphics Interchange Format</td>
- </tr>
- <tr>
- <td>pcx</td>
- <td style="text-align: left;">ZSoft Paintbrush image</td>
- </tr>
- <tr>
- <td>png</td>
- <td style="text-align: left;">Portable Network Graphic</td>
- </tr>
- <tr>
- <td>svg</td>
- <td style="text-align: left;">Scalable Vector Graphic</td>
- </tr>
- <tr>
- <td>tif</td>
- <td style="text-align: left;">Tagged Image File Format</td>
- </tr>
- <tr>
- <td>txt</td>
- <td style="text-align: left;">Text file (see <a
- href="#other-options">4.19 Other Options</a>)</td>
- </tr>
- </tbody>
- </table>
- </div>
- <p>The filename can contain directories and sub-directories also, which
- will be created if they don’t already exist:</p>
- <div class="sourceCode" id="cb20"><pre
- class="sourceCode bash"><code class="sourceCode bash"><span id="cb20-1"><a href="#cb20-1" aria-hidden="true" tabindex="-1"></a><span class="ex">zint</span> <span class="at">-o</span> <span class="st">"dir/subdir/filename.eps"</span> <span class="at">-d</span> <span class="st">"This Text"</span></span></code></pre></div>
- <p>Note that on Windows, filenames are assumed to be UTF-8 encoded.</p>
- <h2 id="selecting-barcode-type">4.3 Selecting Barcode Type</h2>
- <p>Selecting which type of barcode you wish to produce (i.e. which
- symbology to use) can be done at the command line using the
- <code>-b</code> or <code>--barcode</code> switch followed by the
- appropriate integer value or name in the following table. For example to
- create a Data Matrix symbol you could use:</p>
- <div class="sourceCode" id="cb21"><pre
- class="sourceCode bash"><code class="sourceCode bash"><span id="cb21-1"><a href="#cb21-1" aria-hidden="true" tabindex="-1"></a><span class="ex">zint</span> <span class="at">-b</span> 71 <span class="at">-o</span> datamatrix.png <span class="at">-d</span> <span class="st">"Data to encode"</span></span></code></pre></div>
- <p>or</p>
- <div class="sourceCode" id="cb22"><pre
- class="sourceCode bash"><code class="sourceCode bash"><span id="cb22-1"><a href="#cb22-1" aria-hidden="true" tabindex="-1"></a><span class="ex">zint</span> <span class="at">-b</span> DATAMATRIX <span class="at">-o</span> datamatrix.png <span class="at">-d</span> <span class="st">"Data to encode"</span></span></code></pre></div>
- <p>Names are treated case-insensitively by the CLI, and the
- <code>BARCODE_</code> prefix and any underscores are optional.</p>
- <div id="tbl:barcode_types" class="tablenos">
- <table id="tbl:barcode_types" data-tag=": Barcode Types (Symbologies)">
- <caption><span>Table : Barcode Types (Symbologies)</span> </caption>
- <colgroup>
- <col style="width: 11%" />
- <col style="width: 33%" />
- <col style="width: 55%" />
- </colgroup>
- <thead>
- <tr>
- <th style="text-align: left;">Numeric Value</th>
- <th style="text-align: left;">Name<a href="#fn3" class="footnote-ref"
- id="fnref3" role="doc-noteref"><sup>3</sup></a></th>
- <th style="text-align: left;">Barcode Name</th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <td style="text-align: left;">1</td>
- <td style="text-align: left;"><code>BARCODE_CODE11</code></td>
- <td style="text-align: left;">Code 11</td>
- </tr>
- <tr>
- <td style="text-align: left;">2<code>*</code></td>
- <td style="text-align: left;"><code>BARCODE_C25STANDARD</code></td>
- <td style="text-align: left;">Standard Code 2 of 5</td>
- </tr>
- <tr>
- <td style="text-align: left;">3</td>
- <td style="text-align: left;"><code>BARCODE_C25INTER</code></td>
- <td style="text-align: left;">Interleaved 2 of 5</td>
- </tr>
- <tr>
- <td style="text-align: left;">4</td>
- <td style="text-align: left;"><code>BARCODE_C25IATA</code></td>
- <td style="text-align: left;">Code 2 of 5 IATA</td>
- </tr>
- <tr>
- <td style="text-align: left;">6</td>
- <td style="text-align: left;"><code>BARCODE_C25LOGIC</code></td>
- <td style="text-align: left;">Code 2 of 5 Data Logic</td>
- </tr>
- <tr>
- <td style="text-align: left;">7</td>
- <td style="text-align: left;"><code>BARCODE_C25IND</code></td>
- <td style="text-align: left;">Code 2 of 5 Industrial</td>
- </tr>
- <tr>
- <td style="text-align: left;">8</td>
- <td style="text-align: left;"><code>BARCODE_CODE39</code></td>
- <td style="text-align: left;">Code 3 of 9 (Code 39)</td>
- </tr>
- <tr>
- <td style="text-align: left;">9</td>
- <td style="text-align: left;"><code>BARCODE_EXCODE39</code></td>
- <td style="text-align: left;">Extended Code 3 of 9 (Code 39+)</td>
- </tr>
- <tr>
- <td style="text-align: left;">13</td>
- <td style="text-align: left;"><code>BARCODE_EANX</code></td>
- <td style="text-align: left;">EAN (EAN-2, EAN-5, EAN-8 and EAN-13)</td>
- </tr>
- <tr>
- <td style="text-align: left;">14</td>
- <td style="text-align: left;"><code>BARCODE_EANX_CHK</code></td>
- <td style="text-align: left;">EAN + Check Digit</td>
- </tr>
- <tr>
- <td style="text-align: left;">16<code>*</code></td>
- <td style="text-align: left;"><code>BARCODE_GS1_128</code></td>
- <td style="text-align: left;">GS1-128 (UCC.EAN-128)</td>
- </tr>
- <tr>
- <td style="text-align: left;">18</td>
- <td style="text-align: left;"><code>BARCODE_CODABAR</code></td>
- <td style="text-align: left;">Codabar</td>
- </tr>
- <tr>
- <td style="text-align: left;">20</td>
- <td style="text-align: left;"><code>BARCODE_CODE128</code></td>
- <td style="text-align: left;">Code 128 (automatic Code Set
- switching)</td>
- </tr>
- <tr>
- <td style="text-align: left;">21</td>
- <td style="text-align: left;"><code>BARCODE_DPLEIT</code></td>
- <td style="text-align: left;">Deutsche Post Leitcode</td>
- </tr>
- <tr>
- <td style="text-align: left;">22</td>
- <td style="text-align: left;"><code>BARCODE_DPIDENT</code></td>
- <td style="text-align: left;">Deutsche Post Identcode</td>
- </tr>
- <tr>
- <td style="text-align: left;">23</td>
- <td style="text-align: left;"><code>BARCODE_CODE16K</code></td>
- <td style="text-align: left;">Code 16K</td>
- </tr>
- <tr>
- <td style="text-align: left;">24</td>
- <td style="text-align: left;"><code>BARCODE_CODE49</code></td>
- <td style="text-align: left;">Code 49</td>
- </tr>
- <tr>
- <td style="text-align: left;">25</td>
- <td style="text-align: left;"><code>BARCODE_CODE93</code></td>
- <td style="text-align: left;">Code 93</td>
- </tr>
- <tr>
- <td style="text-align: left;">28</td>
- <td style="text-align: left;"><code>BARCODE_FLAT</code></td>
- <td style="text-align: left;">Flattermarken</td>
- </tr>
- <tr>
- <td style="text-align: left;">29<code>*</code></td>
- <td style="text-align: left;"><code>BARCODE_DBAR_OMN</code></td>
- <td style="text-align: left;">GS1 DataBar Omnidirectional (including GS1
- DataBar Truncated)</td>
- </tr>
- <tr>
- <td style="text-align: left;">30<code>*</code></td>
- <td style="text-align: left;"><code>BARCODE_DBAR_LTD</code></td>
- <td style="text-align: left;">GS1 DataBar Limited</td>
- </tr>
- <tr>
- <td style="text-align: left;">31<code>*</code></td>
- <td style="text-align: left;"><code>BARCODE_DBAR_EXP</code></td>
- <td style="text-align: left;">GS1 DataBar Expanded</td>
- </tr>
- <tr>
- <td style="text-align: left;">32</td>
- <td style="text-align: left;"><code>BARCODE_TELEPEN</code></td>
- <td style="text-align: left;">Telepen Alpha</td>
- </tr>
- <tr>
- <td style="text-align: left;">34</td>
- <td style="text-align: left;"><code>BARCODE_UPCA</code></td>
- <td style="text-align: left;">UPC-A</td>
- </tr>
- <tr>
- <td style="text-align: left;">35</td>
- <td style="text-align: left;"><code>BARCODE_UPCA_CHK</code></td>
- <td style="text-align: left;">UPC-A + Check Digit</td>
- </tr>
- <tr>
- <td style="text-align: left;">37</td>
- <td style="text-align: left;"><code>BARCODE_UPCE</code></td>
- <td style="text-align: left;">UPC-E</td>
- </tr>
- <tr>
- <td style="text-align: left;">38</td>
- <td style="text-align: left;"><code>BARCODE_UPCE_CHK</code></td>
- <td style="text-align: left;">UPC-E + Check Digit</td>
- </tr>
- <tr>
- <td style="text-align: left;">40</td>
- <td style="text-align: left;"><code>BARCODE_POSTNET</code></td>
- <td style="text-align: left;">POSTNET</td>
- </tr>
- <tr>
- <td style="text-align: left;">47</td>
- <td style="text-align: left;"><code>BARCODE_MSI_PLESSEY</code></td>
- <td style="text-align: left;">MSI Plessey</td>
- </tr>
- <tr>
- <td style="text-align: left;">49</td>
- <td style="text-align: left;"><code>BARCODE_FIM</code></td>
- <td style="text-align: left;">FIM</td>
- </tr>
- <tr>
- <td style="text-align: left;">50</td>
- <td style="text-align: left;"><code>BARCODE_LOGMARS</code></td>
- <td style="text-align: left;">LOGMARS</td>
- </tr>
- <tr>
- <td style="text-align: left;">51</td>
- <td style="text-align: left;"><code>BARCODE_PHARMA</code></td>
- <td style="text-align: left;">Pharmacode One-Track</td>
- </tr>
- <tr>
- <td style="text-align: left;">52</td>
- <td style="text-align: left;"><code>BARCODE_PZN</code></td>
- <td style="text-align: left;">PZN</td>
- </tr>
- <tr>
- <td style="text-align: left;">53</td>
- <td style="text-align: left;"><code>BARCODE_PHARMA_TWO</code></td>
- <td style="text-align: left;">Pharmacode Two-Track</td>
- </tr>
- <tr>
- <td style="text-align: left;">54</td>
- <td style="text-align: left;"><code>BARCODE_CEPNET</code></td>
- <td style="text-align: left;">Brazilian CEPNet</td>
- </tr>
- <tr>
- <td style="text-align: left;">55</td>
- <td style="text-align: left;"><code>BARCODE_PDF417</code></td>
- <td style="text-align: left;">PDF417</td>
- </tr>
- <tr>
- <td style="text-align: left;">56<code>*</code></td>
- <td style="text-align: left;"><code>BARCODE_PDF417COMP</code></td>
- <td style="text-align: left;">Compact PDF417 (Truncated PDF417)</td>
- </tr>
- <tr>
- <td style="text-align: left;">57</td>
- <td style="text-align: left;"><code>BARCODE_MAXICODE</code></td>
- <td style="text-align: left;">MaxiCode</td>
- </tr>
- <tr>
- <td style="text-align: left;">58</td>
- <td style="text-align: left;"><code>BARCODE_QRCODE</code></td>
- <td style="text-align: left;">QR Code</td>
- </tr>
- <tr>
- <td style="text-align: left;">60</td>
- <td style="text-align: left;"><code>BARCODE_CODE128AB</code></td>
- <td style="text-align: left;">Code 128 (Suppress Code Set C)</td>
- </tr>
- <tr>
- <td style="text-align: left;">63</td>
- <td style="text-align: left;"><code>BARCODE_AUSPOST</code></td>
- <td style="text-align: left;">Australia Post Standard Customer</td>
- </tr>
- <tr>
- <td style="text-align: left;">66</td>
- <td style="text-align: left;"><code>BARCODE_AUSREPLY</code></td>
- <td style="text-align: left;">Australia Post Reply Paid</td>
- </tr>
- <tr>
- <td style="text-align: left;">67</td>
- <td style="text-align: left;"><code>BARCODE_AUSROUTE</code></td>
- <td style="text-align: left;">Australia Post Routing</td>
- </tr>
- <tr>
- <td style="text-align: left;">68</td>
- <td style="text-align: left;"><code>BARCODE_AUSDIRECT</code></td>
- <td style="text-align: left;">Australia Post Redirection</td>
- </tr>
- <tr>
- <td style="text-align: left;">69</td>
- <td style="text-align: left;"><code>BARCODE_ISBNX</code></td>
- <td style="text-align: left;">ISBN (EAN-13 with verification stage)</td>
- </tr>
- <tr>
- <td style="text-align: left;">70</td>
- <td style="text-align: left;"><code>BARCODE_RM4SCC</code></td>
- <td style="text-align: left;">Royal Mail 4-State Customer Code
- (RM4SCC)</td>
- </tr>
- <tr>
- <td style="text-align: left;">71</td>
- <td style="text-align: left;"><code>BARCODE_DATAMATRIX</code></td>
- <td style="text-align: left;">Data Matrix (ECC200)</td>
- </tr>
- <tr>
- <td style="text-align: left;">72</td>
- <td style="text-align: left;"><code>BARCODE_EAN14</code></td>
- <td style="text-align: left;">EAN-14</td>
- </tr>
- <tr>
- <td style="text-align: left;">73</td>
- <td style="text-align: left;"><code>BARCODE_VIN</code></td>
- <td style="text-align: left;">Vehicle Identification Number</td>
- </tr>
- <tr>
- <td style="text-align: left;">74</td>
- <td style="text-align: left;"><code>BARCODE_CODABLOCKF</code></td>
- <td style="text-align: left;">Codablock-F</td>
- </tr>
- <tr>
- <td style="text-align: left;">75</td>
- <td style="text-align: left;"><code>BARCODE_NVE18</code></td>
- <td style="text-align: left;">NVE-18 (SSCC-18)</td>
- </tr>
- <tr>
- <td style="text-align: left;">76</td>
- <td style="text-align: left;"><code>BARCODE_JAPANPOST</code></td>
- <td style="text-align: left;">Japanese Postal Code</td>
- </tr>
- <tr>
- <td style="text-align: left;">77</td>
- <td style="text-align: left;"><code>BARCODE_KOREAPOST</code></td>
- <td style="text-align: left;">Korea Post</td>
- </tr>
- <tr>
- <td style="text-align: left;">79<code>*</code></td>
- <td style="text-align: left;"><code>BARCODE_DBAR_STK</code></td>
- <td style="text-align: left;">GS1 DataBar Stacked</td>
- </tr>
- <tr>
- <td style="text-align: left;">80<code>*</code></td>
- <td style="text-align: left;"><code>BARCODE_DBAR_OMNSTK</code></td>
- <td style="text-align: left;">GS1 DataBar Stacked Omnidirectional</td>
- </tr>
- <tr>
- <td style="text-align: left;">81<code>*</code></td>
- <td style="text-align: left;"><code>BARCODE_DBAR_EXPSTK</code></td>
- <td style="text-align: left;">GS1 DataBar Expanded Stacked</td>
- </tr>
- <tr>
- <td style="text-align: left;">82</td>
- <td style="text-align: left;"><code>BARCODE_PLANET</code></td>
- <td style="text-align: left;">PLANET</td>
- </tr>
- <tr>
- <td style="text-align: left;">84</td>
- <td style="text-align: left;"><code>BARCODE_MICROPDF417</code></td>
- <td style="text-align: left;">MicroPDF417</td>
- </tr>
- <tr>
- <td style="text-align: left;">85<code>*</code></td>
- <td style="text-align: left;"><code>BARCODE_USPS_IMAIL</code></td>
- <td style="text-align: left;">USPS Intelligent Mail (OneCode)</td>
- </tr>
- <tr>
- <td style="text-align: left;">86</td>
- <td style="text-align: left;"><code>BARCODE_PLESSEY</code></td>
- <td style="text-align: left;">UK Plessey</td>
- </tr>
- <tr>
- <td style="text-align: left;">87</td>
- <td style="text-align: left;"><code>BARCODE_TELEPEN_NUM</code></td>
- <td style="text-align: left;">Telepen Numeric</td>
- </tr>
- <tr>
- <td style="text-align: left;">89</td>
- <td style="text-align: left;"><code>BARCODE_ITF14</code></td>
- <td style="text-align: left;">ITF-14</td>
- </tr>
- <tr>
- <td style="text-align: left;">90</td>
- <td style="text-align: left;"><code>BARCODE_KIX</code></td>
- <td style="text-align: left;">Dutch Post KIX Code</td>
- </tr>
- <tr>
- <td style="text-align: left;">92</td>
- <td style="text-align: left;"><code>BARCODE_AZTEC</code></td>
- <td style="text-align: left;">Aztec Code</td>
- </tr>
- <tr>
- <td style="text-align: left;">93</td>
- <td style="text-align: left;"><code>BARCODE_DAFT</code></td>
- <td style="text-align: left;">DAFT Code</td>
- </tr>
- <tr>
- <td style="text-align: left;">96</td>
- <td style="text-align: left;"><code>BARCODE_DPD</code></td>
- <td style="text-align: left;">DPD Code</td>
- </tr>
- <tr>
- <td style="text-align: left;">97</td>
- <td style="text-align: left;"><code>BARCODE_MICROQR</code></td>
- <td style="text-align: left;">Micro QR Code</td>
- </tr>
- <tr>
- <td style="text-align: left;">98</td>
- <td style="text-align: left;"><code>BARCODE_HIBC_128</code></td>
- <td style="text-align: left;">HIBC Code 128</td>
- </tr>
- <tr>
- <td style="text-align: left;">99</td>
- <td style="text-align: left;"><code>BARCODE_HIBC_39</code></td>
- <td style="text-align: left;">HIBC Code 39</td>
- </tr>
- <tr>
- <td style="text-align: left;">102</td>
- <td style="text-align: left;"><code>BARCODE_HIBC_DM</code></td>
- <td style="text-align: left;">HIBC Data Matrix ECC200</td>
- </tr>
- <tr>
- <td style="text-align: left;">104</td>
- <td style="text-align: left;"><code>BARCODE_HIBC_QR</code></td>
- <td style="text-align: left;">HIBC QR Code</td>
- </tr>
- <tr>
- <td style="text-align: left;">106</td>
- <td style="text-align: left;"><code>BARCODE_HIBC_PDF</code></td>
- <td style="text-align: left;">HIBC PDF417</td>
- </tr>
- <tr>
- <td style="text-align: left;">108</td>
- <td style="text-align: left;"><code>BARCODE_HIBC_MICPDF</code></td>
- <td style="text-align: left;">HIBC MicroPDF417</td>
- </tr>
- <tr>
- <td style="text-align: left;">110</td>
- <td style="text-align: left;"><code>BARCODE_HIBC_BLOCKF</code></td>
- <td style="text-align: left;">HIBC Codablock-F</td>
- </tr>
- <tr>
- <td style="text-align: left;">112</td>
- <td style="text-align: left;"><code>BARCODE_HIBC_AZTEC</code></td>
- <td style="text-align: left;">HIBC Aztec Code</td>
- </tr>
- <tr>
- <td style="text-align: left;">115</td>
- <td style="text-align: left;"><code>BARCODE_DOTCODE</code></td>
- <td style="text-align: left;">DotCode</td>
- </tr>
- <tr>
- <td style="text-align: left;">116</td>
- <td style="text-align: left;"><code>BARCODE_HANXIN</code></td>
- <td style="text-align: left;">Han Xin (Chinese Sensible) Code</td>
- </tr>
- <tr>
- <td style="text-align: left;">119</td>
- <td style="text-align: left;"><code>BARCODE_MAILMARK_2D</code></td>
- <td style="text-align: left;">Royal Mail 2D Mailmark (CMDM) (Data
- Matrix)</td>
- </tr>
- <tr>
- <td style="text-align: left;">121</td>
- <td style="text-align: left;"><code>BARCODE_MAILMARK_4S</code></td>
- <td style="text-align: left;">Royal Mail 4-State Mailmark</td>
- </tr>
- <tr>
- <td style="text-align: left;">128</td>
- <td style="text-align: left;"><code>BARCODE_AZRUNE</code></td>
- <td style="text-align: left;">Aztec Runes</td>
- </tr>
- <tr>
- <td style="text-align: left;">129</td>
- <td style="text-align: left;"><code>BARCODE_CODE32</code></td>
- <td style="text-align: left;">Code 32</td>
- </tr>
- <tr>
- <td style="text-align: left;">130</td>
- <td style="text-align: left;"><code>BARCODE_EANX_CC</code></td>
- <td style="text-align: left;">GS1 Composite Symbol with EAN linear
- component</td>
- </tr>
- <tr>
- <td style="text-align: left;">131<code>*</code></td>
- <td style="text-align: left;"><code>BARCODE_GS1_128_CC</code></td>
- <td style="text-align: left;">GS1 Composite Symbol with GS1-128 linear
- component</td>
- </tr>
- <tr>
- <td style="text-align: left;">132<code>*</code></td>
- <td style="text-align: left;"><code>BARCODE_DBAR_OMN_CC</code></td>
- <td style="text-align: left;">GS1 Composite Symbol with GS1 DataBar
- Omnidirectional linear component</td>
- </tr>
- <tr>
- <td style="text-align: left;">133<code>*</code></td>
- <td style="text-align: left;"><code>BARCODE_DBAR_LTD_CC</code></td>
- <td style="text-align: left;">GS1 Composite Symbol with GS1 DataBar
- Limited linear component</td>
- </tr>
- <tr>
- <td style="text-align: left;">134<code>*</code></td>
- <td style="text-align: left;"><code>BARCODE_DBAR_EXP_CC</code></td>
- <td style="text-align: left;">GS1 Composite Symbol with GS1 DataBar
- Expanded linear component</td>
- </tr>
- <tr>
- <td style="text-align: left;">135</td>
- <td style="text-align: left;"><code>BARCODE_UPCA_CC</code></td>
- <td style="text-align: left;">GS1 Composite Symbol with UPC-A linear
- component</td>
- </tr>
- <tr>
- <td style="text-align: left;">136</td>
- <td style="text-align: left;"><code>BARCODE_UPCE_CC</code></td>
- <td style="text-align: left;">GS1 Composite Symbol with UPC-E linear
- component</td>
- </tr>
- <tr>
- <td style="text-align: left;">137<code>*</code></td>
- <td style="text-align: left;"><code>BARCODE_DBAR_STK_CC</code></td>
- <td style="text-align: left;">GS1 Composite Symbol with GS1 DataBar
- Stacked component</td>
- </tr>
- <tr>
- <td style="text-align: left;">138<code>*</code></td>
- <td style="text-align: left;"><code>BARCODE_DBAR_OMNSTK_CC</code></td>
- <td style="text-align: left;">GS1 Composite Symbol with GS1 DataBar
- Stacked Omnidirectional component</td>
- </tr>
- <tr>
- <td style="text-align: left;">139<code>*</code></td>
- <td style="text-align: left;"><code>BARCODE_DBAR_EXPSTK_CC</code></td>
- <td style="text-align: left;">GS1 Composite Symbol with GS1 DataBar
- Expanded Stacked component</td>
- </tr>
- <tr>
- <td style="text-align: left;">140</td>
- <td style="text-align: left;"><code>BARCODE_CHANNEL</code></td>
- <td style="text-align: left;">Channel Code</td>
- </tr>
- <tr>
- <td style="text-align: left;">141</td>
- <td style="text-align: left;"><code>BARCODE_CODEONE</code></td>
- <td style="text-align: left;">Code One</td>
- </tr>
- <tr>
- <td style="text-align: left;">142</td>
- <td style="text-align: left;"><code>BARCODE_GRIDMATRIX</code></td>
- <td style="text-align: left;">Grid Matrix</td>
- </tr>
- <tr>
- <td style="text-align: left;">143</td>
- <td style="text-align: left;"><code>BARCODE_UPNQR</code></td>
- <td style="text-align: left;">UPNQR (Univerzalnega Plačilnega Naloga
- QR)</td>
- </tr>
- <tr>
- <td style="text-align: left;">144</td>
- <td style="text-align: left;"><code>BARCODE_ULTRA</code></td>
- <td style="text-align: left;">Ultracode</td>
- </tr>
- <tr>
- <td style="text-align: left;">145</td>
- <td style="text-align: left;"><code>BARCODE_RMQR</code></td>
- <td style="text-align: left;">Rectangular Micro QR Code (rMQR)</td>
- </tr>
- <tr>
- <td style="text-align: left;">146</td>
- <td style="text-align: left;"><code>BARCODE_BC412</code></td>
- <td style="text-align: left;">IBM BC412 (SEMI T1-95)</td>
- </tr>
- <tr>
- <td style="text-align: left;">147</td>
- <td style="text-align: left;"><code>BARCODE_DXFILMEDGE</code></td>
- <td style="text-align: left;">DX Film Edge Barcode</td>
- </tr>
- </tbody>
- </table>
- </div>
- <h2 id="adjusting-height">4.4 Adjusting Height</h2>
- <p>The height of a symbol (except those with a fixed width-to-height
- ratio) can be adjusted using the <code>--height</code> switch. For
- example:</p>
- <div class="sourceCode" id="cb23"><pre
- class="sourceCode bash"><code class="sourceCode bash"><span id="cb23-1"><a href="#cb23-1" aria-hidden="true" tabindex="-1"></a><span class="ex">zint</span> <span class="at">--height</span><span class="op">=</span>100 <span class="at">-d</span> <span class="st">"This Text"</span></span></code></pre></div>
- <p>This specifies a symbol height of 100 times the X-dimension of the
- symbol.</p>
- <p>The default height of most linear barcodes is 50.0X, but this can be
- changed for barcodes whose specifications give a standard height by
- using the switch <code>--compliantheight</code>. For instance</p>
- <div class="sourceCode" id="cb24"><pre
- class="sourceCode bash"><code class="sourceCode bash"><span id="cb24-1"><a href="#cb24-1" aria-hidden="true" tabindex="-1"></a><span class="ex">zint</span> <span class="at">-b</span> LOGMARS <span class="at">-d</span> <span class="st">"This Text"</span> <span class="at">--compliantheight</span></span></code></pre></div>
- <p>will produce a barcode of height 45.455X instead of the normal
- default of 50.0X. The flag also causes Zint to return a warning if a
- non-compliant height is given:</p>
- <div class="sourceCode" id="cb25"><pre
- class="sourceCode bash"><code class="sourceCode bash"><span id="cb25-1"><a href="#cb25-1" aria-hidden="true" tabindex="-1"></a><span class="ex">zint</span> <span class="at">-b</span> LOGMARS <span class="at">-d</span> <span class="st">"This Text"</span> <span class="at">--compliantheight</span> <span class="at">--height</span><span class="op">=</span>6.2</span>
- <span id="cb25-2"><a href="#cb25-2" aria-hidden="true" tabindex="-1"></a><span class="ex">Warning</span> 247: Height not compliant with standards</span></code></pre></div>
- <p>Another switch is <code>--heightperrow</code>, which can be useful
- for symbologies that have a variable number of linear rows, namely
- Codablock-F, Code 16K, Code 49, GS1 DataBar Expanded Stacked,
- MicroPDF417 and PDF417, as it changes the treatment of the height value
- from overall height to per-row height, allowing you to specify a
- consistent height for each linear row without having to know how many
- there are. For instance</p>
- <div class="sourceCode" id="cb26"><pre
- class="sourceCode bash"><code class="sourceCode bash"><span id="cb26-1"><a href="#cb26-1" aria-hidden="true" tabindex="-1"></a><span class="ex">zint</span> <span class="at">-b</span> PDF417 <span class="at">-d</span> <span class="st">"This Text"</span> <span class="at">--height</span><span class="op">=</span>4 <span class="at">--heightperrow</span></span></code></pre></div>
- <figure>
- <img src="images/pdf417_heightperrow.svg" title="fig:" class="lin"
- alt="zint -b PDF417 -d "This Text" --height=4 --heightperrow" />
- <figcaption
- aria-hidden="true"><code>zint -b PDF417 -d "This Text" --height=4 --heightperrow</code></figcaption>
- </figure>
- <p>will produce a barcode of height 32X, with each of the 8 rows 4X
- high.</p>
- <h2 id="adjusting-whitespace">4.5 Adjusting Whitespace</h2>
- <p>The amount of horizontal whitespace to the left and right of the
- generated barcode can be altered using the <code>-w</code> or
- <code>--whitesp</code> switch, in integral multiples of the X-dimension.
- For example:</p>
- <div class="sourceCode" id="cb27"><pre
- class="sourceCode bash"><code class="sourceCode bash"><span id="cb27-1"><a href="#cb27-1" aria-hidden="true" tabindex="-1"></a><span class="ex">zint</span> <span class="at">-w</span> 10 <span class="at">-d</span> <span class="st">"This Text"</span></span></code></pre></div>
- <p>This specifies a whitespace width of 10 times the X-dimension of the
- symbol both to the left and to the right of the barcode.</p>
- <p>The amount of vertical whitespace above and below the barcode can be
- altered using the <code>--vwhitesp</code> switch, in integral multiples
- of the X-dimension. For example for 3 times the X-dimension:</p>
- <div class="sourceCode" id="cb28"><pre
- class="sourceCode bash"><code class="sourceCode bash"><span id="cb28-1"><a href="#cb28-1" aria-hidden="true" tabindex="-1"></a><span class="ex">zint</span> <span class="at">--vwhitesp</span><span class="op">=</span>3 <span class="at">-d</span> <span class="st">"This Text"</span></span></code></pre></div>
- <p>Note that the whitespace at the bottom appears below the text, if
- any.</p>
- <p>Horizontal and vertical whitespace can of course be used
- together:</p>
- <div class="sourceCode" id="cb29"><pre
- class="sourceCode bash"><code class="sourceCode bash"><span id="cb29-1"><a href="#cb29-1" aria-hidden="true" tabindex="-1"></a><span class="ex">zint</span> <span class="at">-b</span> DATAMATRIX <span class="at">--whitesp</span><span class="op">=</span>1 <span class="at">--vwhitesp</span><span class="op">=</span>1 <span class="at">-d</span> <span class="st">"This Text"</span></span></code></pre></div>
- <p>A <code>--quietzones</code> option is also available which adds quiet
- zones compliant with the symbology’s specification. This is in addition
- to any whitespace specified with the <code>--whitesp</code> or
- <code>--vwhitesp</code> switches.</p>
- <p>Note that Codablock-F, Code 16K, Code 49, ITF-14, EAN-2 to EAN-13,
- ISBN, UPC-A and UPC-E have compliant quiet zones added by default. This
- can be disabled with the option <code>--noquietzones</code>.</p>
- <h2 id="adding-boundary-bars-and-boxes">4.6 Adding Boundary Bars and
- Boxes</h2>
- <p>Zint allows the symbol to be bound with ‘boundary bars’ (also known
- as ‘bearer bars’) using the option <code>--bind</code>. These bars help
- to prevent misreading of the symbol by corrupting a scan if the scanning
- beam strays off the top or bottom of the symbol. Zint can also put a
- border right around the symbol and its horizontal whitespace with the
- <code>--box</code> option.</p>
- <p>The width of the boundary bars or box borders, in integral multiples
- of the X-dimension, must be specified using the <code>--border</code>
- switch. For example:</p>
- <div class="sourceCode" id="cb30"><pre
- class="sourceCode bash"><code class="sourceCode bash"><span id="cb30-1"><a href="#cb30-1" aria-hidden="true" tabindex="-1"></a><span class="ex">zint</span> <span class="at">--box</span> <span class="at">--border</span><span class="op">=</span>10 <span class="at">-w</span> 10 <span class="at">-d</span> <span class="st">"This Text"</span></span></code></pre></div>
- <figure>
- <img src="images/code128_box.svg" title="fig:" class="lin"
- alt="zint --border=10 --box -d "This Text" -w 10" />
- <figcaption
- aria-hidden="true"><code>zint --border=10 --box -d "This Text" -w 10</code></figcaption>
- </figure>
- <p>gives a box with a width 10 times the X-dimension of the symbol. Note
- that when specifying a box, horizontal whitespace is usually required in
- order to create a quiet zone between the barcode and the sides of the
- box. To add a boundary bar to the top only use
- <code>--bindtop</code>.</p>
- <p>For linear symbols, horizontal boundary bars appear tight against the
- barcode, inside any vertical whitespace (or text). For matrix symbols,
- however, where they are decorative rather than functional, boundary bars
- appear outside any whitespace.</p>
- <figure>
- <img src="images/qrcode_box.svg" title="fig:" class="i2d"
- alt="zint -b QRCODE --border=1 --box -d "This Text" --quietzones" />
- <figcaption
- aria-hidden="true"><code>zint -b QRCODE --border=1 --box -d "This Text" --quietzones</code></figcaption>
- </figure>
- <p>Codablock-F, Code 16K and Code 49 always have boundary bars, and
- default to particular horizontal whitespace values. Special
- considerations apply to ITF-14 and DPD - see <a href="#itf-14">6.1.2.6
- ITF-14</a> and <a href="#dpd-code">6.1.10.7 DPD Code</a> for those
- symbologies.</p>
- <h2 id="using-colour">4.7 Using Colour</h2>
- <p>The default colours of a symbol are a black symbol on a white
- background. Zint allows you to change this. The <code>-r</code> or
- <code>--reverse</code> switch allows the default colours to be inverted
- so that a white symbol is shown on a black background (known as
- “reflectance reversal” or “reversed reflectance”). For example the
- command</p>
- <div class="sourceCode" id="cb31"><pre
- class="sourceCode bash"><code class="sourceCode bash"><span id="cb31-1"><a href="#cb31-1" aria-hidden="true" tabindex="-1"></a><span class="ex">zint</span> <span class="at">-r</span> <span class="at">-d</span> <span class="st">"This Text"</span></span></code></pre></div>
- <p>gives an inverted Code 128 symbol. This is not practical for most
- symbologies but white-on-black is allowed by the Aztec Code, Data
- Matrix, DotCode, Han Xin Code, Grid Matrix and QR Code symbology
- specifications.</p>
- <p>For more specific needs the foreground (ink) and background (paper)
- colours can be specified using the <code>--fg</code> and
- <code>--bg</code> options followed by a number in <code>"RRGGBB"</code>
- hexadecimal notation (the same system used in HTML) or in
- <code>"C,M,Y,K"</code> decimal percentages format (the latter normally
- used with the <code>--cmyk</code> option - see below). For example the
- command</p>
- <div class="sourceCode" id="cb32"><pre
- class="sourceCode bash"><code class="sourceCode bash"><span id="cb32-1"><a href="#cb32-1" aria-hidden="true" tabindex="-1"></a><span class="ex">zint</span> <span class="at">--fg</span><span class="op">=</span>00FF00 <span class="at">-d</span> <span class="st">"This Text"</span></span></code></pre></div>
- <p>alters the symbol to a bright green.</p>
- <figure>
- <img src="images/code128_green.svg" title="fig:" class="lin"
- alt="zint -d "This Text" --fg=00FF00" />
- <figcaption
- aria-hidden="true"><code>zint -d "This Text" --fg=00FF00</code></figcaption>
- </figure>
- <p>Zint also supports RGBA colour information for those output file
- formats which support alpha channels (currently only GIF, PCX, PNG, SVG
- and TIF, with GIF supporting either a background or foreground alpha but
- not both) in a <code>"RRGGBBAA"</code> format. For example:</p>
- <div class="sourceCode" id="cb33"><pre
- class="sourceCode bash"><code class="sourceCode bash"><span id="cb33-1"><a href="#cb33-1" aria-hidden="true" tabindex="-1"></a><span class="ex">zint</span> <span class="at">--fg</span><span class="op">=</span>00ff0055 <span class="at">-d</span> <span class="st">"This Text"</span></span></code></pre></div>
- <figure>
- <img src="images/code128_green_alpha.svg" title="fig:" class="lin"
- alt="zint -d "This Text" --fg=00FF0055" />
- <figcaption
- aria-hidden="true"><code>zint -d "This Text" --fg=00FF0055</code></figcaption>
- </figure>
- <p>will produce a semi-transparent green foreground with a standard
- (white) background. Note that transparency is treated differently by
- raster and vector (SVG) output formats, as for vector output the
- background will “shine through” a transparent foreground. For
- instance</p>
- <div class="sourceCode" id="cb34"><pre
- class="sourceCode bash"><code class="sourceCode bash"><span id="cb34-1"><a href="#cb34-1" aria-hidden="true" tabindex="-1"></a><span class="ex">zint</span> <span class="at">--bg</span><span class="op">=</span>ff0000 <span class="at">--fg</span><span class="op">=</span>ffffff00 ...</span></code></pre></div>
- <p>will give different results for PNG and SVG. Experimentation is
- advised!</p>
- <p>In addition the <code>--nobackground</code> option will remove the
- background from all output formats except BMP.<a href="#fn4"
- class="footnote-ref" id="fnref4" role="doc-noteref"><sup>4</sup></a></p>
- <p>The <code>--cmyk</code> option is specific to output in Encapsulated
- PostScript (EPS) and TIF, and selects the CMYK colour space. Custom
- colours should then usually be given in the comma-separated
- <code>"C,M,Y,K"</code> format, where <code>C</code>, <code>M</code>,
- <code>Y</code> and <code>K</code> are expressed as decimal percentage
- values from 0 to 100. RGB values may still be used, in which case they
- will be converted formulaically to CMYK approximations.</p>
- <h2 id="rotating-the-symbol">4.8 Rotating the Symbol</h2>
- <p>The symbol can be rotated through four orientations using the
- <code>--rotate</code> option followed by the angle of rotation as shown
- below.</p>
- <pre><code>--rotate=0 (default)
- --rotate=90
- --rotate=180
- --rotate=270</code></pre>
- <figure>
- <img src="images/code128_rotate90.svg" title="fig:" class="lin"
- alt="zint -d "This Text" --rotate=90" />
- <figcaption
- aria-hidden="true"><code>zint -d "This Text" --rotate=90</code></figcaption>
- </figure>
- <h2 id="adjusting-image-size-x-dimension">4.9 Adjusting Image Size
- (X-dimension)</h2>
- <p>The size of the image can be altered using the <code>--scale</code>
- option, which sets the X-dimension. The default scale is 1.0.</p>
- <p>The scale is multiplied by 2 (with the exception of MaxiCode) before
- being applied to the X-dimension. For MaxiCode, it is multiplied by 10
- for raster output, by 40 for EMF vector output, and by 2 otherwise
- (non-EMF vector output).</p>
- <p>For non-MaxiCode raster output, the default scale of 1 results in an
- X-dimension of 2 pixels. For example for non-MaxiCode PNG images a scale
- of 5 will increase the X-dimension to 10 pixels. For MaxiCode, see <a
- href="#maxicode-raster-scaling">4.9.3 MaxiCode Raster Scaling</a>
- below.</p>
- <p>Scales for non-MaxiCode raster output should be given in increments
- of 0.5, i.e. 0.5, 1, 1.5, 2, 2.5, 3, 3.5, etc., to avoid the X-dimension
- varying across the symbol due to interpolation. 0.5 increments are also
- faster to render.</p>
- <p>The minimum scale for non-MaxiCode raster output in non-dotty mode is
- 0.5, giving a minimum X-dimension of 1 pixel. For MaxiCode, it is 0.2.
- The minimum scale for raster output in dotty mode is 1 (see <a
- href="#working-with-dots">4.15 Working with Dots</a>). For raster
- output, text will not be printed for scales less than 1.</p>
- <p>The minimum scale for vector output is 0.1, giving a minimum
- X-dimension of 0.2 (or for MaxiCode EMF output, 4). The maximum scale
- for both raster and vector is 200.</p>
- <p>To summarize the more intricate details:</p>
- <div id="tbl:scaling_multiplers" class="tablenos">
- <table id="tbl:scaling_multiplers" style="width:92%;"
- data-tag=": Scaling Multipliers and Minima">
- <caption><span>Table : Scaling Multipliers and Minima</span> </caption>
- <colgroup>
- <col style="width: 15%" />
- <col style="width: 25%" />
- <col style="width: 16%" />
- <col style="width: 19%" />
- <col style="width: 15%" />
- </colgroup>
- <thead>
- <tr>
- <th>MaxiCode?</th>
- <th style="text-align: left;">Output</th>
- <th>Multiplier</th>
- <th style="text-align: left;">Min. Scale (non-dotty)</th>
- <th style="text-align: left;">Min. Scale (dotty)</th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <td>No</td>
- <td style="text-align: left;">Raster</td>
- <td>2</td>
- <td style="text-align: left;">0.5</td>
- <td style="text-align: left;">1</td>
- </tr>
- <tr>
- <td>No</td>
- <td style="text-align: left;">Vector</td>
- <td>2</td>
- <td style="text-align: left;">0.1</td>
- <td style="text-align: left;">0.1</td>
- </tr>
- <tr>
- <td>Yes</td>
- <td style="text-align: left;">Raster</td>
- <td>10</td>
- <td style="text-align: left;">0.2</td>
- <td style="text-align: left;">N/A</td>
- </tr>
- <tr>
- <td>Yes</td>
- <td style="text-align: left;">Vector (non-EMF)</td>
- <td>2</td>
- <td style="text-align: left;">0.1</td>
- <td style="text-align: left;">N/A</td>
- </tr>
- <tr>
- <td>Yes</td>
- <td style="text-align: left;">EMF</td>
- <td>40</td>
- <td style="text-align: left;">0.1</td>
- <td style="text-align: left;">N/A</td>
- </tr>
- </tbody>
- </table>
- </div>
- <h3 id="scaling-by-x-dimension-and-resolution">4.9.1 Scaling by
- X-dimension and Resolution</h3>
- <p>An alternative way to specify the scale, which takes the above
- details into account, is to specify measurable units using the
- <code>--scalexdimdp</code> option, which has the format</p>
- <pre><code>--scalexdimdp=X[,R]</code></pre>
- <p>where <code>X</code> is the X-dimension (in mm by default) and
- <code>R</code> is the resolution (in dpmm, dots per mm, by default).
- <code>R</code> is optional, and defaults to 12 dpmm, and <code>X</code>
- may be zero, in which case it uses a symbology-specific default. The
- units may be given in inches for <code>X</code> by appending
- <code>"in"</code>, and in dpi (dots per inch) for <code>R</code> by
- appending <code>"dpi"</code>. For example</p>
- <div class="sourceCode" id="cb37"><pre
- class="sourceCode bash"><code class="sourceCode bash"><span id="cb37-1"><a href="#cb37-1" aria-hidden="true" tabindex="-1"></a><span class="ex">zint</span> <span class="at">-d</span> <span class="st">"1234"</span> <span class="at">--scalexdimdp</span><span class="op">=</span>0.013in,300dpi</span></code></pre></div>
- <p>Explicit metric units may also be given by appending
- <code>"mm"</code> and <code>"dpmm"</code> as appropriate, and may be
- mixed with U.S. units:</p>
- <div class="sourceCode" id="cb38"><pre
- class="sourceCode bash"><code class="sourceCode bash"><span id="cb38-1"><a href="#cb38-1" aria-hidden="true" tabindex="-1"></a><span class="ex">zint</span> <span class="at">-d</span> <span class="st">"1234"</span> <span class="at">--scalexdimdp</span><span class="op">=</span>0.33mm,300dpi</span></code></pre></div>
- <h3 id="scaling-example">4.9.2 Scaling Example</h3>
- <p>The GS1 General Specifications Section 5.2.6.6 ‘Symbol dimensions at
- nominal size’ gives an example of an EAN-13 barcode using the
- X-dimension of 0.33mm. To print that example as a PNG at 12 dpmm, the
- approximate equivalent of 300 dpi (<code>dpi = dpmm * 25.4</code>),
- specify a scale of 2, since <code>0.33 * 12 = 3.96</code> pixels, or 4
- pixels rounding to the nearest pixel:</p>
- <div class="sourceCode" id="cb39"><pre
- class="sourceCode bash"><code class="sourceCode bash"><span id="cb39-1"><a href="#cb39-1" aria-hidden="true" tabindex="-1"></a><span class="ex">zint</span> <span class="at">-b</span> EANX <span class="at">-d</span> <span class="st">"501234567890"</span> <span class="at">--compliantheight</span> <span class="at">--scale</span><span class="op">=</span>2</span></code></pre></div>
- <p>This will result in output of 37.29mm x 25.56mm (WxH) at 12 dpmm. The
- same result can be achieved using the <code>--scalexdimdp</code> option
- with</p>
- <div class="sourceCode" id="cb40"><pre
- class="sourceCode bash"><code class="sourceCode bash"><span id="cb40-1"><a href="#cb40-1" aria-hidden="true" tabindex="-1"></a><span class="ex">zint</span> <span class="at">-b</span> EANX <span class="at">-d</span> <span class="st">"501234567890"</span> <span class="at">--compliantheight</span> <span class="at">--scalexdimdp</span><span class="op">=</span>0</span></code></pre></div>
- <p>as 0.33mm is the default X-dimension for EAN, and 12 dpmm the default
- resolution.</p>
- <h3 id="maxicode-raster-scaling">4.9.3 MaxiCode Raster Scaling</h3>
- <p>For MaxiCode symbols, which use hexagons, the scale for raster output
- is multiplied by 10 before being applied. The 0.5 increment recommended
- for normal raster output does not apply.</p>
- <p>The minimum scale is 0.2, so the minimum X-dimension is 2 pixels.
- However scales below 0.5 are not recommended and may produce symbols
- that are not within the following size ranges.</p>
- <p>MaxiCode symbols have fixed size ranges of 24.82mm to 27.93mm in
- width, and 23.71mm to 26.69mm in height, excluding quiet zones. The
- default X-dimension is 0.88mm. For example, to output at the default
- X-dimension at 600 dpi specify:</p>
- <div class="sourceCode" id="cb41"><pre
- class="sourceCode bash"><code class="sourceCode bash"><span id="cb41-1"><a href="#cb41-1" aria-hidden="true" tabindex="-1"></a><span class="ex">zint</span> <span class="at">-b</span> MAXICODE <span class="at">-d</span> <span class="st">"MaxiCode (19 chars)"</span> <span class="at">--scalexdimdp</span><span class="op">=</span>0,600dpi</span></code></pre></div>
- <h2 id="human-readable-text-hrt-options">4.10 Human Readable Text (HRT)
- Options</h2>
- <p>For linear barcodes the text present in the output image can be
- removed by using the <code>--notext</code> option. Note also that for
- raster output text will not be printed for scales less than 1 (see <a
- href="#adjusting-image-size-x-dimension">4.9 Adjusting Image Size
- (X-dimension)</a>).</p>
- <p>Text can be set to bold using the <code>--bold</code> option, or a
- smaller font can be substituted using the <code>--small</code> option.
- The <code>--bold</code> and <code>--small</code> options can be used
- together if required, but only for vector output.</p>
- <figure>
- <img src="images/code128_small_bold.svg" title="fig:" class="lin"
- alt="zint --bold -d "This Text" --small" />
- <figcaption
- aria-hidden="true"><code>zint --bold -d "This Text" --small</code></figcaption>
- </figure>
- <p>The gap between the barcode and the text can be adjusted using the
- <code>--textgap</code> option, where the gap is given in X-dimensions,
- and may be negative (minimum -5.0X, maximum 10.0X). The default gap is
- 1X. Note that a very small gap may cause accented texts to overlap with
- the barcode:</p>
- <figure>
- <img src="images/code128_textgap.svg" title="fig:" class="lin"
- alt="zint -d "Áccent" --textgap=0.1" />
- <figcaption
- aria-hidden="true"><code>zint -d "Áccent" --textgap=0.1</code></figcaption>
- </figure>
- <p>For SVG output, the font preferred by Zint (monospaced “OCR-B” for
- EAN/UPC, “Arimo” - a proportional sans-serif font metrically compatible
- with “Arial” - for all others) can be embedded in the file for
- portability using the <code>--embedfont</code> option:</p>
- <figure>
- <img src="images/code128_embedfont.svg" title="fig:" class="lin"
- alt="zint -d "Áccent" --embedfont" />
- <figcaption
- aria-hidden="true"><code>zint -d "Áccent" --embedfont</code></figcaption>
- </figure>
- <h2 id="input-modes">4.11 Input Modes</h2>
- <h3 id="unicode-data-and-gs1-modes">4.11.1 Unicode, Data, and GS1
- Modes</h3>
- <p>By default all CLI input data is assumed to be encoded in UTF-8
- format. Many barcode symbologies encode data using the Latin-1 (ISO/IEC
- 8859-1 plus ASCII) character set, so input is converted from UTF-8 to
- Latin-1 before being put in the symbol. In addition QR Code and its
- variants and Han Xin Code can by default encode Japanese (Kanji) or
- Chinese (Hanzi) characters which are also converted from UTF-8.</p>
- <p>There are two exceptions to the Latin-1 default: Grid Matrix, whose
- default character set is GB 2312 (Chinese); and UPNQR, whose default
- character set is Latin-2 (ISO/IEC 8859-2 plus ASCII).</p>
- <div id="tbl:default_character_sets" class="tablenos">
- <table id="tbl:default_character_sets"
- data-tag=": Default Character Sets">
- <caption><span>Table : Default Character Sets</span> </caption>
- <thead>
- <tr>
- <th style="text-align: left;">Symbology</th>
- <th style="text-align: left;">Default character sets</th>
- <th>Alternate if input not Latin-1</th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <td style="text-align: left;">Aztec Code</td>
- <td style="text-align: left;">Latin-1</td>
- <td>None</td>
- </tr>
- <tr>
- <td style="text-align: left;">Codablock-F</td>
- <td style="text-align: left;">Latin-1</td>
- <td>None</td>
- </tr>
- <tr>
- <td style="text-align: left;">Code 128</td>
- <td style="text-align: left;">Latin-1</td>
- <td>None</td>
- </tr>
- <tr>
- <td style="text-align: left;">Code 16K</td>
- <td style="text-align: left;">Latin-1</td>
- <td>None</td>
- </tr>
- <tr>
- <td style="text-align: left;">Code One</td>
- <td style="text-align: left;">Latin-1</td>
- <td>None</td>
- </tr>
- <tr>
- <td style="text-align: left;">Data Matrix</td>
- <td style="text-align: left;">Latin-1</td>
- <td>None</td>
- </tr>
- <tr>
- <td style="text-align: left;">DotCode</td>
- <td style="text-align: left;">Latin-1</td>
- <td>None</td>
- </tr>
- <tr>
- <td style="text-align: left;">Grid Matrix</td>
- <td style="text-align: left;">GB 2312 (includes ASCII)</td>
- <td>N/A</td>
- </tr>
- <tr>
- <td style="text-align: left;">Han Xin</td>
- <td style="text-align: left;">Latin-1</td>
- <td>GB 18030 (includes ASCII)</td>
- </tr>
- <tr>
- <td style="text-align: left;">MaxiCode</td>
- <td style="text-align: left;">Latin-1</td>
- <td>None</td>
- </tr>
- <tr>
- <td style="text-align: left;">MicroPDF417</td>
- <td style="text-align: left;">Latin-1</td>
- <td>None</td>
- </tr>
- <tr>
- <td style="text-align: left;">Micro QR Code</td>
- <td style="text-align: left;">Latin-1</td>
- <td>Shift JIS (includes ASCII<a href="#fn5" class="footnote-ref"
- id="fnref5" role="doc-noteref"><sup>5</sup></a>)</td>
- </tr>
- <tr>
- <td style="text-align: left;">PDF417</td>
- <td style="text-align: left;">Latin-1</td>
- <td>None</td>
- </tr>
- <tr>
- <td style="text-align: left;">QR Code</td>
- <td style="text-align: left;">Latin-1</td>
- <td>Shift JIS (see above)</td>
- </tr>
- <tr>
- <td style="text-align: left;">rMQR</td>
- <td style="text-align: left;">Latin-1</td>
- <td>Shift JIS (see above)</td>
- </tr>
- <tr>
- <td style="text-align: left;">Ultracode</td>
- <td style="text-align: left;">Latin-1</td>
- <td>None</td>
- </tr>
- <tr>
- <td style="text-align: left;">UPNQR</td>
- <td style="text-align: left;">Latin-2</td>
- <td>N/A</td>
- </tr>
- <tr>
- <td style="text-align: left;">All others</td>
- <td style="text-align: left;">ASCII</td>
- <td>N/A</td>
- </tr>
- </tbody>
- </table>
- </div>
- <p>If Zint encounters characters which can not be encoded using the
- default character encoding then it will take advantage of the ECI
- (Extended Channel Interpretations) mechanism to encode the data if the
- symbology supports it - see <a href="#input-modes-and-eci">4.11.2 Input
- Modes and ECI</a> below.</p>
- <p>GS1 data can be encoded in a number of symbologies. Application
- Identifiers (AIs) should be enclosed in <code>[square brackets]</code>
- followed by the data to be encoded (see <a href="#gs1-128">6.1.10.3
- GS1-128</a>). To encode GS1 data use the <code>--gs1</code> option. GS1
- mode is assumed (and doesn’t need to be set) for GS1-128, EAN-14, GS1
- DataBar and GS1 Composite symbologies but is also available for Aztec
- Code, Code 16K, Code 49, Code One, Data Matrix, DotCode, QR Code and
- Ultracode.</p>
- <p>Health Industry Barcode (HIBC) data may also be encoded in the
- symbologies Aztec Code, Codablock-F, Code 128, Code 39, Data Matrix,
- MicroPDF417, PDF417 and QR Code. Within this mode, the leading
- <code>'+'</code> and the check character are automatically added by
- Zint, conforming to HIBC Labeler Identification Code (HIBC LIC). For
- HIBC Provider Applications Standard (HIBC PAS), preface the data with a
- slash <code>'/'</code>.</p>
- <p>The <code>--binary</code> option encodes the input data as given.
- Automatic code page translation to an ECI page is disabled, and no
- validation of the data’s encoding takes place. This may be used for raw
- binary or binary encrypted data. This switch plays together with the
- built-in ECI logic and examples may be found below.</p>
- <p>The <code>--fullmultibyte</code> option uses the multibyte modes of
- QR Code, Micro QR Code, Rectangular Micro QR Code, Han Xin Code and Grid
- Matrix for non-ASCII data, maximizing density. This is achieved by using
- compression designed for Kanji/Hanzi characters; however some decoders
- take blocks which are encoded this way and interpret them as Kanji/Hanzi
- characters, thus causing data corruption. Symbols encoded with this
- option should be checked against decoders before they are used. The
- popular open-source ZXing decoder is known to exhibit this
- behaviour.</p>
- <h3 id="input-modes-and-eci">4.11.2 Input Modes and ECI</h3>
- <p>If your data contains characters that are not in the default
- character set, you may encode it using an ECI-aware symbology and an ECI
- value from Table <a href="#tbl:eci_codes">: ECI Codes</a> below. The ECI
- information is added to your code symbol as prefix data. The symbologies
- that support ECI are</p>
- <div id="tbl:eci_aware_symbologies" class="tablenos">
- <table id="tbl:eci_aware_symbologies"
- data-tag=": ECI-Aware Symbologies">
- <caption><span>Table : ECI-Aware Symbologies</span> </caption>
- <tbody>
- <tr>
- <td style="text-align: left;">Aztec Code</td>
- <td style="text-align: left;">Grid Matrix</td>
- <td style="text-align: left;">PDF417</td>
- </tr>
- <tr>
- <td style="text-align: left;">Code One</td>
- <td style="text-align: left;">Han Xin Code</td>
- <td style="text-align: left;">QR Code</td>
- </tr>
- <tr>
- <td style="text-align: left;">Data Matrix</td>
- <td style="text-align: left;">MaxiCode</td>
- <td style="text-align: left;">rMQR</td>
- </tr>
- <tr>
- <td style="text-align: left;">DotCode</td>
- <td style="text-align: left;">MicroPDF417</td>
- <td style="text-align: left;">Ultracode</td>
- </tr>
- </tbody>
- </table>
- </div>
- <p>Be aware that not all barcode readers support ECI mode, so this can
- sometimes lead to unreadable barcodes. If you are using characters
- beyond those supported by the default character set then you should
- check that the resulting barcode can be understood by your target
- barcode reader.</p>
- <p>The ECI value may be specified with the <code>--eci</code> switch,
- followed by the value in the column <code>"ECI Code"</code> in the table
- below. The input data should be UTF-8 formatted. Zint automatically
- translates the data into the target encoding.</p>
- <div id="tbl:eci_codes" class="tablenos">
- <table id="tbl:eci_codes" data-tag=": ECI Codes">
- <caption><span>Table : ECI Codes</span> </caption>
- <thead>
- <tr>
- <th>ECI Code</th>
- <th>Character Encoding Scheme (ISO/IEC 8859 schemes include ASCII)</th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <td>3</td>
- <td>ISO/IEC 8859-1 - Latin alphabet No. 1</td>
- </tr>
- <tr>
- <td>4</td>
- <td>ISO/IEC 8859-2 - Latin alphabet No. 2</td>
- </tr>
- <tr>
- <td>5</td>
- <td>ISO/IEC 8859-3 - Latin alphabet No. 3</td>
- </tr>
- <tr>
- <td>6</td>
- <td>ISO/IEC 8859-4 - Latin alphabet No. 4</td>
- </tr>
- <tr>
- <td>7</td>
- <td>ISO/IEC 8859-5 - Latin/Cyrillic alphabet</td>
- </tr>
- <tr>
- <td>8</td>
- <td>ISO/IEC 8859-6 - Latin/Arabic alphabet</td>
- </tr>
- <tr>
- <td>9</td>
- <td>ISO/IEC 8859-7 - Latin/Greek alphabet</td>
- </tr>
- <tr>
- <td>10</td>
- <td>ISO/IEC 8859-8 - Latin/Hebrew alphabet</td>
- </tr>
- <tr>
- <td>11</td>
- <td>ISO/IEC 8859-9 - Latin alphabet No. 5 (Turkish)</td>
- </tr>
- <tr>
- <td>12</td>
- <td>ISO/IEC 8859-10 - Latin alphabet No. 6 (Nordic)</td>
- </tr>
- <tr>
- <td>13</td>
- <td>ISO/IEC 8859-11 - Latin/Thai alphabet</td>
- </tr>
- <tr>
- <td>15</td>
- <td>ISO/IEC 8859-13 - Latin alphabet No. 7 (Baltic)</td>
- </tr>
- <tr>
- <td>16</td>
- <td>ISO/IEC 8859-14 - Latin alphabet No. 8 (Celtic)</td>
- </tr>
- <tr>
- <td>17</td>
- <td>ISO/IEC 8859-15 - Latin alphabet No. 9</td>
- </tr>
- <tr>
- <td>18</td>
- <td>ISO/IEC 8859-16 - Latin alphabet No. 10</td>
- </tr>
- <tr>
- <td>20</td>
- <td>Shift JIS (JIS X 0208 and JIS X 0201)</td>
- </tr>
- <tr>
- <td>21</td>
- <td>Windows 1250 - Latin 2 (Central Europe)</td>
- </tr>
- <tr>
- <td>22</td>
- <td>Windows 1251 - Cyrillic</td>
- </tr>
- <tr>
- <td>23</td>
- <td>Windows 1252 - Latin 1</td>
- </tr>
- <tr>
- <td>24</td>
- <td>Windows 1256 - Arabic</td>
- </tr>
- <tr>
- <td>25</td>
- <td>UTF-16BE (High order byte first)</td>
- </tr>
- <tr>
- <td>26</td>
- <td>UTF-8</td>
- </tr>
- <tr>
- <td>27</td>
- <td>ASCII (ISO/IEC 646 IRV)</td>
- </tr>
- <tr>
- <td>28</td>
- <td>Big5 (Taiwan) Chinese Character Set</td>
- </tr>
- <tr>
- <td>29</td>
- <td>GB 2312 (PRC) Chinese Character Set</td>
- </tr>
- <tr>
- <td>30</td>
- <td>Korean Character Set EUC-KR (KS X 1001:2002)</td>
- </tr>
- <tr>
- <td>31</td>
- <td>GBK Chinese Character Set</td>
- </tr>
- <tr>
- <td>32</td>
- <td>GB 18030 Chinese Character Set</td>
- </tr>
- <tr>
- <td>33</td>
- <td>UTF-16LE (Low order byte first)</td>
- </tr>
- <tr>
- <td>34</td>
- <td>UTF-32BE (High order bytes first)</td>
- </tr>
- <tr>
- <td>35</td>
- <td>UTF-32LE (Low order bytes first)</td>
- </tr>
- <tr>
- <td>170</td>
- <td>ISO/IEC 646 Invariant<a href="#fn6" class="footnote-ref" id="fnref6"
- role="doc-noteref"><sup>6</sup></a></td>
- </tr>
- <tr>
- <td>899</td>
- <td>8-bit binary data</td>
- </tr>
- </tbody>
- </table>
- </div>
- <p>An ECI value of 0 does not encode any ECI information in the code
- symbol (unless the data contains non-default character set characters).
- In this case, the default character set applies (see Table <a
- href="#tbl:default_character_sets">: Default Character Sets</a>
- above).</p>
- <p>If no ECI is specified or a value of 0 is given, and the data does
- contain characters other than in the default character set, then Zint
- will automatically insert the appropriate single-byte ECI if possible
- (ECIs 3 to 24, excluding ECI 20), or failing that ECI 26 (UTF-8). A
- warning will be generated. This mechanism is not applied if the
- <code>--binary</code> option is given.</p>
- <p>Multiple ECIs can be specified using the <code>--segN</code> options
- - see <a href="#multiple-segments">4.16 Multiple Segments</a>.</p>
- <p>Note: the <code>--eci=3</code> specification should only be used for
- special purposes. Using this parameter, the ECI information is
- explicitly added to the symbol. Nevertheless, for ECI Code 3, this is
- not usually required, as this is the default encoding for most barcodes,
- which is also active without any ECI information.</p>
- <h4 id="input-modes-and-eci-example-1">4.11.2.1 Input Modes and ECI
- Example 1</h4>
- <p>The Euro sign U+20AC can be encoded in ISO/IEC 8859-15. The Euro sign
- has the ISO/IEC 8859-15 codepoint hex <code>"A4"</code>. It is encoded
- in UTF-8 as the hex sequence: <code>"E2 82 AC"</code>. Those 3 bytes are
- contained in the file <code>"utf8euro.txt"</code>. This command will
- generate the corresponding code:</p>
- <div class="sourceCode" id="cb42"><pre
- class="sourceCode bash"><code class="sourceCode bash"><span id="cb42-1"><a href="#cb42-1" aria-hidden="true" tabindex="-1"></a><span class="ex">zint</span> <span class="at">-b</span> 71 <span class="at">--scale</span><span class="op">=</span>10 <span class="at">--eci</span><span class="op">=</span>17 <span class="at">-i</span> utf8euro.txt</span></code></pre></div>
- <p>This is equivalent to the commands (using the <code>--esc</code>
- switch):</p>
- <div class="sourceCode" id="cb43"><pre
- class="sourceCode bash"><code class="sourceCode bash"><span id="cb43-1"><a href="#cb43-1" aria-hidden="true" tabindex="-1"></a><span class="ex">zint</span> <span class="at">-b</span> 71 <span class="at">--scale</span><span class="op">=</span>10 <span class="at">--eci</span><span class="op">=</span>17 <span class="at">--esc</span> <span class="at">-d</span> <span class="st">"\xE2\x82\xAC"</span></span>
- <span id="cb43-2"><a href="#cb43-2" aria-hidden="true" tabindex="-1"></a></span>
- <span id="cb43-3"><a href="#cb43-3" aria-hidden="true" tabindex="-1"></a><span class="ex">zint</span> <span class="at">-b</span> 71 <span class="at">--scale</span><span class="op">=</span>10 <span class="at">--eci</span><span class="op">=</span>17 <span class="at">--esc</span> <span class="at">-d</span> <span class="st">"\u20AC"</span></span></code></pre></div>
- <p>and to the command:</p>
- <div class="sourceCode" id="cb44"><pre
- class="sourceCode bash"><code class="sourceCode bash"><span id="cb44-1"><a href="#cb44-1" aria-hidden="true" tabindex="-1"></a><span class="ex">zint</span> <span class="at">-b</span> 71 <span class="at">--scale</span><span class="op">=</span>10 <span class="at">--eci</span><span class="op">=</span>17 <span class="at">-d</span> <span class="st">"€"</span></span></code></pre></div>
- <figure>
- <img src="images/datamatrix_euro.svg" title="fig:" class="i2d"
- alt="zint -b DATAMATRIX --eci=17 -d "€"" />
- <figcaption
- aria-hidden="true"><code>zint -b DATAMATRIX --eci=17 -d "€"</code></figcaption>
- </figure>
- <h4 id="input-modes-and-eci-example-2">4.11.2.2 Input Modes and ECI
- Example 2</h4>
- <p>The Chinese character with the Unicode codepoint U+5E38 can be
- encoded in Big5 encoding. The Big5 representation of this character is
- the two hex bytes: <code>"B1 60"</code> (contained in the file
- <code>"big5char.txt"</code>). The generation command for Data Matrix
- is:</p>
- <div class="sourceCode" id="cb45"><pre
- class="sourceCode bash"><code class="sourceCode bash"><span id="cb45-1"><a href="#cb45-1" aria-hidden="true" tabindex="-1"></a><span class="ex">zint</span> <span class="at">-b</span> 71 <span class="at">--scale</span><span class="op">=</span>10 <span class="at">--eci</span><span class="op">=</span>28 <span class="at">--binary</span> <span class="at">-i</span> big5char.txt</span></code></pre></div>
- <p>This is equivalent to the command (using the <code>--esc</code>
- switch):</p>
- <div class="sourceCode" id="cb46"><pre
- class="sourceCode bash"><code class="sourceCode bash"><span id="cb46-1"><a href="#cb46-1" aria-hidden="true" tabindex="-1"></a><span class="ex">zint</span> <span class="at">-b</span> 71 <span class="at">--scale</span><span class="op">=</span>10 <span class="at">--eci</span><span class="op">=</span>28 <span class="at">--binary</span> <span class="at">--esc</span> <span class="at">-d</span> <span class="st">"\xB1\x60"</span></span></code></pre></div>
- <p>and to the commands (no <code>--binary</code> switch so conversion
- occurs):</p>
- <div class="sourceCode" id="cb47"><pre
- class="sourceCode bash"><code class="sourceCode bash"><span id="cb47-1"><a href="#cb47-1" aria-hidden="true" tabindex="-1"></a><span class="ex">zint</span> <span class="at">-b</span> 71 <span class="at">--scale</span><span class="op">=</span>10 <span class="at">--eci</span><span class="op">=</span>28 <span class="at">--esc</span> <span class="at">-d</span> <span class="st">"\xE5\xB8\xB8"</span></span>
- <span id="cb47-2"><a href="#cb47-2" aria-hidden="true" tabindex="-1"></a></span>
- <span id="cb47-3"><a href="#cb47-3" aria-hidden="true" tabindex="-1"></a><span class="ex">zint</span> <span class="at">-b</span> 71 <span class="at">--scale</span><span class="op">=</span>10 <span class="at">--eci</span><span class="op">=</span>28 <span class="at">--esc</span> <span class="at">-d</span> <span class="st">"\u5E38"</span></span>
- <span id="cb47-4"><a href="#cb47-4" aria-hidden="true" tabindex="-1"></a></span>
- <span id="cb47-5"><a href="#cb47-5" aria-hidden="true" tabindex="-1"></a><span class="ex">zint</span> <span class="at">-b</span> 71 <span class="at">--scale</span><span class="op">=</span>10 <span class="at">--eci</span><span class="op">=</span>28 <span class="at">-d</span> <span class="st">"常"</span></span></code></pre></div>
- <figure>
- <img src="images/datamatrix_big5.svg" title="fig:" class="i2d"
- alt="zint -b DATAMATRIX --eci=28 -d "\u5E38" --esc" />
- <figcaption
- aria-hidden="true"><code>zint -b DATAMATRIX --eci=28 -d "\u5E38" --esc</code></figcaption>
- </figure>
- <h4 id="input-modes-and-eci-example-3">4.11.2.3 Input Modes and ECI
- Example 3</h4>
- <p>Some decoders (in particular mobile app ones) for QR Code assume
- UTF-8 encoding by default and do not support ECI. In this case supply
- UTF-8 data and use the <code>--binary</code> switch so that the data
- will be encoded as UTF-8 without conversion:</p>
- <div class="sourceCode" id="cb48"><pre
- class="sourceCode bash"><code class="sourceCode bash"><span id="cb48-1"><a href="#cb48-1" aria-hidden="true" tabindex="-1"></a><span class="ex">zint</span> <span class="at">-b</span> 58 <span class="at">--binary</span> <span class="at">-d</span> <span class="st">"UTF-8 data"</span></span></code></pre></div>
- <figure>
- <img src="images/qrcode_binary_utf8.svg" title="fig:" class="i2d"
- alt="zint -b QRCODE --binary -d "\xE2\x82\xAC\xE5\xB8\xB8" --esc" />
- <figcaption
- aria-hidden="true"><code>zint -b QRCODE --binary -d "\xE2\x82\xAC\xE5\xB8\xB8" --esc</code></figcaption>
- </figure>
- <h2 id="batch-processing">4.12 Batch Processing</h2>
- <p>Data can be batch processed by reading from a text file and producing
- a separate barcode image for each line of text in that file. To do this
- use the <code>--batch</code> switch together with <code>-i</code> to
- select the input file from which to read data. For example</p>
- <div class="sourceCode" id="cb49"><pre
- class="sourceCode bash"><code class="sourceCode bash"><span id="cb49-1"><a href="#cb49-1" aria-hidden="true" tabindex="-1"></a><span class="ex">zint</span> <span class="at">-b</span> EANX <span class="at">--batch</span> <span class="at">-i</span> ean13nos.txt</span></code></pre></div>
- <p>where <code>"ean13nos.txt"</code> contains a list of EAN-13 numbers
- (GTINs), each on its own line. Zint will automatically detect the end of
- a line of text (in either Unix or Windows formatted text files) and
- produce a symbol each time it finds this.</p>
- <p>Input files should end with a line feed character - if this is not
- present then Zint will not encode the last line of text, and will warn
- you that there is a problem.</p>
- <p>By default Zint will output numbered filenames starting with
- <code>00001.png</code>, <code>00002.png</code> etc. To change this
- behaviour specify the <code>-o</code> option using special characters in
- the output filename as shown in the table below:</p>
- <div id="tbl:batch_filename_formatting" class="tablenos">
- <table id="tbl:batch_filename_formatting"
- data-tag=": Batch Filename Formatting">
- <caption><span>Table : Batch Filename Formatting</span> </caption>
- <thead>
- <tr>
- <th>Input Character</th>
- <th style="text-align: left;">Interpretation</th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <td><code>~</code></td>
- <td style="text-align: left;">Insert a number or 0</td>
- </tr>
- <tr>
- <td><code>#</code></td>
- <td style="text-align: left;">Insert a number or space</td>
- </tr>
- <tr>
- <td><code>@</code></td>
- <td style="text-align: left;">Insert a number or <code>*</code> (or
- <code>+</code> on Windows)</td>
- </tr>
- <tr>
- <td>Any other</td>
- <td style="text-align: left;">Insert literally</td>
- </tr>
- </tbody>
- </table>
- </div>
- <p>For instance</p>
- <div class="sourceCode" id="cb50"><pre
- class="sourceCode bash"><code class="sourceCode bash"><span id="cb50-1"><a href="#cb50-1" aria-hidden="true" tabindex="-1"></a><span class="ex">zint</span> <span class="at">-b</span> EANX <span class="at">--batch</span> <span class="at">-i</span> ean13nos.txt <span class="at">-o</span> file~~~.svg</span></code></pre></div>
- <p>The following table shows some examples to clarify this method:</p>
- <div id="tbl:batch_filename_examples" class="tablenos">
- <table id="tbl:batch_filename_examples"
- data-tag=": Batch Filename Examples">
- <caption><span>Table : Batch Filename Examples</span> </caption>
- <thead>
- <tr>
- <th style="text-align: left;">Input</th>
- <th style="text-align: left;">Filenames Generated</th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <td style="text-align: left;"><code>-o file~~~.svg</code></td>
- <td style="text-align: left;"><code>"file001.svg"</code>,
- <code>"file002.svg"</code>, <code>"file003.svg"</code></td>
- </tr>
- <tr>
- <td style="text-align: left;"><code>-o @@@@bar.png</code></td>
- <td style="text-align: left;"><code>"***1.png"</code>,
- <code>"***2.png"</code>, <code>"***3.png"</code> (except Windows)</td>
- </tr>
- <tr>
- <td style="text-align: left;"><code>-o @@@@bar.png</code></td>
- <td style="text-align: left;"><code>"+++1.png"</code>,
- <code>"+++2.png"</code>, <code>"+++3.png"</code> (on Windows)</td>
- </tr>
- <tr>
- <td style="text-align: left;"><code>-o my~~~bar.eps</code></td>
- <td style="text-align: left;"><code>"my001bar.eps"</code>,
- <code>"my002bar.eps"</code>, <code>"my003bar.eps"</code></td>
- </tr>
- <tr>
- <td style="text-align: left;"><code>-o t#es~t~.png</code></td>
- <td style="text-align: left;"><code>"t es0t1.png"</code>,
- <code>"t es0t2.png"</code>, <code>"t es0t3.png"</code></td>
- </tr>
- </tbody>
- </table>
- </div>
- <p>The special characters can span directories also, which is useful
- when creating a large number of barcodes:</p>
- <div id="tbl:batch_dir_examples" class="tablenos">
- <table id="tbl:batch_dir_examples"
- data-tag=": Batch Directory Examples">
- <caption><span>Table : Batch Directory Examples</span> </caption>
- <thead>
- <tr>
- <th style="text-align: left;">Input</th>
- <th style="text-align: left;">Filenames Generated</th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <td style="text-align: left;"><code>-o dir~/file~~~.svg</code></td>
- <td style="text-align: left;"><code>"dir0/file001.svg"</code>,
- <code>"dir0/file002.svg"</code>, …</td>
- </tr>
- <tr>
- <td style="text-align: left;"></td>
- <td style="text-align: left;">, <code>"dir0/file999.svg"</code>,
- <code>"dir1/file000.svg"</code>, …</td>
- </tr>
- </tbody>
- </table>
- </div>
- <p>For an alternative method of naming output files see the
- <code>--mirror</code> option in <a href="#automatic-filenames">4.14
- Automatic Filenames</a> below.</p>
- <h2 id="direct-output-to-stdout">4.13 Direct Output to stdout</h2>
- <p>The finished image files can be output directly to stdout for use as
- part of a pipe by using the <code>--direct</code> option. By default
- <code>--direct</code> will output data as a PNG image (or GIF image if
- <code>libpng</code> is not present), but this can be altered by
- supplementing the <code>--direct</code> option with a
- <code>--filetype</code> option followed by the suffix of the file type
- required. For example:</p>
- <div class="sourceCode" id="cb51"><pre
- class="sourceCode bash"><code class="sourceCode bash"><span id="cb51-1"><a href="#cb51-1" aria-hidden="true" tabindex="-1"></a><span class="ex">zint</span> <span class="at">-b</span> 84 <span class="at">--direct</span> <span class="at">--filetype</span><span class="op">=</span>pcx <span class="at">-d</span> <span class="st">"Data to encode"</span></span></code></pre></div>
- <p>This command will output the symbol as a PCX file to stdout. For the
- supported output file formats see Table <a
- href="#tbl:output_file_formats">: Output File Formats</a>.</p>
- <hr />
- <p>CAUTION: Outputting binary files to the command shell without
- catching that data in a pipe can have unpredictable results. Use with
- care!</p>
- <hr />
- <h2 id="automatic-filenames">4.14 Automatic Filenames</h2>
- <p>The <code>--mirror</code> option instructs Zint to use the data to be
- encoded as an indicator of the filename to be used. This is particularly
- useful if you are processing batch data. For example the input data
- <code>"1234567"</code> will result in a file named
- <code>"1234567.png"</code>.</p>
- <p>There are restrictions, however, on what characters can be stored in
- a filename, so the filename may vary from the data if the data includes
- non-printable characters, for example, and may be shortened if the data
- input is long.</p>
- <p>To set the output file format use the <code>--filetype</code> option
- as detailed above in <a href="#direct-output-to-stdout">4.13 Direct
- Output to stdout</a>. To output to a specific directory use the
- <code>-o</code> option giving the name of the directory (any filename
- will be ignored, unless <code>--filetype</code> is not specified, in
- which case the filename’s extension will be used).</p>
- <h2 id="working-with-dots">4.15 Working with Dots</h2>
- <p>Matrix codes can be rendered as a series of dots or circles rather
- than the normal squares by using the <code>--dotty</code> option. This
- option is only available for matrix symbologies, and is automatically
- selected for DotCode. The size of the dots can be adjusted using the
- <code>--dotsize</code> option followed by the diameter of the dot, where
- that diameter is in X-dimensions. The minimum dot size is 0.01, the
- maximum is 20. The default size is 0.8.</p>
- <p>The default and minimum scale for raster output in dotty mode is
- 1.</p>
- <figure>
- <img src="images/codeone_s_dotty.svg" title="fig:" class="dotty"
- alt="zint -b CODEONE -d "123456789012345678" --dotty --vers=9" />
- <figcaption
- aria-hidden="true"><code>zint -b CODEONE -d "123456789012345678" --dotty --vers=9</code></figcaption>
- </figure>
- <h2 id="multiple-segments">4.16 Multiple Segments</h2>
- <p>If you need to specify different ECIs for different sections of the
- input data, the <code>--seg1</code> to <code>--seg9</code> options can
- be used. Each option is of the form <code>--segN=ECI,data</code> where
- <code>ECI</code> is the ECI code (see Table <a href="#tbl:eci_codes">:
- ECI Codes</a>) and <code>data</code> is the data to which this applies.
- This is in addition to the ECI and data specified using the
- <code>--eci</code> and <code>-d</code> options which must still be
- present and which in effect constitute segment 0. For instance</p>
- <div class="sourceCode" id="cb52"><pre
- class="sourceCode bash"><code class="sourceCode bash"><span id="cb52-1"><a href="#cb52-1" aria-hidden="true" tabindex="-1"></a><span class="ex">zint</span> <span class="at">-b</span> AZTEC_CODE <span class="at">--eci</span><span class="op">=</span>9 <span class="at">-d</span> <span class="st">"Κείμενο"</span> <span class="at">--seg1</span><span class="op">=</span>7,<span class="st">"Текст"</span> <span class="at">--seg2</span><span class="op">=</span>20,<span class="st">"文章"</span></span></code></pre></div>
- <p>specifies 3 segments: segment 0 with ECI 9 (Greek), segment 1 with
- ECI 7 (Cyrillic), and segment 2 with ECI 20 (Shift JIS). Segments must
- be consecutive.</p>
- <p>Naturally the symbology must be ECI-aware (see Table <a
- href="#tbl:eci_aware_symbologies">: ECI-Aware Symbologies</a>).</p>
- <figure>
- <img src="images/aztec_segs.svg" title="fig:" class="i2d"
- alt="zint -b AZTEC --eci=9 -d "Κείμενο" --seg1=7,"Текст" --seg2=20,"文章"" />
- <figcaption
- aria-hidden="true"><code>zint -b AZTEC --eci=9 -d "Κείμενο" --seg1=7,"Текст" --seg2=20,"文章"</code></figcaption>
- </figure>
- <p>ECIs of zero may be given, in which case Zint will automatically
- determine an ECI if necessary, as described in section <a
- href="#input-modes-and-eci">4.11.2 Input Modes and ECI</a>.</p>
- <p>Multiple segments are not currently supported for use with GS1
- data.</p>
- <h2 id="structured-append">4.17 Structured Append</h2>
- <p>Structured Append is a method of splitting data among several symbols
- so that they form a sequence that can be scanned and re-assembled in the
- correct order on reading, and is available for Aztec Code, Code One,
- Data Matrix, DotCode, Grid Matrix, MaxiCode, MicroPDF417, PDF417, QR
- Code and Ultracode.</p>
- <p>The <code>--structapp</code> option marks a symbol as part of a
- Structured Append sequence, and has the format</p>
- <pre><code>--structapp=I,C[,ID]</code></pre>
- <figure>
- <img src="images/datamatrix_structapp.svg" title="fig:" class="i2d"
- alt="zint -b DATAMATRIX -d "2nd of 3" --structapp="2,3,5006"" />
- <figcaption
- aria-hidden="true"><code>zint -b DATAMATRIX -d "2nd of 3" --structapp="2,3,5006"</code></figcaption>
- </figure>
- <p>where <code>I</code> is the index (position) of the symbol in the
- Structured Append sequence, <code>C</code> is the count or total number
- of symbols in the sequence, and <code>ID</code> is an optional
- identifier (not available for Code One, DotCode or MaxiCode) that is the
- same for all symbols belonging to the same sequence. The index is
- 1-based and goes from 1 to count. Count must be 2 or more. See the
- individual symbologies for further details.</p>
- <h2 id="help-options">4.18 Help Options</h2>
- <p>There are three help options which give information about how to use
- the command line. The <code>-h</code> or <code>--help</code> option will
- display a list of all of the valid options available, and also gives the
- exact version of the software (the version by itself can be displayed
- with <code>-v</code> or <code>--version</code>).</p>
- <p>The <code>-t</code> or <code>--types</code> option gives the table of
- symbologies along with the symbol ID numbers and names.</p>
- <p>The <code>-e</code> or <code>--ecinos</code> option gives a list of
- the ECI codes.</p>
- <h2 id="other-options">4.19 Other Options</h2>
- <p>Zint can output a representation of the symbol data as a set of
- hexadecimal values if asked to output to a text file
- (<code>"*.txt"</code>) or if given the option
- <code>--filetype=txt</code>. This can be used for test and diagnostic
- purposes.</p>
- <p>Additional options are available which are specific to certain
- symbologies. These may, for example, control the amount of error
- correction data or the size of the symbol. These options are discussed
- in section <a href="#types-of-symbology">6. Types of Symbology</a> of
- this guide.</p>
- <h1 id="using-the-api">5. Using the API</h1>
- <p>Zint has been written using the C language and has an API for use
- with C/C++ language programs. A Qt interface (see <a
- href="#annex-b.-qt-backend-qzint">Annex B. Qt Backend QZint</a>) is
- available in the <code>"backend_qt"</code> sub-directory, and a Tcl
- interface is available in the <code>"backend_tcl"</code> sub-directory
- (see <a href="#annex-c.-tcl-backend-binding">Annex C. Tcl Backend
- Binding</a>).</p>
- <p>The <code>libzint</code> API has been designed to be very similar to
- that used by the GNU Barcode package. This allows easy migration from
- GNU Barcode to Zint. Zint, however, uses none of the same function names
- or option names as GNU Barcode. This allows you to use both packages in
- your application without conflict if you wish.</p>
- <h2 id="creating-and-deleting-symbols">5.1 Creating and Deleting
- Symbols</h2>
- <p>The symbols manipulated by Zint are held in a
- <code>zint_symbol</code> structure defined in <code>"zint.h"</code>.
- These symbol structures are created with the
- <code>ZBarcode_Create()</code> function and deleted using the
- <code>ZBarcode_Delete()</code> function. For example the following code
- creates and then deletes a symbol:</p>
- <div class="sourceCode" id="cb54"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb54-1"><a href="#cb54-1" aria-hidden="true" tabindex="-1"></a><span class="pp">#include </span><span class="im"><zint.h></span></span>
- <span id="cb54-2"><a href="#cb54-2" aria-hidden="true" tabindex="-1"></a><span class="pp">#include </span><span class="im"><stdio.h></span></span>
- <span id="cb54-3"><a href="#cb54-3" aria-hidden="true" tabindex="-1"></a><span class="dt">int</span> main<span class="op">()</span></span>
- <span id="cb54-4"><a href="#cb54-4" aria-hidden="true" tabindex="-1"></a><span class="op">{</span></span>
- <span id="cb54-5"><a href="#cb54-5" aria-hidden="true" tabindex="-1"></a> <span class="kw">struct</span> zint_symbol <span class="op">*</span>my_symbol<span class="op">;</span></span>
- <span id="cb54-6"><a href="#cb54-6" aria-hidden="true" tabindex="-1"></a> my_symbol <span class="op">=</span> ZBarcode_Create<span class="op">();</span></span>
- <span id="cb54-7"><a href="#cb54-7" aria-hidden="true" tabindex="-1"></a> <span class="cf">if</span> <span class="op">(</span>my_symbol <span class="op">!=</span> NULL<span class="op">)</span> <span class="op">{</span></span>
- <span id="cb54-8"><a href="#cb54-8" aria-hidden="true" tabindex="-1"></a> printf<span class="op">(</span><span class="st">"Symbol successfully created!</span><span class="sc">\n</span><span class="st">"</span><span class="op">);</span></span>
- <span id="cb54-9"><a href="#cb54-9" aria-hidden="true" tabindex="-1"></a> ZBarcode_Delete<span class="op">(</span>my_symbol<span class="op">);</span></span>
- <span id="cb54-10"><a href="#cb54-10" aria-hidden="true" tabindex="-1"></a> <span class="op">}</span></span>
- <span id="cb54-11"><a href="#cb54-11" aria-hidden="true" tabindex="-1"></a> <span class="cf">return</span> <span class="dv">0</span><span class="op">;</span></span>
- <span id="cb54-12"><a href="#cb54-12" aria-hidden="true" tabindex="-1"></a><span class="op">}</span></span></code></pre></div>
- <p>When compiling this code it will need to be linked with the
- <code>libzint</code> library using the <code>-lzint</code> option:</p>
- <div class="sourceCode" id="cb55"><pre
- class="sourceCode bash"><code class="sourceCode bash"><span id="cb55-1"><a href="#cb55-1" aria-hidden="true" tabindex="-1"></a><span class="fu">gcc</span> <span class="at">-o</span> simple simple.c <span class="at">-lzint</span></span></code></pre></div>
- <h2 id="encoding-and-saving-to-file">5.2 Encoding and Saving to
- File</h2>
- <p>To encode data in a barcode use the <code>ZBarcode_Encode()</code>
- function. To write the symbol to a file use the
- <code>ZBarcode_Print()</code> function. For example the following code
- takes a string from the command line and outputs a Code 128 symbol to a
- PNG file named <code>"out.png"</code> (or a GIF file
- <code>"out.gif"</code> if <code>libpng</code> is not present) in the
- current working directory:</p>
- <div class="sourceCode" id="cb56"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb56-1"><a href="#cb56-1" aria-hidden="true" tabindex="-1"></a><span class="pp">#include </span><span class="im"><zint.h></span></span>
- <span id="cb56-2"><a href="#cb56-2" aria-hidden="true" tabindex="-1"></a><span class="dt">int</span> main<span class="op">(</span><span class="dt">int</span> argc<span class="op">,</span> <span class="dt">char</span> <span class="op">**</span>argv<span class="op">)</span></span>
- <span id="cb56-3"><a href="#cb56-3" aria-hidden="true" tabindex="-1"></a><span class="op">{</span></span>
- <span id="cb56-4"><a href="#cb56-4" aria-hidden="true" tabindex="-1"></a> <span class="kw">struct</span> zint_symbol <span class="op">*</span>my_symbol<span class="op">;</span></span>
- <span id="cb56-5"><a href="#cb56-5" aria-hidden="true" tabindex="-1"></a> my_symbol <span class="op">=</span> ZBarcode_Create<span class="op">();</span></span>
- <span id="cb56-6"><a href="#cb56-6" aria-hidden="true" tabindex="-1"></a> ZBarcode_Encode<span class="op">(</span>my_symbol<span class="op">,</span> argv<span class="op">[</span><span class="dv">1</span><span class="op">],</span> <span class="dv">0</span><span class="op">);</span></span>
- <span id="cb56-7"><a href="#cb56-7" aria-hidden="true" tabindex="-1"></a> ZBarcode_Print<span class="op">(</span>my_symbol<span class="op">,</span> <span class="dv">0</span><span class="op">);</span></span>
- <span id="cb56-8"><a href="#cb56-8" aria-hidden="true" tabindex="-1"></a> ZBarcode_Delete<span class="op">(</span>my_symbol<span class="op">);</span></span>
- <span id="cb56-9"><a href="#cb56-9" aria-hidden="true" tabindex="-1"></a> <span class="cf">return</span> <span class="dv">0</span><span class="op">;</span></span>
- <span id="cb56-10"><a href="#cb56-10" aria-hidden="true" tabindex="-1"></a><span class="op">}</span></span></code></pre></div>
- <p>This can also be done in one stage using the
- <code>ZBarcode_Encode_and_Print()</code> function as shown in the next
- example:</p>
- <div class="sourceCode" id="cb57"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb57-1"><a href="#cb57-1" aria-hidden="true" tabindex="-1"></a><span class="pp">#include </span><span class="im"><zint.h></span></span>
- <span id="cb57-2"><a href="#cb57-2" aria-hidden="true" tabindex="-1"></a><span class="dt">int</span> main<span class="op">(</span><span class="dt">int</span> argc<span class="op">,</span> <span class="dt">char</span> <span class="op">**</span>argv<span class="op">)</span></span>
- <span id="cb57-3"><a href="#cb57-3" aria-hidden="true" tabindex="-1"></a><span class="op">{</span></span>
- <span id="cb57-4"><a href="#cb57-4" aria-hidden="true" tabindex="-1"></a> <span class="kw">struct</span> zint_symbol <span class="op">*</span>my_symbol<span class="op">;</span></span>
- <span id="cb57-5"><a href="#cb57-5" aria-hidden="true" tabindex="-1"></a> my_symbol <span class="op">=</span> ZBarcode_Create<span class="op">();</span></span>
- <span id="cb57-6"><a href="#cb57-6" aria-hidden="true" tabindex="-1"></a> ZBarcode_Encode_and_Print<span class="op">(</span>my_symbol<span class="op">,</span> argv<span class="op">[</span><span class="dv">1</span><span class="op">],</span> <span class="dv">0</span><span class="op">,</span> <span class="dv">0</span><span class="op">);</span></span>
- <span id="cb57-7"><a href="#cb57-7" aria-hidden="true" tabindex="-1"></a> ZBarcode_Delete<span class="op">(</span>my_symbol<span class="op">);</span></span>
- <span id="cb57-8"><a href="#cb57-8" aria-hidden="true" tabindex="-1"></a> <span class="cf">return</span> <span class="dv">0</span><span class="op">;</span></span>
- <span id="cb57-9"><a href="#cb57-9" aria-hidden="true" tabindex="-1"></a><span class="op">}</span></span></code></pre></div>
- <p>Note that when using the API, the input data is assumed to be 8-bit
- binary unless the <code>input_mode</code> member of the
- <code>zint_symbol</code> structure is set - see <a
- href="#setting-the-input-mode">5.11 Setting the Input Mode</a> for
- details.</p>
- <h2 id="encoding-and-printing-functions-in-depth">5.3 Encoding and
- Printing Functions in Depth</h2>
- <p>The functions for encoding and printing barcodes are defined as:</p>
- <div class="sourceCode" id="cb58"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb58-1"><a href="#cb58-1" aria-hidden="true" tabindex="-1"></a><span class="dt">int</span> ZBarcode_Encode<span class="op">(</span><span class="kw">struct</span> zint_symbol <span class="op">*</span>symbol<span class="op">,</span></span>
- <span id="cb58-2"><a href="#cb58-2" aria-hidden="true" tabindex="-1"></a> <span class="dt">const</span> <span class="dt">unsigned</span> <span class="dt">char</span> <span class="op">*</span>source<span class="op">,</span> <span class="dt">int</span> length<span class="op">);</span></span>
- <span id="cb58-3"><a href="#cb58-3" aria-hidden="true" tabindex="-1"></a></span>
- <span id="cb58-4"><a href="#cb58-4" aria-hidden="true" tabindex="-1"></a><span class="dt">int</span> ZBarcode_Encode_File<span class="op">(</span><span class="kw">struct</span> zint_symbol <span class="op">*</span>symbol<span class="op">,</span></span>
- <span id="cb58-5"><a href="#cb58-5" aria-hidden="true" tabindex="-1"></a> <span class="dt">const</span> <span class="dt">char</span> <span class="op">*</span>filename<span class="op">);</span></span>
- <span id="cb58-6"><a href="#cb58-6" aria-hidden="true" tabindex="-1"></a></span>
- <span id="cb58-7"><a href="#cb58-7" aria-hidden="true" tabindex="-1"></a><span class="dt">int</span> ZBarcode_Print<span class="op">(</span><span class="kw">struct</span> zint_symbol <span class="op">*</span>symbol<span class="op">,</span> <span class="dt">int</span> rotate_angle<span class="op">);</span></span>
- <span id="cb58-8"><a href="#cb58-8" aria-hidden="true" tabindex="-1"></a></span>
- <span id="cb58-9"><a href="#cb58-9" aria-hidden="true" tabindex="-1"></a><span class="dt">int</span> ZBarcode_Encode_and_Print<span class="op">(</span><span class="kw">struct</span> zint_symbol <span class="op">*</span>symbol<span class="op">,</span></span>
- <span id="cb58-10"><a href="#cb58-10" aria-hidden="true" tabindex="-1"></a> <span class="dt">const</span> <span class="dt">unsigned</span> <span class="dt">char</span> <span class="op">*</span>source<span class="op">,</span> <span class="dt">int</span> length<span class="op">,</span> <span class="dt">int</span> rotate_angle<span class="op">);</span></span>
- <span id="cb58-11"><a href="#cb58-11" aria-hidden="true" tabindex="-1"></a></span>
- <span id="cb58-12"><a href="#cb58-12" aria-hidden="true" tabindex="-1"></a><span class="dt">int</span> ZBarcode_Encode_File_and_Print<span class="op">(</span><span class="kw">struct</span> zint_symbol <span class="op">*</span>symbol<span class="op">,</span></span>
- <span id="cb58-13"><a href="#cb58-13" aria-hidden="true" tabindex="-1"></a> <span class="dt">const</span> <span class="dt">char</span> <span class="op">*</span>filename<span class="op">,</span> <span class="dt">int</span> rotate_angle<span class="op">);</span></span></code></pre></div>
- <p>In these definitions <code>length</code> can be used to set the
- length of the input string. This allows the encoding of <code>NUL</code>
- (ASCII 0) characters in those symbologies which allow this. A value of 0
- (or less than 0) will disable this usage and Zint will encode data up to
- the first <code>NUL</code> character in the input string, which must be
- present.</p>
- <p>The <code>rotate_angle</code> value can be used to rotate the image
- when outputting. Valid values are 0, 90, 180 and 270.</p>
- <p>The <code>ZBarcode_Encode_File()</code> and
- <code>ZBarcode_Encode_File_and_Print()</code> functions can be used to
- encode data read directly from a text file where the filename is given
- in the <code>NUL</code>-terminated <code>filename</code> string. The
- special filename <code>"-"</code> (single hyphen) can be used to read
- from stdin. Note that on Windows, filenames are assumed to be UTF-8
- encoded.</p>
- <p>If printing more than one barcode, the <code>zint_symbol</code>
- structure may be re-used by calling the <code>ZBarcode_Clear()</code>
- function after each barcode to free any output buffers allocated. The
- <code>zint_symbol</code> input members must be reset. To fully restore
- <code>zint_symbol</code> to its default state, call
- <code>ZBarcode_Reset()</code> instead.</p>
- <h2 id="buffering-symbols-in-memory-raster">5.4 Buffering Symbols in
- Memory (raster)</h2>
- <p>In addition to saving barcode images to file Zint allows you to
- access a representation of the resulting bitmap image in memory. The
- following functions allow you to do this:</p>
- <div class="sourceCode" id="cb59"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb59-1"><a href="#cb59-1" aria-hidden="true" tabindex="-1"></a><span class="dt">int</span> ZBarcode_Buffer<span class="op">(</span><span class="kw">struct</span> zint_symbol <span class="op">*</span>symbol<span class="op">,</span> <span class="dt">int</span> rotate_angle<span class="op">);</span></span>
- <span id="cb59-2"><a href="#cb59-2" aria-hidden="true" tabindex="-1"></a></span>
- <span id="cb59-3"><a href="#cb59-3" aria-hidden="true" tabindex="-1"></a><span class="dt">int</span> ZBarcode_Encode_and_Buffer<span class="op">(</span><span class="kw">struct</span> zint_symbol <span class="op">*</span>symbol<span class="op">,</span></span>
- <span id="cb59-4"><a href="#cb59-4" aria-hidden="true" tabindex="-1"></a> <span class="dt">const</span> <span class="dt">unsigned</span> <span class="dt">char</span> <span class="op">*</span>source<span class="op">,</span> <span class="dt">int</span> length<span class="op">,</span> <span class="dt">int</span> rotate_angle<span class="op">);</span></span>
- <span id="cb59-5"><a href="#cb59-5" aria-hidden="true" tabindex="-1"></a></span>
- <span id="cb59-6"><a href="#cb59-6" aria-hidden="true" tabindex="-1"></a><span class="dt">int</span> ZBarcode_Encode_File_and_Buffer<span class="op">(</span><span class="kw">struct</span> zint_symbol <span class="op">*</span>symbol<span class="op">,</span></span>
- <span id="cb59-7"><a href="#cb59-7" aria-hidden="true" tabindex="-1"></a> <span class="dt">const</span> <span class="dt">char</span> <span class="op">*</span>filename<span class="op">,</span> <span class="dt">int</span> rotate_angle<span class="op">);</span></span></code></pre></div>
- <p>The arguments here are the same as above, and rotation and colour
- options can be used with the buffer functions in the same way as when
- saving to a file. The difference is that instead of saving the image to
- a file it is placed in a byte (<code>unsigned char</code>) array pointed
- to by the <code>bitmap</code> member, with <code>bitmap_width</code> set
- to the number of columns and <code>bitmap_height</code> set to the
- number of rows.</p>
- <p>The RGB channels are split into 3 consecutive red, green, blue bytes
- per pixel, and there are <code>bitmap_width</code> pixels per row and
- <code>bitmap_height</code> rows, so the total size of the
- <code>bitmap</code> array is
- <code>3 * bitmap_width * bitmap_height</code>.</p>
- <p>If the background and/or foreground are RGBA then the byte array
- <code>alphamap</code> will also be set, with a single alpha value for
- each pixel. Its total size will be
- <code>bitmap_width * bitmap_height</code>.</p>
- <p>The pixel data can be extracted from the array (or arrays) by the
- method shown in the example below, where <code>render_rgb()</code> and
- <code>render_rgba()</code> are assumed to be functions for drawing an
- RGB and RGBA pixel on the screen implemented by the client
- application:</p>
- <div class="sourceCode" id="cb60"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb60-1"><a href="#cb60-1" aria-hidden="true" tabindex="-1"></a><span class="dt">int</span> row<span class="op">,</span> col<span class="op">,</span> i <span class="op">=</span> <span class="dv">0</span><span class="op">,</span> j <span class="op">=</span> <span class="dv">0</span><span class="op">;</span></span>
- <span id="cb60-2"><a href="#cb60-2" aria-hidden="true" tabindex="-1"></a><span class="dt">int</span> red<span class="op">,</span> blue<span class="op">,</span> green<span class="op">,</span> alpha<span class="op">;</span></span>
- <span id="cb60-3"><a href="#cb60-3" aria-hidden="true" tabindex="-1"></a></span>
- <span id="cb60-4"><a href="#cb60-4" aria-hidden="true" tabindex="-1"></a><span class="cf">for</span> <span class="op">(</span>row <span class="op">=</span> <span class="dv">0</span><span class="op">;</span> row <span class="op"><</span> my_symbol<span class="op">-></span>bitmap_height<span class="op">;</span> row<span class="op">++)</span> <span class="op">{</span></span>
- <span id="cb60-5"><a href="#cb60-5" aria-hidden="true" tabindex="-1"></a> <span class="cf">for</span> <span class="op">(</span>col <span class="op">=</span> <span class="dv">0</span><span class="op">;</span> col <span class="op"><</span> my_symbol<span class="op">-></span>bitmap_width<span class="op">;</span> col<span class="op">++)</span> <span class="op">{</span></span>
- <span id="cb60-6"><a href="#cb60-6" aria-hidden="true" tabindex="-1"></a> red <span class="op">=</span> <span class="op">(</span><span class="dt">int</span><span class="op">)</span> my_symbol<span class="op">-></span>bitmap<span class="op">[</span>i<span class="op">];</span></span>
- <span id="cb60-7"><a href="#cb60-7" aria-hidden="true" tabindex="-1"></a> green <span class="op">=</span> <span class="op">(</span><span class="dt">int</span><span class="op">)</span> my_symbol<span class="op">-></span>bitmap<span class="op">[</span>i <span class="op">+</span> <span class="dv">1</span><span class="op">];</span></span>
- <span id="cb60-8"><a href="#cb60-8" aria-hidden="true" tabindex="-1"></a> blue <span class="op">=</span> <span class="op">(</span><span class="dt">int</span><span class="op">)</span> my_symbol<span class="op">-></span>bitmap<span class="op">[</span>i <span class="op">+</span> <span class="dv">2</span><span class="op">];</span></span>
- <span id="cb60-9"><a href="#cb60-9" aria-hidden="true" tabindex="-1"></a> <span class="cf">if</span> <span class="op">(</span>my_symbol<span class="op">-></span>alphamap<span class="op">)</span> <span class="op">{</span></span>
- <span id="cb60-10"><a href="#cb60-10" aria-hidden="true" tabindex="-1"></a> alpha <span class="op">=</span> <span class="op">(</span><span class="dt">int</span><span class="op">)</span> my_symbol<span class="op">-></span>alphamap<span class="op">[</span>j<span class="op">];</span></span>
- <span id="cb60-11"><a href="#cb60-11" aria-hidden="true" tabindex="-1"></a> render_rgba<span class="op">(</span>row<span class="op">,</span> col<span class="op">,</span> red<span class="op">,</span> green<span class="op">,</span> blue<span class="op">,</span> alpha<span class="op">);</span></span>
- <span id="cb60-12"><a href="#cb60-12" aria-hidden="true" tabindex="-1"></a> j<span class="op">++;</span></span>
- <span id="cb60-13"><a href="#cb60-13" aria-hidden="true" tabindex="-1"></a> <span class="op">}</span> <span class="cf">else</span> <span class="op">{</span></span>
- <span id="cb60-14"><a href="#cb60-14" aria-hidden="true" tabindex="-1"></a> render_rgb<span class="op">(</span>row<span class="op">,</span> col<span class="op">,</span> red<span class="op">,</span> green<span class="op">,</span> blue<span class="op">);</span></span>
- <span id="cb60-15"><a href="#cb60-15" aria-hidden="true" tabindex="-1"></a> <span class="op">}</span></span>
- <span id="cb60-16"><a href="#cb60-16" aria-hidden="true" tabindex="-1"></a> i <span class="op">+=</span> <span class="dv">3</span><span class="op">;</span></span>
- <span id="cb60-17"><a href="#cb60-17" aria-hidden="true" tabindex="-1"></a> <span class="op">}</span></span>
- <span id="cb60-18"><a href="#cb60-18" aria-hidden="true" tabindex="-1"></a><span class="op">}</span></span></code></pre></div>
- <p>Where speed is important, the buffer can be returned instead in a
- more compact intermediate form using the output option
- <code>OUT_BUFFER_INTERMEDIATE</code>. Here each byte is an ASCII value:
- <code>'1'</code> for foreground colour and <code>'0'</code> for
- background colour, except for Ultracode, which also uses colour codes:
- <code>'W'</code> for white, <code>'C'</code> for cyan, <code>'B'</code>
- for blue, <code>'M'</code> for magenta, <code>'R'</code> for red,
- <code>'Y'</code> for yellow, <code>'G'</code> for green, and
- <code>'K'</code> for black. Alpha values are not reported
- (<code>alphamap</code> will always be <code>NULL</code>). The loop for
- accessing the data is then:</p>
- <div class="sourceCode" id="cb61"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb61-1"><a href="#cb61-1" aria-hidden="true" tabindex="-1"></a><span class="dt">int</span> row<span class="op">,</span> col<span class="op">,</span> i <span class="op">=</span> <span class="dv">0</span><span class="op">;</span></span>
- <span id="cb61-2"><a href="#cb61-2" aria-hidden="true" tabindex="-1"></a></span>
- <span id="cb61-3"><a href="#cb61-3" aria-hidden="true" tabindex="-1"></a><span class="cf">for</span> <span class="op">(</span>row <span class="op">=</span> <span class="dv">0</span><span class="op">;</span> row <span class="op"><</span> my_symbol<span class="op">-></span>bitmap_height<span class="op">;</span> row<span class="op">++)</span> <span class="op">{</span></span>
- <span id="cb61-4"><a href="#cb61-4" aria-hidden="true" tabindex="-1"></a> <span class="cf">for</span> <span class="op">(</span>col <span class="op">=</span> <span class="dv">0</span><span class="op">;</span> col <span class="op"><</span> my_symbol<span class="op">-></span>bitmap_width<span class="op">;</span> col<span class="op">++)</span> <span class="op">{</span></span>
- <span id="cb61-5"><a href="#cb61-5" aria-hidden="true" tabindex="-1"></a> render_pixel<span class="op">(</span>row<span class="op">,</span> col<span class="op">,</span> my_symbol<span class="op">-></span>bitmap<span class="op">[</span>i<span class="op">]);</span></span>
- <span id="cb61-6"><a href="#cb61-6" aria-hidden="true" tabindex="-1"></a> i<span class="op">++;</span></span>
- <span id="cb61-7"><a href="#cb61-7" aria-hidden="true" tabindex="-1"></a> <span class="op">}</span></span>
- <span id="cb61-8"><a href="#cb61-8" aria-hidden="true" tabindex="-1"></a><span class="op">}</span></span></code></pre></div>
- <h2 id="buffering-symbols-in-memory-vector">5.5 Buffering Symbols in
- Memory (vector)</h2>
- <p>Symbols can also be saved to memory in a vector representation as
- well as a bitmap one. The following functions, exactly analogous to the
- ones above, allow you to do this:</p>
- <div class="sourceCode" id="cb62"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb62-1"><a href="#cb62-1" aria-hidden="true" tabindex="-1"></a><span class="dt">int</span> ZBarcode_Buffer_Vector<span class="op">(</span><span class="kw">struct</span> zint_symbol <span class="op">*</span>symbol<span class="op">,</span> <span class="dt">int</span> rotate_angle<span class="op">);</span></span>
- <span id="cb62-2"><a href="#cb62-2" aria-hidden="true" tabindex="-1"></a></span>
- <span id="cb62-3"><a href="#cb62-3" aria-hidden="true" tabindex="-1"></a><span class="dt">int</span> ZBarcode_Encode_and_Buffer_Vector<span class="op">(</span><span class="kw">struct</span> zint_symbol <span class="op">*</span>symbol<span class="op">,</span></span>
- <span id="cb62-4"><a href="#cb62-4" aria-hidden="true" tabindex="-1"></a> <span class="dt">const</span> <span class="dt">unsigned</span> <span class="dt">char</span> <span class="op">*</span>source<span class="op">,</span> <span class="dt">int</span> length<span class="op">,</span> <span class="dt">int</span> rotate_angle<span class="op">);</span></span>
- <span id="cb62-5"><a href="#cb62-5" aria-hidden="true" tabindex="-1"></a></span>
- <span id="cb62-6"><a href="#cb62-6" aria-hidden="true" tabindex="-1"></a><span class="dt">int</span> ZBarcode_Encode_File_and_Buffer_Vector<span class="op">(</span><span class="kw">struct</span> zint_symbol <span class="op">*</span>symbol<span class="op">,</span></span>
- <span id="cb62-7"><a href="#cb62-7" aria-hidden="true" tabindex="-1"></a> <span class="dt">const</span> <span class="dt">char</span> <span class="op">*</span>filename<span class="op">,</span> <span class="dt">int</span> rotate_angle<span class="op">);</span></span></code></pre></div>
- <p>Here the <code>vector</code> member is set to point to a
- <code>zint_vector</code> header structure which contains pointers to
- lists of structures representing the various elements of the barcode:
- rectangles, hexagons, strings and circles. To draw the barcode, each of
- the element types is iterated in turn, and using the information stored
- is drawn by a rendering system. For instance, to draw a barcode using a
- rendering system with <code>prepare_canvas()</code>,
- <code>draw_rect()</code>, <code>draw_hexagon()</code>,
- <code>draw_string()</code>, and <code>draw_circle()</code> routines
- available:</p>
- <div class="sourceCode" id="cb63"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb63-1"><a href="#cb63-1" aria-hidden="true" tabindex="-1"></a><span class="kw">struct</span> zint_vector_rect <span class="op">*</span>rect<span class="op">;</span></span>
- <span id="cb63-2"><a href="#cb63-2" aria-hidden="true" tabindex="-1"></a><span class="kw">struct</span> zint_vector_hexagon <span class="op">*</span>hex<span class="op">;</span></span>
- <span id="cb63-3"><a href="#cb63-3" aria-hidden="true" tabindex="-1"></a><span class="kw">struct</span> zint_vector_string <span class="op">*</span>string<span class="op">;</span></span>
- <span id="cb63-4"><a href="#cb63-4" aria-hidden="true" tabindex="-1"></a><span class="kw">struct</span> zint_vector_circle <span class="op">*</span>circle<span class="op">;</span></span>
- <span id="cb63-5"><a href="#cb63-5" aria-hidden="true" tabindex="-1"></a></span>
- <span id="cb63-6"><a href="#cb63-6" aria-hidden="true" tabindex="-1"></a>prepare_canvas<span class="op">(</span>my_symbol<span class="op">-></span>vector<span class="op">-></span>width<span class="op">,</span> my_symbol<span class="op">-></span>vector<span class="op">-></span>height<span class="op">,</span></span>
- <span id="cb63-7"><a href="#cb63-7" aria-hidden="true" tabindex="-1"></a> my_symbol<span class="op">-></span>scale<span class="op">,</span> my_symbol<span class="op">-></span>fgcolour<span class="op">,</span> my_symbol<span class="op">-></span>bgcolour<span class="op">,</span></span>
- <span id="cb63-8"><a href="#cb63-8" aria-hidden="true" tabindex="-1"></a> rotate_angle<span class="op">);</span></span>
- <span id="cb63-9"><a href="#cb63-9" aria-hidden="true" tabindex="-1"></a></span>
- <span id="cb63-10"><a href="#cb63-10" aria-hidden="true" tabindex="-1"></a><span class="cf">for</span> <span class="op">(</span>rect <span class="op">=</span> my_symbol<span class="op">-></span>vector<span class="op">-></span>rectangles<span class="op">;</span> rect<span class="op">;</span> rect <span class="op">=</span> rect<span class="op">-></span>next<span class="op">)</span> <span class="op">{</span></span>
- <span id="cb63-11"><a href="#cb63-11" aria-hidden="true" tabindex="-1"></a> draw_rect<span class="op">(</span>rect<span class="op">-></span>x<span class="op">,</span> rect<span class="op">-></span>y<span class="op">,</span> rect<span class="op">-></span>width<span class="op">,</span> rect<span class="op">-></span>height<span class="op">,</span></span>
- <span id="cb63-12"><a href="#cb63-12" aria-hidden="true" tabindex="-1"></a> rect<span class="op">-></span>colour<span class="op">);</span></span>
- <span id="cb63-13"><a href="#cb63-13" aria-hidden="true" tabindex="-1"></a><span class="op">}</span></span>
- <span id="cb63-14"><a href="#cb63-14" aria-hidden="true" tabindex="-1"></a><span class="cf">for</span> <span class="op">(</span>hex <span class="op">=</span> my_symbol<span class="op">-></span>vector<span class="op">-></span>hexagons<span class="op">;</span> hex<span class="op">;</span> hex <span class="op">=</span> hex<span class="op">-></span>next<span class="op">)</span> <span class="op">{</span></span>
- <span id="cb63-15"><a href="#cb63-15" aria-hidden="true" tabindex="-1"></a> draw_hexagon<span class="op">(</span>hex<span class="op">-></span>x<span class="op">,</span> hex<span class="op">-></span>y<span class="op">,</span> hex<span class="op">-></span>diameter<span class="op">,</span> hex<span class="op">-></span>rotation<span class="op">);</span></span>
- <span id="cb63-16"><a href="#cb63-16" aria-hidden="true" tabindex="-1"></a><span class="op">}</span></span>
- <span id="cb63-17"><a href="#cb63-17" aria-hidden="true" tabindex="-1"></a><span class="cf">for</span> <span class="op">(</span>string <span class="op">=</span> my_symbol<span class="op">-></span>vector<span class="op">-></span>strings<span class="op">;</span> string<span class="op">;</span> string <span class="op">=</span> string<span class="op">-></span>next<span class="op">)</span> <span class="op">{</span></span>
- <span id="cb63-18"><a href="#cb63-18" aria-hidden="true" tabindex="-1"></a> draw_string<span class="op">(</span>string<span class="op">-></span>x<span class="op">,</span> string<span class="op">-></span>y<span class="op">,</span> string<span class="op">-></span>fsize<span class="op">,</span></span>
- <span id="cb63-19"><a href="#cb63-19" aria-hidden="true" tabindex="-1"></a> string<span class="op">-></span>rotation<span class="op">,</span> string<span class="op">-></span>halign<span class="op">,</span></span>
- <span id="cb63-20"><a href="#cb63-20" aria-hidden="true" tabindex="-1"></a> string<span class="op">-></span>text<span class="op">,</span> string<span class="op">-></span>length<span class="op">);</span></span>
- <span id="cb63-21"><a href="#cb63-21" aria-hidden="true" tabindex="-1"></a><span class="op">}</span></span>
- <span id="cb63-22"><a href="#cb63-22" aria-hidden="true" tabindex="-1"></a><span class="cf">for</span> <span class="op">(</span>circle <span class="op">=</span> my_symbol<span class="op">-></span>vector<span class="op">-></span>circles<span class="op">;</span> circle<span class="op">;</span> circle <span class="op">=</span> circle<span class="op">-></span>next<span class="op">)</span> <span class="op">{</span></span>
- <span id="cb63-23"><a href="#cb63-23" aria-hidden="true" tabindex="-1"></a> draw_circle<span class="op">(</span>circle<span class="op">-></span>x<span class="op">,</span> circle<span class="op">-></span>y<span class="op">,</span> circle<span class="op">-></span>diameter<span class="op">,</span> circle<span class="op">-></span>width<span class="op">);</span></span>
- <span id="cb63-24"><a href="#cb63-24" aria-hidden="true" tabindex="-1"></a><span class="op">}</span></span></code></pre></div>
- <h2 id="buffering-symbols-in-memory-memfile">5.6 Buffering Symbols in
- Memory (memfile)</h2>
- <p>Symbols can also be stored as “in-memory” file buffers by giving the
- <code>BARCODE_MEMORY_FILE</code> option to the
- <code>output_options</code> member, which saves the print output to
- member <code>memfile</code> instead of to the output file
- <code>outfile</code>. The length of the buffer is given in
- <code>memfile_size</code>. For instance:</p>
- <div class="sourceCode" id="cb64"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb64-1"><a href="#cb64-1" aria-hidden="true" tabindex="-1"></a><span class="pp">#include </span><span class="im"><zint.h></span></span>
- <span id="cb64-2"><a href="#cb64-2" aria-hidden="true" tabindex="-1"></a><span class="pp">#include </span><span class="im"><stdio.h></span></span>
- <span id="cb64-3"><a href="#cb64-3" aria-hidden="true" tabindex="-1"></a><span class="pp">#include </span><span class="im"><string.h></span></span>
- <span id="cb64-4"><a href="#cb64-4" aria-hidden="true" tabindex="-1"></a><span class="dt">int</span> main<span class="op">(</span><span class="dt">int</span> argc<span class="op">,</span> <span class="dt">char</span> <span class="op">**</span>argv<span class="op">)</span></span>
- <span id="cb64-5"><a href="#cb64-5" aria-hidden="true" tabindex="-1"></a><span class="op">{</span></span>
- <span id="cb64-6"><a href="#cb64-6" aria-hidden="true" tabindex="-1"></a> <span class="kw">struct</span> zint_symbol <span class="op">*</span>my_symbol<span class="op">;</span></span>
- <span id="cb64-7"><a href="#cb64-7" aria-hidden="true" tabindex="-1"></a> my_symbol <span class="op">=</span> ZBarcode_Create<span class="op">();</span></span>
- <span id="cb64-8"><a href="#cb64-8" aria-hidden="true" tabindex="-1"></a> my_symbol<span class="op">-></span>output_options <span class="op">|=</span> BARCODE_MEMORY_FILE<span class="op">;</span></span>
- <span id="cb64-9"><a href="#cb64-9" aria-hidden="true" tabindex="-1"></a> <span class="co">/* Only the extension is used, to determine output format */</span></span>
- <span id="cb64-10"><a href="#cb64-10" aria-hidden="true" tabindex="-1"></a> strcpy<span class="op">(</span>my_symbol<span class="op">-></span>outfile<span class="op">,</span> <span class="st">"mem.svg"</span><span class="op">);</span></span>
- <span id="cb64-11"><a href="#cb64-11" aria-hidden="true" tabindex="-1"></a> ZBarcode_Encode_and_Print<span class="op">(</span>my_symbol<span class="op">,</span> argv<span class="op">[</span><span class="dv">1</span><span class="op">],</span> <span class="dv">0</span><span class="op">,</span> <span class="dv">0</span><span class="op">);</span></span>
- <span id="cb64-12"><a href="#cb64-12" aria-hidden="true" tabindex="-1"></a> <span class="co">/* `my_symbol->memfile` now contains the SVG output */</span></span>
- <span id="cb64-13"><a href="#cb64-13" aria-hidden="true" tabindex="-1"></a> fwrite<span class="op">(</span>my_symbol<span class="op">-></span>memfile<span class="op">,</span> <span class="dv">1</span><span class="op">,</span> my_symbol<span class="op">-></span>memfile_size<span class="op">,</span> stdout<span class="op">);</span></span>
- <span id="cb64-14"><a href="#cb64-14" aria-hidden="true" tabindex="-1"></a> ZBarcode_Delete<span class="op">(</span>my_symbol<span class="op">);</span></span>
- <span id="cb64-15"><a href="#cb64-15" aria-hidden="true" tabindex="-1"></a> <span class="cf">return</span> <span class="dv">0</span><span class="op">;</span></span>
- <span id="cb64-16"><a href="#cb64-16" aria-hidden="true" tabindex="-1"></a><span class="op">}</span></span></code></pre></div>
- <p>will print the SVG output to <code>stdout</code> (the file “mem.svg”
- is not created). This is particularly useful for the textual formats EPS
- and SVG,<a href="#fn7" class="footnote-ref" id="fnref7"
- role="doc-noteref"><sup>7</sup></a> allowing the output to be
- manipulated and processed by the client.</p>
- <h2 id="setting-options">5.7 Setting Options</h2>
- <p>So far our application is not very useful unless we plan to only make
- Code 128 symbols and we don’t mind that they only save to
- <code>"out.png"</code> (or to memory, as above). As with the CLI
- program, of course, these options can be altered. The way this is done
- is by altering the contents of the <code>zint_symbol</code> structure
- between the creation and encoding stages. The <code>zint_symbol</code>
- structure consists of the following members:</p>
- <div id="tbl:api_structure_zint_symbol" class="tablenos">
- <table id="tbl:api_structure_zint_symbol" data-tag="$ $">
- <caption><span>Table <span class="math inline"> </span>:</span> API
- Structure <code>zint_symbol</code> </caption>
- <colgroup>
- <col style="width: 26%" />
- <col style="width: 15%" />
- <col style="width: 34%" />
- <col style="width: 23%" />
- </colgroup>
- <thead>
- <tr>
- <th style="text-align: left;">Member Name</th>
- <th style="text-align: left;">Type</th>
- <th style="text-align: left;">Meaning</th>
- <th style="text-align: left;">Default Value</th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <td style="text-align: left;"><code>symbology</code></td>
- <td style="text-align: left;">integer</td>
- <td style="text-align: left;">Symbol to use - see <a
- href="#specifying-a-symbology">5.9 Specifying a Symbology</a>.</td>
- <td style="text-align: left;"><code>BARCODE_CODE128</code></td>
- </tr>
- <tr>
- <td style="text-align: left;"><code>height</code></td>
- <td style="text-align: left;">float</td>
- <td style="text-align: left;">Symbol height in X-dimensions, excluding
- fixed width-to-height symbols.<a href="#fn8" class="footnote-ref"
- id="fnref8" role="doc-noteref"><sup>8</sup></a></td>
- <td style="text-align: left;">Symbol dependent</td>
- </tr>
- <tr>
- <td style="text-align: left;"><code>scale</code></td>
- <td style="text-align: left;">float</td>
- <td style="text-align: left;">Scale factor for adjusting size of image
- (sets X-dimension).</td>
- <td style="text-align: left;">1.0</td>
- </tr>
- <tr>
- <td style="text-align: left;"><code>whitespace_width</code></td>
- <td style="text-align: left;">integer</td>
- <td style="text-align: left;">Horizontal whitespace width in
- X-dimensions.</td>
- <td style="text-align: left;">0</td>
- </tr>
- <tr>
- <td style="text-align: left;"><code>whitespace_height</code></td>
- <td style="text-align: left;">integer</td>
- <td style="text-align: left;">Vertical whitespace height in
- X-dimensions.</td>
- <td style="text-align: left;">0</td>
- </tr>
- <tr>
- <td style="text-align: left;"><code>border_width</code></td>
- <td style="text-align: left;">integer</td>
- <td style="text-align: left;">Border width in X-dimensions.</td>
- <td style="text-align: left;">0</td>
- </tr>
- <tr>
- <td style="text-align: left;"><code>output_options</code></td>
- <td style="text-align: left;">integer</td>
- <td style="text-align: left;">Set various output parameters - see <a
- href="#adjusting-output-options">5.10 Adjusting Output Options</a>.</td>
- <td style="text-align: left;">0 (none)</td>
- </tr>
- <tr>
- <td style="text-align: left;"><code>fgcolour</code></td>
- <td style="text-align: left;">character string</td>
- <td style="text-align: left;">Foreground (ink) colour as RGB/RGBA
- hexadecimal string or <code>"C,M,Y,K"</code> decimal percentages string,
- with a terminating <code>NUL</code>.</td>
- <td style="text-align: left;"><code>"000000"</code></td>
- </tr>
- <tr>
- <td style="text-align: left;"><code>bgcolour</code></td>
- <td style="text-align: left;">character string</td>
- <td style="text-align: left;">Background (paper) colour as RGB/RGBA
- hexadecimal string or <code>"C,M,Y,K"</code> decimal percentages string,
- with a terminating <code>NUL</code>.</td>
- <td style="text-align: left;"><code>"ffffff"</code></td>
- </tr>
- <tr>
- <td style="text-align: left;"><code>fgcolor</code></td>
- <td style="text-align: left;">pointer</td>
- <td style="text-align: left;">Points to fgcolour allowing alternate
- spelling.</td>
- <td style="text-align: left;"></td>
- </tr>
- <tr>
- <td style="text-align: left;"><code>bgcolor</code></td>
- <td style="text-align: left;">pointer</td>
- <td style="text-align: left;">Points to bgcolour allowing alternate
- spelling.</td>
- <td style="text-align: left;"></td>
- </tr>
- <tr>
- <td style="text-align: left;"><code>outfile</code></td>
- <td style="text-align: left;">character string</td>
- <td style="text-align: left;">Contains the name of the file to output a
- resulting barcode symbol to. Must end in <code>.png</code>,
- <code>.gif</code>, <code>.bmp</code>, <code>.emf</code>,
- <code>.eps</code>, <code>.pcx</code>, <code>.svg</code>,
- <code>.tif</code> or <code>.txt</code> followed by a terminating
- <code>NUL</code>.<a href="#fn9" class="footnote-ref" id="fnref9"
- role="doc-noteref"><sup>9</sup></a></td>
- <td style="text-align: left;"><code>"out.png"</code></td>
- </tr>
- <tr>
- <td style="text-align: left;"><code>primary</code></td>
- <td style="text-align: left;">character string</td>
- <td style="text-align: left;">Primary message data for more complex
- symbols, with a terminating <code>NUL</code>.</td>
- <td style="text-align: left;"><code>""</code> (empty)</td>
- </tr>
- <tr>
- <td style="text-align: left;"><code>option_1</code></td>
- <td style="text-align: left;">integer</td>
- <td style="text-align: left;">Symbol specific options.</td>
- <td style="text-align: left;">-1</td>
- </tr>
- <tr>
- <td style="text-align: left;"><code>option_2</code></td>
- <td style="text-align: left;">integer</td>
- <td style="text-align: left;">Symbol specific options.</td>
- <td style="text-align: left;">0</td>
- </tr>
- <tr>
- <td style="text-align: left;"><code>option_3</code></td>
- <td style="text-align: left;">integer</td>
- <td style="text-align: left;">Symbol specific options.</td>
- <td style="text-align: left;">0</td>
- </tr>
- <tr>
- <td style="text-align: left;"><code>show_hrt</code></td>
- <td style="text-align: left;">integer</td>
- <td style="text-align: left;">Set to 0 to hide Human Readable Text
- (HRT).</td>
- <td style="text-align: left;">1</td>
- </tr>
- <tr>
- <td style="text-align: left;"><code>input_mode</code></td>
- <td style="text-align: left;">integer</td>
- <td style="text-align: left;">Set encoding of input data - see <a
- href="#setting-the-input-mode">5.11 Setting the Input Mode</a>.</td>
- <td style="text-align: left;"><code>DATA_MODE</code></td>
- </tr>
- <tr>
- <td style="text-align: left;"><code>eci</code></td>
- <td style="text-align: left;">integer</td>
- <td style="text-align: left;">Extended Channel Interpretation code.</td>
- <td style="text-align: left;">0 (none)</td>
- </tr>
- <tr>
- <td style="text-align: left;"><code>dpmm</code></td>
- <td style="text-align: left;">float</td>
- <td style="text-align: left;">Resolution of output in dots per mm (BMP,
- EMF, PCX, PNG and TIF only).</td>
- <td style="text-align: left;">0 (none)</td>
- </tr>
- <tr>
- <td style="text-align: left;"><code>dot_size</code></td>
- <td style="text-align: left;">float</td>
- <td style="text-align: left;">Diameter of dots used in dotty mode (in
- X-dimensions).</td>
- <td style="text-align: left;">0.8</td>
- </tr>
- <tr>
- <td style="text-align: left;"><code>text_gap</code></td>
- <td style="text-align: left;">float</td>
- <td style="text-align: left;">Gap between barcode and text (HRT) in
- X-dimensions.</td>
- <td style="text-align: left;">1.0</td>
- </tr>
- <tr>
- <td style="text-align: left;"><code>guard_descent</code></td>
- <td style="text-align: left;">float</td>
- <td style="text-align: left;">Height of guard bar descent (EAN/UPC only)
- in X-dimensions.</td>
- <td style="text-align: left;">5.0</td>
- </tr>
- <tr>
- <td style="text-align: left;"><code>structapp</code></td>
- <td style="text-align: left;">Structured Append structure</td>
- <td style="text-align: left;">Mark a symbol as part of a sequence of
- symbols.</td>
- <td style="text-align: left;">count 0 (disabled)</td>
- </tr>
- <tr>
- <td style="text-align: left;"><code>debug</code></td>
- <td style="text-align: left;">integer</td>
- <td style="text-align: left;">Debugging flags.</td>
- <td style="text-align: left;">0</td>
- </tr>
- <tr>
- <td style="text-align: left;"><code>warn_level</code></td>
- <td style="text-align: left;">integer</td>
- <td style="text-align: left;">Affects error/warning value returned by
- Zint API - see <a href="#handling-errors">5.8 Handling Errors</a>.</td>
- <td style="text-align: left;"><code>WARN_DEFAULT</code></td>
- </tr>
- <tr>
- <td style="text-align: left;"><code>text</code></td>
- <td style="text-align: left;">unsigned character string</td>
- <td style="text-align: left;">Human Readable Text, which usually
- consists of input data plus one more check digit. Uses UTF-8 formatting,
- with a terminating <code>NUL</code>.</td>
- <td style="text-align: left;"><code>""</code> (empty) (output only)</td>
- </tr>
- <tr>
- <td style="text-align: left;"><code>rows</code></td>
- <td style="text-align: left;">integer</td>
- <td style="text-align: left;">Number of rows used by the symbol.</td>
- <td style="text-align: left;">(output only)</td>
- </tr>
- <tr>
- <td style="text-align: left;"><code>width</code></td>
- <td style="text-align: left;">integer</td>
- <td style="text-align: left;">Width of the generated symbol.</td>
- <td style="text-align: left;">(output only)</td>
- </tr>
- <tr>
- <td style="text-align: left;"><code>encoded_data</code></td>
- <td style="text-align: left;">array of unsigned character arrays</td>
- <td style="text-align: left;">Representation of the encoded data.</td>
- <td style="text-align: left;">(output only)</td>
- </tr>
- <tr>
- <td style="text-align: left;"><code>row_height</code></td>
- <td style="text-align: left;">array of floats</td>
- <td style="text-align: left;">Heights of each row.</td>
- <td style="text-align: left;">(output only)</td>
- </tr>
- <tr>
- <td style="text-align: left;"><code>errtxt</code></td>
- <td style="text-align: left;">character string</td>
- <td style="text-align: left;">Error message in the event that an error
- occurred, with a terminating <code>NUL</code> - see <a
- href="#handling-errors">5.8 Handling Errors</a>.</td>
- <td style="text-align: left;">(output only)</td>
- </tr>
- <tr>
- <td style="text-align: left;"><code>bitmap</code></td>
- <td style="text-align: left;">pointer to unsigned character array</td>
- <td style="text-align: left;">Pointer to stored bitmap image - see <a
- href="#buffering-symbols-in-memory-raster">5.4 Buffering Symbols in
- Memory (raster)</a>.</td>
- <td style="text-align: left;">(output only)</td>
- </tr>
- <tr>
- <td style="text-align: left;"><code>bitmap_width</code></td>
- <td style="text-align: left;">integer</td>
- <td style="text-align: left;">Width of stored bitmap image (in pixels) -
- see <code>bitmap</code> member.</td>
- <td style="text-align: left;">(output only)</td>
- </tr>
- <tr>
- <td style="text-align: left;"><code>bitmap_height</code></td>
- <td style="text-align: left;">integer</td>
- <td style="text-align: left;">Height of stored bitmap image (in pixels)
- - see <code>bitmap</code> member.</td>
- <td style="text-align: left;">(output only)</td>
- </tr>
- <tr>
- <td style="text-align: left;"><code>alphamap</code></td>
- <td style="text-align: left;">pointer to unsigned character array</td>
- <td style="text-align: left;">Pointer to array representing alpha
- channel of stored bitmap image (or <code>NULL</code> if no alpha channel
- used) - see <code>bitmap</code> member.</td>
- <td style="text-align: left;">(output only)</td>
- </tr>
- <tr>
- <td style="text-align: left;"><code>vector</code></td>
- <td style="text-align: left;">pointer to vector structure</td>
- <td style="text-align: left;">Pointer to vector header containing
- pointers to vector elements - see <a
- href="#buffering-symbols-in-memory-vector">5.5 Buffering Symbols in
- Memory (vector)</a>.</td>
- <td style="text-align: left;">(output only)</td>
- </tr>
- <tr>
- <td style="text-align: left;"><code>memfile</code></td>
- <td style="text-align: left;">pointer to unsigned character array</td>
- <td style="text-align: left;">Pointer to in-memory file buffer if
- <code>BARCODE_MEMORY_FILE</code> set in <code>output_options</code> -
- see <a href="#buffering-symbols-in-memory-memfile">5.6 Buffering Symbols
- in Memory (memfile)</a>.</td>
- <td style="text-align: left;">(output only)</td>
- </tr>
- <tr>
- <td style="text-align: left;"><code>memfile_size</code></td>
- <td style="text-align: left;">integer</td>
- <td style="text-align: left;">Length of in-memory file buffer.</td>
- <td style="text-align: left;">(output only)</td>
- </tr>
- </tbody>
- </table>
- </div>
- <p>To alter these values use the syntax shown in the example below. This
- code has the same result as the previous example except the output is
- now taller and plotted in green.</p>
- <div class="sourceCode" id="cb65"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb65-1"><a href="#cb65-1" aria-hidden="true" tabindex="-1"></a><span class="pp">#include </span><span class="im"><zint.h></span></span>
- <span id="cb65-2"><a href="#cb65-2" aria-hidden="true" tabindex="-1"></a><span class="pp">#include </span><span class="im"><string.h></span></span>
- <span id="cb65-3"><a href="#cb65-3" aria-hidden="true" tabindex="-1"></a><span class="dt">int</span> main<span class="op">(</span><span class="dt">int</span> argc<span class="op">,</span> <span class="dt">char</span> <span class="op">**</span>argv<span class="op">)</span></span>
- <span id="cb65-4"><a href="#cb65-4" aria-hidden="true" tabindex="-1"></a><span class="op">{</span></span>
- <span id="cb65-5"><a href="#cb65-5" aria-hidden="true" tabindex="-1"></a> <span class="kw">struct</span> zint_symbol <span class="op">*</span>my_symbol<span class="op">;</span></span>
- <span id="cb65-6"><a href="#cb65-6" aria-hidden="true" tabindex="-1"></a> my_symbol <span class="op">=</span> ZBarcode_Create<span class="op">();</span></span>
- <span id="cb65-7"><a href="#cb65-7" aria-hidden="true" tabindex="-1"></a> strcpy<span class="op">(</span>my_symbol<span class="op">-></span>fgcolour<span class="op">,</span> <span class="st">"00ff00"</span><span class="op">);</span></span>
- <span id="cb65-8"><a href="#cb65-8" aria-hidden="true" tabindex="-1"></a> my_symbol<span class="op">-></span>height <span class="op">=</span> <span class="fl">400.0</span><span class="bu">f</span><span class="op">;</span></span>
- <span id="cb65-9"><a href="#cb65-9" aria-hidden="true" tabindex="-1"></a> ZBarcode_Encode_and_Print<span class="op">(</span>my_symbol<span class="op">,</span> argv<span class="op">[</span><span class="dv">1</span><span class="op">],</span> <span class="dv">0</span><span class="op">,</span> <span class="dv">0</span><span class="op">);</span></span>
- <span id="cb65-10"><a href="#cb65-10" aria-hidden="true" tabindex="-1"></a> ZBarcode_Delete<span class="op">(</span>my_symbol<span class="op">);</span></span>
- <span id="cb65-11"><a href="#cb65-11" aria-hidden="true" tabindex="-1"></a> <span class="cf">return</span> <span class="dv">0</span><span class="op">;</span></span>
- <span id="cb65-12"><a href="#cb65-12" aria-hidden="true" tabindex="-1"></a><span class="op">}</span></span></code></pre></div>
- <p>Note that background removal for all outputs except BMP can be
- achieved by setting the background alpha to <code>"00"</code> where the
- values for R, G and B will be ignored:</p>
- <div class="sourceCode" id="cb66"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb66-1"><a href="#cb66-1" aria-hidden="true" tabindex="-1"></a> strcpy<span class="op">(</span>my_symbol<span class="op">-></span>bgcolour<span class="op">,</span> <span class="st">"55555500"</span><span class="op">);</span></span></code></pre></div>
- <p>This is what the CLI option <code>--nobackground</code> does - see <a
- href="#using-colour">4.7 Using Colour</a>.</p>
- <h2 id="handling-errors">5.8 Handling Errors</h2>
- <p>If errors occur during encoding a non-zero integer value is passed
- back to the calling application. In addition the <code>errtxt</code>
- member is set to a message detailing the nature of the error. The errors
- generated by Zint are:</p>
- <div id="tbl:api_warnings_errors" class="tablenos">
- <table id="tbl:api_warnings_errors"
- data-tag=": API Warning and Error Return Values">
- <caption><span>Table : API Warning and Error Return Values</span>
- </caption>
- <colgroup>
- <col style="width: 39%" />
- <col style="width: 60%" />
- </colgroup>
- <thead>
- <tr>
- <th style="text-align: left;">Return Value</th>
- <th style="text-align: left;">Meaning</th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <td style="text-align: left;"><code>ZINT_WARN_HRT_TRUNCATED</code></td>
- <td style="text-align: left;">The Human Readable Text returned in
- <code>text</code> was truncated (maximum 255 bytes).</td>
- </tr>
- <tr>
- <td style="text-align: left;"><code>ZINT_WARN_INVALID_OPTION</code></td>
- <td style="text-align: left;">One of the values in
- <code>zint_struct</code> was set incorrectly but Zint has made a guess
- at what it should have been and generated a barcode accordingly.</td>
- </tr>
- <tr>
- <td style="text-align: left;"><code>ZINT_WARN_USES_ECI</code></td>
- <td style="text-align: left;">Zint has automatically inserted an ECI
- character. The symbol may not be readable with some readers.</td>
- </tr>
- <tr>
- <td style="text-align: left;"><code>ZINT_WARN_NONCOMPLIANT</code></td>
- <td style="text-align: left;">The symbol was created but is not
- compliant with certain standards set in its specification (e.g. height,
- GS1 AI data lengths).</td>
- </tr>
- <tr>
- <td style="text-align: left;"><code>ZINT_ERROR</code></td>
- <td style="text-align: left;">Marks the divide between warnings and
- errors. For return values greater than or equal to this no symbol (or
- only an incomplete symbol) is generated.</td>
- </tr>
- <tr>
- <td style="text-align: left;"><code>ZINT_ERROR_TOO_LONG</code></td>
- <td style="text-align: left;">The input data is too long or too short
- for the selected symbology. No symbol has been generated.</td>
- </tr>
- <tr>
- <td style="text-align: left;"><code>ZINT_ERROR_INVALID_DATA</code></td>
- <td style="text-align: left;">The data to be encoded includes characters
- which are not permitted by the selected symbology (e.g. alphabetic
- characters in an EAN symbol). No symbol has been generated.</td>
- </tr>
- <tr>
- <td style="text-align: left;"><code>ZINT_ERROR_INVALID_CHECK</code></td>
- <td style="text-align: left;">Data with an incorrect check digit has
- been entered. No symbol has been generated.</td>
- </tr>
- <tr>
- <td
- style="text-align: left;"><code>ZINT_ERROR_INVALID_OPTION</code></td>
- <td style="text-align: left;">One of the values in
- <code>zint_struct</code> was set incorrectly and Zint was unable (or
- unwilling) to guess what it should have been. No symbol has been
- generated.</td>
- </tr>
- <tr>
- <td
- style="text-align: left;"><code>ZINT_ERROR_ENCODING_PROBLEM</code></td>
- <td style="text-align: left;">A problem has occurred during encoding of
- the data. This should never happen. Please contact the developer if you
- encounter this error.</td>
- </tr>
- <tr>
- <td style="text-align: left;"><code>ZINT_ERROR_FILE_ACCESS</code></td>
- <td style="text-align: left;">Zint was unable to open the requested
- output file. This is usually a file permissions problem.</td>
- </tr>
- <tr>
- <td style="text-align: left;"><code>ZINT_ERROR_MEMORY</code></td>
- <td style="text-align: left;">Zint ran out of memory. This should only
- be a problem with legacy systems.</td>
- </tr>
- <tr>
- <td style="text-align: left;"><code>ZINT_ERROR_FILE_WRITE</code></td>
- <td style="text-align: left;">Zint failed to write all contents to the
- requested output file. This should only occur if the output device
- becomes full.</td>
- </tr>
- <tr>
- <td style="text-align: left;"><code>ZINT_ERROR_USES_ECI</code></td>
- <td style="text-align: left;">Returned if <code>warn_level</code> set to
- <code>WARN_FAIL_ALL</code> and <code>ZINT_WARN_USES_ECI</code>
- occurs.</td>
- </tr>
- <tr>
- <td style="text-align: left;"><code>ZINT_ERROR_NONCOMPLIANT</code></td>
- <td style="text-align: left;">Returned if <code>warn_level</code> set to
- <code>WARN_FAIL_ALL</code> and <code>ZINT_WARN_NONCOMPLIANT</code>
- occurs.</td>
- </tr>
- <tr>
- <td style="text-align: left;"><code>ZINT_ERROR_HRT_TRUNCATED</code></td>
- <td style="text-align: left;">Returned if <code>warn_level</code> set to
- <code>WARN_FAIL_ALL</code> and <code>ZINT_WARN_HRT_TRUNCATED</code>
- occurs.</td>
- </tr>
- </tbody>
- </table>
- </div>
- <p>To catch errors use an integer variable as shown in the code
- below:</p>
- <div class="sourceCode" id="cb67"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb67-1"><a href="#cb67-1" aria-hidden="true" tabindex="-1"></a><span class="pp">#include </span><span class="im"><zint.h></span></span>
- <span id="cb67-2"><a href="#cb67-2" aria-hidden="true" tabindex="-1"></a><span class="pp">#include </span><span class="im"><stdio.h></span></span>
- <span id="cb67-3"><a href="#cb67-3" aria-hidden="true" tabindex="-1"></a><span class="pp">#include </span><span class="im"><string.h></span></span>
- <span id="cb67-4"><a href="#cb67-4" aria-hidden="true" tabindex="-1"></a><span class="dt">int</span> main<span class="op">(</span><span class="dt">int</span> argc<span class="op">,</span> <span class="dt">char</span> <span class="op">**</span>argv<span class="op">)</span></span>
- <span id="cb67-5"><a href="#cb67-5" aria-hidden="true" tabindex="-1"></a><span class="op">{</span></span>
- <span id="cb67-6"><a href="#cb67-6" aria-hidden="true" tabindex="-1"></a> <span class="kw">struct</span> zint_symbol <span class="op">*</span>my_symbol<span class="op">;</span></span>
- <span id="cb67-7"><a href="#cb67-7" aria-hidden="true" tabindex="-1"></a> <span class="dt">int</span> error<span class="op">;</span></span>
- <span id="cb67-8"><a href="#cb67-8" aria-hidden="true" tabindex="-1"></a> my_symbol <span class="op">=</span> ZBarcode_Create<span class="op">();</span></span>
- <span id="cb67-9"><a href="#cb67-9" aria-hidden="true" tabindex="-1"></a> <span class="co">/* Set invalid foreground colour */</span></span>
- <span id="cb67-10"><a href="#cb67-10" aria-hidden="true" tabindex="-1"></a> strcpy<span class="op">(</span>my_symbol<span class="op">-></span>fgcolour<span class="op">,</span> <span class="st">"nonsense"</span><span class="op">);</span></span>
- <span id="cb67-11"><a href="#cb67-11" aria-hidden="true" tabindex="-1"></a> error <span class="op">=</span> ZBarcode_Encode_and_Print<span class="op">(</span>my_symbol<span class="op">,</span> argv<span class="op">[</span><span class="dv">1</span><span class="op">],</span> <span class="dv">0</span><span class="op">,</span> <span class="dv">0</span><span class="op">);</span></span>
- <span id="cb67-12"><a href="#cb67-12" aria-hidden="true" tabindex="-1"></a> <span class="cf">if</span> <span class="op">(</span>error <span class="op">!=</span> <span class="dv">0</span><span class="op">)</span> <span class="op">{</span></span>
- <span id="cb67-13"><a href="#cb67-13" aria-hidden="true" tabindex="-1"></a> <span class="co">/* Some warning or error occurred */</span></span>
- <span id="cb67-14"><a href="#cb67-14" aria-hidden="true" tabindex="-1"></a> printf<span class="op">(</span><span class="st">"</span><span class="sc">%s\n</span><span class="st">"</span><span class="op">,</span> my_symbol<span class="op">-></span>errtxt<span class="op">);</span></span>
- <span id="cb67-15"><a href="#cb67-15" aria-hidden="true" tabindex="-1"></a> <span class="cf">if</span> <span class="op">(</span>error <span class="op">>=</span> ZINT_ERROR<span class="op">)</span> <span class="op">{</span></span>
- <span id="cb67-16"><a href="#cb67-16" aria-hidden="true" tabindex="-1"></a> <span class="co">/* Stop now */</span></span>
- <span id="cb67-17"><a href="#cb67-17" aria-hidden="true" tabindex="-1"></a> ZBarcode_Delete<span class="op">(</span>my_symbol<span class="op">);</span></span>
- <span id="cb67-18"><a href="#cb67-18" aria-hidden="true" tabindex="-1"></a> <span class="cf">return</span> <span class="dv">1</span><span class="op">;</span></span>
- <span id="cb67-19"><a href="#cb67-19" aria-hidden="true" tabindex="-1"></a> <span class="op">}</span></span>
- <span id="cb67-20"><a href="#cb67-20" aria-hidden="true" tabindex="-1"></a> <span class="op">}</span></span>
- <span id="cb67-21"><a href="#cb67-21" aria-hidden="true" tabindex="-1"></a> <span class="co">/* Otherwise carry on with the rest of the application */</span></span>
- <span id="cb67-22"><a href="#cb67-22" aria-hidden="true" tabindex="-1"></a> ZBarcode_Delete<span class="op">(</span>my_symbol<span class="op">);</span></span>
- <span id="cb67-23"><a href="#cb67-23" aria-hidden="true" tabindex="-1"></a> <span class="cf">return</span> <span class="dv">0</span><span class="op">;</span></span>
- <span id="cb67-24"><a href="#cb67-24" aria-hidden="true" tabindex="-1"></a><span class="op">}</span></span></code></pre></div>
- <p>This code will exit with the appropriate message:</p>
- <pre><code>Error 881: Malformed foreground RGB colour 'nonsense' (hexadecimal only)</code></pre>
- <p>To treat all warnings as errors, set
- <code>symbol->warn_level</code> to <code>WARN_FAIL_ALL</code>.</p>
- <h2 id="specifying-a-symbology">5.9 Specifying a Symbology</h2>
- <p>Symbologies can be specified by number or by name as shown in the
- Table <a href="#tbl:barcode_types">: Barcode Types (Symbologies)</a>.
- For example</p>
- <div class="sourceCode" id="cb69"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb69-1"><a href="#cb69-1" aria-hidden="true" tabindex="-1"></a>symbol<span class="op">-></span>symbology <span class="op">=</span> BARCODE_LOGMARS<span class="op">;</span></span></code></pre></div>
- <p>means the same as</p>
- <div class="sourceCode" id="cb70"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb70-1"><a href="#cb70-1" aria-hidden="true" tabindex="-1"></a>symbol<span class="op">-></span>symbology <span class="op">=</span> <span class="dv">50</span><span class="op">;</span></span></code></pre></div>
- <h2 id="adjusting-output-options">5.10 Adjusting Output Options</h2>
- <p>The <code>output_options</code> member can be used to adjust various
- aspects of the output file. To select more than one option from the
- table below simply <code>OR</code> them together when adjusting this
- value:</p>
- <div class="sourceCode" id="cb71"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb71-1"><a href="#cb71-1" aria-hidden="true" tabindex="-1"></a>my_symbol<span class="op">-></span>output_options <span class="op">|=</span> BARCODE_BIND <span class="op">|</span> READER_INIT<span class="op">;</span></span></code></pre></div>
- <div id="tbl:api_output_options" class="tablenos">
- <table id="tbl:api_output_options" data-tag="$ $">
- <caption><span>Table <span class="math inline"> </span>:</span> API
- <code>output_options</code> Values </caption>
- <colgroup>
- <col style="width: 34%" />
- <col style="width: 65%" />
- </colgroup>
- <thead>
- <tr>
- <th style="text-align: left;">Value</th>
- <th style="text-align: left;">Effect</th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <td style="text-align: left;">0</td>
- <td style="text-align: left;">No options selected.</td>
- </tr>
- <tr>
- <td style="text-align: left;"><code>BARCODE_BIND_TOP</code></td>
- <td style="text-align: left;">Boundary bar above the symbol only.<a
- href="#fn10" class="footnote-ref" id="fnref10"
- role="doc-noteref"><sup>10</sup></a></td>
- </tr>
- <tr>
- <td style="text-align: left;"><code>BARCODE_BIND</code></td>
- <td style="text-align: left;">Boundary bars above and below the symbol
- and between rows if stacking multiple symbols.<a href="#fn11"
- class="footnote-ref" id="fnref11"
- role="doc-noteref"><sup>11</sup></a></td>
- </tr>
- <tr>
- <td style="text-align: left;"><code>BARCODE_BOX</code></td>
- <td style="text-align: left;">Add a box surrounding the symbol and
- whitespace.</td>
- </tr>
- <tr>
- <td style="text-align: left;"><code>BARCODE_STDOUT</code></td>
- <td style="text-align: left;">Output the file to stdout.</td>
- </tr>
- <tr>
- <td style="text-align: left;"><code>READER_INIT</code></td>
- <td style="text-align: left;">Create as a Reader Initialisation
- (Programming) symbol.</td>
- </tr>
- <tr>
- <td style="text-align: left;"><code>SMALL_TEXT</code></td>
- <td style="text-align: left;">Use a smaller font for the Human Readable
- Text.</td>
- </tr>
- <tr>
- <td style="text-align: left;"><code>BOLD_TEXT</code></td>
- <td style="text-align: left;">Embolden the Human Readable Text.</td>
- </tr>
- <tr>
- <td style="text-align: left;"><code>CMYK_COLOUR</code></td>
- <td style="text-align: left;">Select the CMYK colour space option for
- Encapsulated PostScript and TIF files.</td>
- </tr>
- <tr>
- <td style="text-align: left;"><code>BARCODE_DOTTY_MODE</code></td>
- <td style="text-align: left;">Plot a matrix symbol using dots rather
- than squares.</td>
- </tr>
- <tr>
- <td style="text-align: left;"><code>GS1_GS_SEPARATOR</code></td>
- <td style="text-align: left;">Use GS (Group Separator) instead of FNC1
- as GS1 separator (Data Matrix only).</td>
- </tr>
- <tr>
- <td style="text-align: left;"><code>OUT_BUFFER_INTERMEDIATE</code></td>
- <td style="text-align: left;">Return the bitmap buffer as ASCII values
- instead of separate colour channels - see <a
- href="#buffering-symbols-in-memory-raster">5.4 Buffering Symbols in
- Memory (raster)</a>.</td>
- </tr>
- <tr>
- <td style="text-align: left;"><code>BARCODE_QUIET_ZONES</code></td>
- <td style="text-align: left;">Add compliant quiet zones (additional to
- any specified whitespace).<a href="#fn12" class="footnote-ref"
- id="fnref12" role="doc-noteref"><sup>12</sup></a></td>
- </tr>
- <tr>
- <td style="text-align: left;"><code>BARCODE_NO_QUIET_ZONES</code></td>
- <td style="text-align: left;">Disable quiet zones, notably those with
- defaults.</td>
- </tr>
- <tr>
- <td style="text-align: left;"><code>COMPLIANT_HEIGHT</code></td>
- <td style="text-align: left;">Warn if height specified not compliant, or
- use standard height (if any) as default.</td>
- </tr>
- <tr>
- <td style="text-align: left;"><code>EANUPC_GUARD_WHITESPACE</code></td>
- <td style="text-align: left;">Add quiet zone indicators (“<” and/or
- “>”) to HRT whitespace (EAN/UPC).</td>
- </tr>
- <tr>
- <td style="text-align: left;"><code>EMBED_VECTOR_FONT</code></td>
- <td style="text-align: left;">Embed font in vector output - currently
- available for SVG output only.</td>
- </tr>
- <tr>
- <td style="text-align: left;"><code>BARCODE_MEMORY_FILE</code></td>
- <td style="text-align: left;">Write output to in-memory buffer
- <code>symbol->memfile</code> instead of to <code>outfile</code>
- file.</td>
- </tr>
- </tbody>
- </table>
- </div>
- <h2 id="setting-the-input-mode">5.11 Setting the Input Mode</h2>
- <p>The way in which the input data is encoded can be set using the
- <code>input_mode</code> member. Valid values are shown in the table
- below.</p>
- <div id="tbl:api_input_mode" class="tablenos">
- <table id="tbl:api_input_mode" data-tag="$ $">
- <caption><span>Table <span class="math inline"> </span>:</span> API
- <code>input_mode</code> Values </caption>
- <colgroup>
- <col style="width: 25%" />
- <col style="width: 74%" />
- </colgroup>
- <thead>
- <tr>
- <th style="text-align: left;">Value</th>
- <th style="text-align: left;">Effect</th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <td style="text-align: left;"><code>DATA_MODE</code></td>
- <td style="text-align: left;">Uses full 8-bit range interpreted as
- binary data.</td>
- </tr>
- <tr>
- <td style="text-align: left;"><code>UNICODE_MODE</code></td>
- <td style="text-align: left;">Uses UTF-8 input.</td>
- </tr>
- <tr>
- <td style="text-align: left;"><code>GS1_MODE</code></td>
- <td style="text-align: left;">Encodes GS1 data using FNC1
- characters.</td>
- </tr>
- <tr>
- <td style="text-align: left;"></td>
- <td style="text-align: left;"><em>The above are exclusive, the following
- optional and OR-ed.</em></td>
- </tr>
- <tr>
- <td style="text-align: left;"><code>ESCAPE_MODE</code></td>
- <td style="text-align: left;">Process input data for escape
- sequences.</td>
- </tr>
- <tr>
- <td style="text-align: left;"><code>GS1PARENS_MODE</code></td>
- <td style="text-align: left;">Parentheses (round brackets) used in GS1
- data instead of square brackets to delimit Application Identifiers
- (parentheses must not otherwise occur in the data).</td>
- </tr>
- <tr>
- <td style="text-align: left;"><code>GS1NOCHECK_MODE</code></td>
- <td style="text-align: left;">Do not check GS1 data for validity,
- i.e. suppress checks for valid AIs and data lengths. Invalid characters
- (e.g. control characters, extended ASCII characters) are still checked
- for.</td>
- </tr>
- <tr>
- <td style="text-align: left;"><code>HEIGHTPERROW_MODE</code></td>
- <td style="text-align: left;">Interpret the <code>height</code> member
- as per-row rather than as overall height.</td>
- </tr>
- <tr>
- <td style="text-align: left;"><code>FAST_MODE</code></td>
- <td style="text-align: left;">Use faster if less optimal encodation or
- other shortcuts if available (affects <code>DATAMATRIX</code>,
- <code>MICROPDF417</code>, <code>PDF417</code>, <code>QRCODE</code> and
- <code>UPNQR</code> only).</td>
- </tr>
- <tr>
- <td style="text-align: left;"><code>EXTRA_ESCAPE_MODE</code></td>
- <td style="text-align: left;">Process special symbology-specific escape
- sequences (<code>CODE128</code> only).</td>
- </tr>
- </tbody>
- </table>
- </div>
- <p>The default mode is <code>DATA_MODE</code>. (Note that this differs
- from the default for the CLI and GUI, which is
- <code>UNICODE_MODE</code>.)</p>
- <p><code>DATA_MODE</code>, <code>UNICODE_MODE</code> and
- <code>GS1_MODE</code> are mutually exclusive, whereas
- <code>ESCAPE_MODE</code>, <code>GS1PARENS_MODE</code>,
- <code>GS1NOCHECK_MODE</code>, <code>HEIGHTPERROW_MODE</code>,
- <code>FAST_MODE</code> and <code>EXTRA_ESCAPE_MODE</code> are optional.
- So, for example, you can set</p>
- <div class="sourceCode" id="cb72"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb72-1"><a href="#cb72-1" aria-hidden="true" tabindex="-1"></a>my_symbol<span class="op">-></span>input_mode <span class="op">=</span> UNICODE_MODE <span class="op">|</span> ESCAPE_MODE<span class="op">;</span></span></code></pre></div>
- <p>or</p>
- <div class="sourceCode" id="cb73"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb73-1"><a href="#cb73-1" aria-hidden="true" tabindex="-1"></a>my_symbol<span class="op">-></span>input_mode <span class="op">=</span> GS1_MODE <span class="op">|</span> GS1PARENS_MODE <span class="op">|</span> GS1NOCHECK_MODE<span class="op">;</span></span></code></pre></div>
- <p>whereas</p>
- <div class="sourceCode" id="cb74"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb74-1"><a href="#cb74-1" aria-hidden="true" tabindex="-1"></a>my_symbol<span class="op">-></span>input_mode <span class="op">=</span> DATA_MODE <span class="op">|</span> GS1_MODE<span class="op">;</span></span></code></pre></div>
- <p>is not valid.</p>
- <p>Permissible escape sequences (<code>ESCAPE_MODE</code>) are listed in
- Table <a href="#tbl:escape_sequences">: Escape Sequences</a>, and the
- special Code 128-only <code>EXTRA_ESCAPE_MODE</code> escape sequences
- are given in <a href="#standard-code-128-iso-15417">6.1.10.1 Standard
- Code 128 (ISO 15417)</a>. An example of <code>GS1PARENS_MODE</code>
- usage is given in section <a href="#gs1-128">6.1.10.3 GS1-128</a>.</p>
- <p><code>GS1NOCHECK_MODE</code> is for use with legacy systems that have
- data that does not conform to the current GS1 standard. Printable ASCII
- input is still checked for, as is the validity of GS1 data specified
- without AIs (e.g. linear data for GS1 DataBar
- Omnidirectional/Limited/etc.). Also checked is GS1 DataBar Expanded and
- GS1 Composite input that is not in the GS1 encodable character set 82
- (see GS1 General Specifications Figure 7.11.1 ‘GS1 AI encodable
- character set 82’), otherwise encodation would fail.</p>
- <p>For <code>HEIGHTPERROW_MODE</code>, see <code>--heightperrow</code>
- in section <a href="#adjusting-height">4.4 Adjusting Height</a>. The
- <code>height</code> member should be set to the desired per-row value on
- input (it will be set to the overall height on output).</p>
- <p><code>FAST_MODE</code> causes a less optimal encodation scheme to be
- used for Data Matrix, MicroPDF417 and PDF417. For QR Code and UPNQR, it
- affects Zint’s automatic mask selection - see <a
- href="#qr-code-iso-18004">6.6.3 QR Code (ISO 18004)</a> for details.</p>
- <h2 id="multiple-segments-1">5.12 Multiple Segments</h2>
- <p>For input data requiring multiple ECIs, the following functions may
- be used:</p>
- <div class="sourceCode" id="cb75"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb75-1"><a href="#cb75-1" aria-hidden="true" tabindex="-1"></a><span class="dt">int</span> ZBarcode_Encode_Segs<span class="op">(</span><span class="kw">struct</span> zint_symbol <span class="op">*</span>symbol<span class="op">,</span></span>
- <span id="cb75-2"><a href="#cb75-2" aria-hidden="true" tabindex="-1"></a> <span class="dt">const</span> <span class="kw">struct</span> zint_seg segs<span class="op">[],</span> <span class="dt">const</span> <span class="dt">int</span> seg_count<span class="op">);</span></span>
- <span id="cb75-3"><a href="#cb75-3" aria-hidden="true" tabindex="-1"></a></span>
- <span id="cb75-4"><a href="#cb75-4" aria-hidden="true" tabindex="-1"></a><span class="dt">int</span> ZBarcode_Encode_Segs_and_Print<span class="op">(</span><span class="kw">struct</span> zint_symbol <span class="op">*</span>symbol<span class="op">,</span></span>
- <span id="cb75-5"><a href="#cb75-5" aria-hidden="true" tabindex="-1"></a> <span class="dt">const</span> <span class="kw">struct</span> zint_seg segs<span class="op">[],</span> <span class="dt">const</span> <span class="dt">int</span> seg_count<span class="op">,</span> <span class="dt">int</span> rotate_angle<span class="op">);</span></span>
- <span id="cb75-6"><a href="#cb75-6" aria-hidden="true" tabindex="-1"></a></span>
- <span id="cb75-7"><a href="#cb75-7" aria-hidden="true" tabindex="-1"></a><span class="dt">int</span> ZBarcode_Encode_Segs_and_Buffer<span class="op">(</span><span class="kw">struct</span> zint_symbol <span class="op">*</span>symbol<span class="op">,</span></span>
- <span id="cb75-8"><a href="#cb75-8" aria-hidden="true" tabindex="-1"></a> <span class="dt">const</span> <span class="kw">struct</span> zint_seg segs<span class="op">[],</span> <span class="dt">const</span> <span class="dt">int</span> seg_count<span class="op">,</span> <span class="dt">int</span> rotate_angle<span class="op">);</span></span>
- <span id="cb75-9"><a href="#cb75-9" aria-hidden="true" tabindex="-1"></a></span>
- <span id="cb75-10"><a href="#cb75-10" aria-hidden="true" tabindex="-1"></a><span class="dt">int</span> ZBarcode_Encode_Segs_and_Buffer_Vector<span class="op">(</span><span class="kw">struct</span> zint_symbol <span class="op">*</span>symbol<span class="op">,</span></span>
- <span id="cb75-11"><a href="#cb75-11" aria-hidden="true" tabindex="-1"></a> <span class="dt">const</span> <span class="kw">struct</span> zint_seg segs<span class="op">[],</span> <span class="dt">const</span> <span class="dt">int</span> seg_count<span class="op">,</span> <span class="dt">int</span> rotate_angle<span class="op">);</span></span></code></pre></div>
- <p>These are direct analogues of the previously mentioned
- <code>ZBarcode_Encode()</code>,
- <code>ZBarcode_Encode_and_Print()</code>,
- <code>ZBarcode_Encode_and_Buffer()</code> and
- <code>ZBarcode_Encode_and_Buffer_Vector()</code> respectively, where
- instead of a pair consisting of <code>"source, length"</code>, a pair
- consisting of <code>"segs, seg_count"</code> is given, with
- <code>segs</code> being an array of <code>struct zint_seg</code>
- segments and <code>seg_count</code> being the number of elements it
- contains. The zint_seg structure is of the form:</p>
- <div class="sourceCode" id="cb76"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb76-1"><a href="#cb76-1" aria-hidden="true" tabindex="-1"></a><span class="kw">struct</span> zint_seg <span class="op">{</span></span>
- <span id="cb76-2"><a href="#cb76-2" aria-hidden="true" tabindex="-1"></a> <span class="dt">unsigned</span> <span class="dt">char</span> <span class="op">*</span>source<span class="op">;</span> <span class="co">/* Data to encode */</span></span>
- <span id="cb76-3"><a href="#cb76-3" aria-hidden="true" tabindex="-1"></a> <span class="dt">int</span> length<span class="op">;</span> <span class="co">/* Length of `source`. If 0, `source` must be</span></span>
- <span id="cb76-4"><a href="#cb76-4" aria-hidden="true" tabindex="-1"></a><span class="co"> NUL-terminated */</span></span>
- <span id="cb76-5"><a href="#cb76-5" aria-hidden="true" tabindex="-1"></a> <span class="dt">int</span> eci<span class="op">;</span> <span class="co">/* Extended Channel Interpretation */</span></span>
- <span id="cb76-6"><a href="#cb76-6" aria-hidden="true" tabindex="-1"></a><span class="op">};</span></span></code></pre></div>
- <p>The symbology must support ECIs (see Table <a
- href="#tbl:eci_aware_symbologies">: ECI-Aware Symbologies</a>). For
- example:</p>
- <div class="sourceCode" id="cb77"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb77-1"><a href="#cb77-1" aria-hidden="true" tabindex="-1"></a><span class="pp">#include </span><span class="im"><zint.h></span></span>
- <span id="cb77-2"><a href="#cb77-2" aria-hidden="true" tabindex="-1"></a><span class="dt">int</span> main<span class="op">(</span><span class="dt">int</span> argc<span class="op">,</span> <span class="dt">char</span> <span class="op">**</span>argv<span class="op">)</span></span>
- <span id="cb77-3"><a href="#cb77-3" aria-hidden="true" tabindex="-1"></a><span class="op">{</span></span>
- <span id="cb77-4"><a href="#cb77-4" aria-hidden="true" tabindex="-1"></a> <span class="kw">struct</span> zint_seg segs<span class="op">[]</span> <span class="op">=</span> <span class="op">{</span></span>
- <span id="cb77-5"><a href="#cb77-5" aria-hidden="true" tabindex="-1"></a> <span class="op">{</span> <span class="st">"Κείμενο"</span><span class="op">,</span> <span class="dv">0</span><span class="op">,</span> <span class="dv">9</span> <span class="op">},</span></span>
- <span id="cb77-6"><a href="#cb77-6" aria-hidden="true" tabindex="-1"></a> <span class="op">{</span> <span class="st">"Текст"</span><span class="op">,</span> <span class="dv">0</span><span class="op">,</span> <span class="dv">7</span> <span class="op">},</span></span>
- <span id="cb77-7"><a href="#cb77-7" aria-hidden="true" tabindex="-1"></a> <span class="op">{</span> <span class="st">"文章"</span><span class="op">,</span> <span class="dv">0</span><span class="op">,</span> <span class="dv">20</span> <span class="op">}</span></span>
- <span id="cb77-8"><a href="#cb77-8" aria-hidden="true" tabindex="-1"></a> <span class="op">};</span></span>
- <span id="cb77-9"><a href="#cb77-9" aria-hidden="true" tabindex="-1"></a> <span class="kw">struct</span> zint_symbol <span class="op">*</span>my_symbol<span class="op">;</span></span>
- <span id="cb77-10"><a href="#cb77-10" aria-hidden="true" tabindex="-1"></a> my_symbol <span class="op">=</span> ZBarcode_Create<span class="op">();</span></span>
- <span id="cb77-11"><a href="#cb77-11" aria-hidden="true" tabindex="-1"></a> my_symbol<span class="op">-></span>symbology <span class="op">=</span> BARCODE_AZTEC<span class="op">;</span></span>
- <span id="cb77-12"><a href="#cb77-12" aria-hidden="true" tabindex="-1"></a> my_symbol<span class="op">-></span>input_mode <span class="op">=</span> UNICODE_MODE<span class="op">;</span></span>
- <span id="cb77-13"><a href="#cb77-13" aria-hidden="true" tabindex="-1"></a> ZBarcode_Encode_Segs<span class="op">(</span>my_symbol<span class="op">,</span> segs<span class="op">,</span> <span class="dv">3</span><span class="op">);</span></span>
- <span id="cb77-14"><a href="#cb77-14" aria-hidden="true" tabindex="-1"></a> ZBarcode_Print<span class="op">(</span>my_symbol<span class="op">,</span> <span class="dv">0</span><span class="op">);</span></span>
- <span id="cb77-15"><a href="#cb77-15" aria-hidden="true" tabindex="-1"></a> ZBarcode_Delete<span class="op">(</span>my_symbol<span class="op">);</span></span>
- <span id="cb77-16"><a href="#cb77-16" aria-hidden="true" tabindex="-1"></a> <span class="cf">return</span> <span class="dv">0</span><span class="op">;</span></span>
- <span id="cb77-17"><a href="#cb77-17" aria-hidden="true" tabindex="-1"></a><span class="op">}</span></span></code></pre></div>
- <p>A maximum of 256 segments may be specified. Use of multiple segments
- with GS1 data is not currently supported.</p>
- <h2 id="scaling-helpers">5.13 Scaling Helpers</h2>
- <p>To help with scaling the output, the following three function are
- available:</p>
- <div class="sourceCode" id="cb78"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb78-1"><a href="#cb78-1" aria-hidden="true" tabindex="-1"></a><span class="dt">float</span> ZBarcode_Default_Xdim<span class="op">(</span><span class="dt">int</span> symbol_id<span class="op">);</span></span>
- <span id="cb78-2"><a href="#cb78-2" aria-hidden="true" tabindex="-1"></a></span>
- <span id="cb78-3"><a href="#cb78-3" aria-hidden="true" tabindex="-1"></a><span class="dt">float</span> ZBarcode_Scale_From_XdimDp<span class="op">(</span><span class="dt">int</span> symbol_id<span class="op">,</span> <span class="dt">float</span> x_dim_mm<span class="op">,</span> <span class="dt">float</span> dpmm<span class="op">,</span></span>
- <span id="cb78-4"><a href="#cb78-4" aria-hidden="true" tabindex="-1"></a> <span class="dt">const</span> <span class="dt">char</span> <span class="op">*</span>filetype<span class="op">)</span> <span class="op">{</span></span>
- <span id="cb78-5"><a href="#cb78-5" aria-hidden="true" tabindex="-1"></a></span>
- <span id="cb78-6"><a href="#cb78-6" aria-hidden="true" tabindex="-1"></a><span class="dt">float</span> ZBarcode_XdimDP_From_Scale<span class="op">(</span><span class="dt">int</span> symbol_id<span class="op">,</span> <span class="dt">float</span> scale<span class="op">,</span></span>
- <span id="cb78-7"><a href="#cb78-7" aria-hidden="true" tabindex="-1"></a> <span class="dt">float</span> x_dim_mm_or_dpmm<span class="op">,</span> <span class="dt">const</span> <span class="dt">char</span> <span class="op">*</span>filetype<span class="op">);</span></span></code></pre></div>
- <p>The first <code>ZBarcode_Default_Xdim()</code> returns the default
- X-dimension suggested by Zint for symbology <code>symbol_id</code>.</p>
- <p>The second <code>ZBarcode_Scale_From_XdimDp()</code> returns the
- scale to use to output to a file of type <code>filetype</code> with
- X-dimension <code>x_dim_mm</code> at <code>dpmm</code> dots per mm. The
- given X-dimension must be non-zero and less than or equal to 10mm,
- however <code>dpmm</code> may be zero and defaults to 12 dpmm, and
- <code>filetype</code> may be NULL or empty in which case a GIF filetype
- is assumed. For raster output (BMP/GIF/PCX/PNG/TIF) the scale is rounded
- to half-integer increments.</p>
- <p>For example:</p>
- <div class="sourceCode" id="cb79"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb79-1"><a href="#cb79-1" aria-hidden="true" tabindex="-1"></a><span class="co">/* Royal Mail 4-State Customer Code */</span></span>
- <span id="cb79-2"><a href="#cb79-2" aria-hidden="true" tabindex="-1"></a>my_symbol<span class="op">-></span>symbology <span class="op">=</span> BARCODE_RM4SCC<span class="op">;</span></span>
- <span id="cb79-3"><a href="#cb79-3" aria-hidden="true" tabindex="-1"></a>my_symbol<span class="op">-></span>dpmm <span class="op">=</span> <span class="fl">600.0</span><span class="bu">f</span> <span class="op">/</span> <span class="fl">25.4</span><span class="bu">f</span><span class="op">;</span> <span class="co">/* 600 dpi */</span></span>
- <span id="cb79-4"><a href="#cb79-4" aria-hidden="true" tabindex="-1"></a>my_symbol<span class="op">-></span>scale <span class="op">=</span> ZBarcode_Scale_From_XdimDp<span class="op">(</span></span>
- <span id="cb79-5"><a href="#cb79-5" aria-hidden="true" tabindex="-1"></a> my_symbol<span class="op">-></span>symbology<span class="op">,</span></span>
- <span id="cb79-6"><a href="#cb79-6" aria-hidden="true" tabindex="-1"></a> ZBarcode_Default_Xdim<span class="op">(</span>my_symbol<span class="op">-></span>symbology<span class="op">),</span></span>
- <span id="cb79-7"><a href="#cb79-7" aria-hidden="true" tabindex="-1"></a> my_symbol<span class="op">-></span>dpmm<span class="op">,</span> <span class="st">"PNG"</span><span class="op">);</span> <span class="co">/* Returns 7.5 */</span></span></code></pre></div>
- <p>The third function <code>ZBarcode_XdimDP_From_Scale()</code> is the
- “reverse” of <code>ZBarcode_Scale_From_XdimDp()</code>, returning the
- X-dimension (in mm) or the dot density (in dpmm) given a scale
- <code>scale</code>. Both <code>scale</code> and
- <code>x_dim_mm_or_dpmm</code> must be non-zero. The returned value is
- bound to the maximum value of dpmm (1000), so must be further bound to
- 10 on return if the X-dimension is sought.</p>
- <p>Note that the X-dimension to use is application dependent, and varies
- not only due to the symbology, resolution and filetype but also due to
- the type of scanner used, the intended scanning distance, and what media
- (“substrates”) the barcode appears on.</p>
- <h2 id="verifying-symbology-availability">5.14 Verifying Symbology
- Availability</h2>
- <p>An additional function available in the API is:</p>
- <div class="sourceCode" id="cb80"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb80-1"><a href="#cb80-1" aria-hidden="true" tabindex="-1"></a><span class="dt">int</span> ZBarcode_ValidID<span class="op">(</span><span class="dt">int</span> symbol_id<span class="op">);</span></span></code></pre></div>
- <p>which allows you to check whether a given symbology is available,
- returning a non-zero value if so. For example:</p>
- <div class="sourceCode" id="cb81"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb81-1"><a href="#cb81-1" aria-hidden="true" tabindex="-1"></a><span class="cf">if</span> <span class="op">(</span>ZBarcode_ValidID<span class="op">(</span>BARCODE_PDF417<span class="op">)</span> <span class="op">!=</span> <span class="dv">0</span><span class="op">)</span> <span class="op">{</span></span>
- <span id="cb81-2"><a href="#cb81-2" aria-hidden="true" tabindex="-1"></a> printf<span class="op">(</span><span class="st">"PDF417 available</span><span class="sc">\n</span><span class="st">"</span><span class="op">);</span></span>
- <span id="cb81-3"><a href="#cb81-3" aria-hidden="true" tabindex="-1"></a><span class="op">}</span> <span class="cf">else</span> <span class="op">{</span></span>
- <span id="cb81-4"><a href="#cb81-4" aria-hidden="true" tabindex="-1"></a> printf<span class="op">(</span><span class="st">"PDF417 not available</span><span class="sc">\n</span><span class="st">"</span><span class="op">);</span></span>
- <span id="cb81-5"><a href="#cb81-5" aria-hidden="true" tabindex="-1"></a><span class="op">}</span></span></code></pre></div>
- <p>Another function that may be useful is:</p>
- <div class="sourceCode" id="cb82"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb82-1"><a href="#cb82-1" aria-hidden="true" tabindex="-1"></a><span class="dt">int</span> ZBarcode_BarcodeName<span class="op">(</span><span class="dt">int</span> symbol_id<span class="op">,</span> <span class="dt">char</span> name<span class="op">[</span><span class="dv">32</span><span class="op">]);</span></span></code></pre></div>
- <p>which copies the name of a symbology into the supplied
- <code>name</code> buffer, which should be 32 characters in length. The
- name is <code>NUL</code>-terminated, and zero is returned on success.
- For instance:</p>
- <div class="sourceCode" id="cb83"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb83-1"><a href="#cb83-1" aria-hidden="true" tabindex="-1"></a><span class="dt">char</span> name<span class="op">[</span><span class="dv">32</span><span class="op">];</span></span>
- <span id="cb83-2"><a href="#cb83-2" aria-hidden="true" tabindex="-1"></a><span class="cf">if</span> <span class="op">(</span>ZBarcode_BarcodeName<span class="op">(</span>BARCODE_PDF417<span class="op">,</span> name<span class="op">)</span> <span class="op">==</span> <span class="dv">0</span><span class="op">)</span> <span class="op">{</span></span>
- <span id="cb83-3"><a href="#cb83-3" aria-hidden="true" tabindex="-1"></a> printf<span class="op">(</span><span class="st">"</span><span class="sc">%s\n</span><span class="st">"</span><span class="op">,</span> name<span class="op">);</span></span>
- <span id="cb83-4"><a href="#cb83-4" aria-hidden="true" tabindex="-1"></a><span class="op">}</span></span></code></pre></div>
- <p>will print <code>BARCODE_PDF417</code>.</p>
- <h2 id="checking-symbology-capabilities">5.15 Checking Symbology
- Capabilities</h2>
- <p>It can be useful for frontend programs to know the capabilities of a
- symbology. This can be determined using another additional function:</p>
- <div class="sourceCode" id="cb84"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb84-1"><a href="#cb84-1" aria-hidden="true" tabindex="-1"></a><span class="dt">unsigned</span> <span class="dt">int</span> ZBarcode_Cap<span class="op">(</span><span class="dt">int</span> symbol_id<span class="op">,</span> <span class="dt">unsigned</span> <span class="dt">int</span> cap_flag<span class="op">);</span></span></code></pre></div>
- <p>by <code>OR</code>-ing the flags below in the <code>cap_flag</code>
- argument and checking the return to see which are set.</p>
- <div id="tbl:api_cap" class="tablenos">
- <table id="tbl:api_cap" data-tag=": API Capability Flags">
- <caption><span>Table : API Capability Flags</span> </caption>
- <colgroup>
- <col style="width: 35%" />
- <col style="width: 64%" />
- </colgroup>
- <thead>
- <tr>
- <th style="text-align: left;">Value</th>
- <th style="text-align: left;">Meaning</th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <td style="text-align: left;"><code>ZINT_CAP_HRT</code></td>
- <td style="text-align: left;">Can the symbology print Human Readable
- Text?</td>
- </tr>
- <tr>
- <td style="text-align: left;"><code>ZINT_CAP_STACKABLE</code></td>
- <td style="text-align: left;">Is the symbology stackable?</td>
- </tr>
- <tr>
- <td style="text-align: left;"><code>ZINT_CAP_EANUPC</code><a
- href="#fn13" class="footnote-ref" id="fnref13"
- role="doc-noteref"><sup>13</sup></a></td>
- <td style="text-align: left;">Is the symbology EAN/UPC?</td>
- </tr>
- <tr>
- <td style="text-align: left;"><code>ZINT_CAP_COMPOSITE</code></td>
- <td style="text-align: left;">Does the symbology support composite data?
- (see <a href="#gs1-composite-symbols-iso-24723">6.3 GS1 Composite
- Symbols (ISO 24723)</a> below)</td>
- </tr>
- <tr>
- <td style="text-align: left;"><code>ZINT_CAP_ECI</code></td>
- <td style="text-align: left;">Does the symbology support Extended
- Channel Interpretations?</td>
- </tr>
- <tr>
- <td style="text-align: left;"><code>ZINT_CAP_GS1</code></td>
- <td style="text-align: left;">Does the symbology support GS1 data?</td>
- </tr>
- <tr>
- <td style="text-align: left;"><code>ZINT_CAP_DOTTY</code></td>
- <td style="text-align: left;">Can the symbology be outputted as
- dots?</td>
- </tr>
- <tr>
- <td style="text-align: left;"><code>ZINT_CAP_QUIET_ZONES</code></td>
- <td style="text-align: left;">Does the symbology have default quiet
- zones?</td>
- </tr>
- <tr>
- <td style="text-align: left;"><code>ZINT_CAP_FIXED_RATIO</code></td>
- <td style="text-align: left;">Does the symbology have a fixed
- width-to-height (aspect) ratio?</td>
- </tr>
- <tr>
- <td style="text-align: left;"><code>ZINT_CAP_READER_INIT</code></td>
- <td style="text-align: left;">Does the symbology support Reader
- Initialisation?</td>
- </tr>
- <tr>
- <td style="text-align: left;"><code>ZINT_CAP_FULL_MULTIBYTE</code></td>
- <td style="text-align: left;">Is the <code>ZINT_FULL_MULTIBYTE</code>
- option applicable?</td>
- </tr>
- <tr>
- <td style="text-align: left;"><code>ZINT_CAP_MASK</code></td>
- <td style="text-align: left;">Is mask selection applicable?</td>
- </tr>
- <tr>
- <td style="text-align: left;"><code>ZINT_CAP_STRUCTAPP</code></td>
- <td style="text-align: left;">Does the symbology support Structured
- Append?</td>
- </tr>
- <tr>
- <td
- style="text-align: left;"><code>ZINT_CAP_COMPLIANT_HEIGHT</code></td>
- <td style="text-align: left;">Does the symbology have a compliant height
- defined?</td>
- </tr>
- </tbody>
- </table>
- </div>
- <p>For example:</p>
- <div class="sourceCode" id="cb85"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb85-1"><a href="#cb85-1" aria-hidden="true" tabindex="-1"></a><span class="dt">unsigned</span> <span class="dt">int</span> cap<span class="op">;</span></span>
- <span id="cb85-2"><a href="#cb85-2" aria-hidden="true" tabindex="-1"></a>cap <span class="op">=</span> ZBarcode_Cap<span class="op">(</span>BARCODE_PDF417<span class="op">,</span> ZINT_CAP_HRT <span class="op">|</span> ZINT_CAP_ECI<span class="op">);</span></span>
- <span id="cb85-3"><a href="#cb85-3" aria-hidden="true" tabindex="-1"></a><span class="cf">if</span> <span class="op">(</span>cap <span class="op">&</span> ZINT_CAP_HRT<span class="op">)</span> <span class="op">{</span></span>
- <span id="cb85-4"><a href="#cb85-4" aria-hidden="true" tabindex="-1"></a> printf<span class="op">(</span><span class="st">"PDF417 supports HRT</span><span class="sc">\n</span><span class="st">"</span><span class="op">);</span></span>
- <span id="cb85-5"><a href="#cb85-5" aria-hidden="true" tabindex="-1"></a><span class="op">}</span> <span class="cf">else</span> <span class="op">{</span></span>
- <span id="cb85-6"><a href="#cb85-6" aria-hidden="true" tabindex="-1"></a> printf<span class="op">(</span><span class="st">"PDF417 does not support HRT</span><span class="sc">\n</span><span class="st">"</span><span class="op">);</span></span>
- <span id="cb85-7"><a href="#cb85-7" aria-hidden="true" tabindex="-1"></a><span class="op">}</span></span>
- <span id="cb85-8"><a href="#cb85-8" aria-hidden="true" tabindex="-1"></a><span class="cf">if</span> <span class="op">(</span>cap <span class="op">&</span> ZINT_CAP_ECI<span class="op">)</span> <span class="op">{</span></span>
- <span id="cb85-9"><a href="#cb85-9" aria-hidden="true" tabindex="-1"></a> printf<span class="op">(</span><span class="st">"PDF417 supports ECI</span><span class="sc">\n</span><span class="st">"</span><span class="op">);</span></span>
- <span id="cb85-10"><a href="#cb85-10" aria-hidden="true" tabindex="-1"></a><span class="op">}</span> <span class="cf">else</span> <span class="op">{</span></span>
- <span id="cb85-11"><a href="#cb85-11" aria-hidden="true" tabindex="-1"></a> printf<span class="op">(</span><span class="st">"PDF417 does not support ECI</span><span class="sc">\n</span><span class="st">"</span><span class="op">);</span></span>
- <span id="cb85-12"><a href="#cb85-12" aria-hidden="true" tabindex="-1"></a><span class="op">}</span></span></code></pre></div>
- <h2 id="zint-version">5.16 Zint Version</h2>
- <p>Whether the Zint library linked to was built with PNG support may be
- determined with:</p>
- <div class="sourceCode" id="cb86"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb86-1"><a href="#cb86-1" aria-hidden="true" tabindex="-1"></a><span class="dt">int</span> ZBarcode_NoPng<span class="op">();</span></span></code></pre></div>
- <p>which returns 1 if no PNG support is available, else zero.</p>
- <p>Lastly, the version of the Zint library linked to is returned by:</p>
- <div class="sourceCode" id="cb87"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb87-1"><a href="#cb87-1" aria-hidden="true" tabindex="-1"></a><span class="dt">int</span> ZBarcode_Version<span class="op">();</span></span></code></pre></div>
- <p>The version parts are separated by hundreds. For instance, version
- <code>"2.9.1"</code> is returned as <code>"20901"</code>.</p>
- <h1 id="types-of-symbology">6. Types of Symbology</h1>
- <h2 id="one-dimensional-symbols">6.1 One-Dimensional Symbols</h2>
- <p>One-dimensional or linear symbols are what most people associate with
- the term barcode. They consist of a number of bars and a number of
- spaces of differing widths.</p>
- <h3 id="code-11">6.1.1 Code 11</h3>
- <figure>
- <img src="images/code11.svg" title="fig:" class="lin"
- alt="zint -b CODE11 -d "9212320967"" />
- <figcaption
- aria-hidden="true"><code>zint -b CODE11 -d "9212320967"</code></figcaption>
- </figure>
- <p>Developed by Intermec in 1977, Code 11 is similar to Code 2 of 5
- Matrix and is primarily used in telecommunications. The symbol can
- encode data consisting of the digits 0-9 and the dash character
- (<code>-</code>) up to a maximum of 140 characters. Two modulo-11 check
- digits are added by default. To add just one check digit, set
- <code>--vers=1</code> (API <code>option_2 = 1</code>). To add no check
- digits, set <code>--vers=2</code> (API <code>option_2 = 2</code>).</p>
- <h3 id="code-2-of-5">6.1.2 Code 2 of 5</h3>
- <p>Code 2 of 5 is a family of one-dimensional symbols, 8 of which are
- supported by Zint. Note that the names given to these standards alters
- from one source to another so you should take care to ensure that you
- have the right barcode type before using these standards.</p>
- <h4 id="standard-code-2-of-5">6.1.2.1 Standard Code 2 of 5</h4>
- <figure>
- <img src="images/c25standard.svg" title="fig:" class="lin"
- alt="zint -b C25STANDARD -d "9212320967"" />
- <figcaption
- aria-hidden="true"><code>zint -b C25STANDARD -d "9212320967"</code></figcaption>
- </figure>
- <p>Also known as Code 2 of 5 Matrix, this is a self-checking code used
- in industrial applications and photo development. Standard Code 2 of 5
- will encode numeric input (digits 0-9) up to a maximum of 112 digits. No
- check digit is added by default. To add a check digit, set
- <code>--vers=1</code> (API <code>option_2 = 1</code>). To add a check
- digit but not show it in the Human Readable Text, set
- <code>--vers=2</code> (API <code>option_2 = 2</code>).</p>
- <h4 id="iata-code-2-of-5">6.1.2.2 IATA Code 2 of 5</h4>
- <figure>
- <img src="images/c25iata.svg" title="fig:" class="lin"
- alt="zint -b C25IATA -d "9212320967"" />
- <figcaption
- aria-hidden="true"><code>zint -b C25IATA -d "9212320967"</code></figcaption>
- </figure>
- <p>Used for baggage handling in the air-transport industry by the
- International Air Transport Agency, this self-checking code will encode
- numeric input (digits 0-9) up to a maximum of 80 digits. No check digit
- is added by default, but can be set the same as for <a
- href="#standard-code-2-of-5">6.1.2.1 Standard Code 2 of 5</a>.</p>
- <h4 id="industrial-code-2-of-5">6.1.2.3 Industrial Code 2 of 5</h4>
- <figure>
- <img src="images/c25ind.svg" title="fig:" class="lin"
- alt="zint -b C25IND -d "9212320967"" />
- <figcaption
- aria-hidden="true"><code>zint -b C25IND -d "9212320967"</code></figcaption>
- </figure>
- <p>Industrial Code 2 of 5 can encode numeric input (digits 0-9) up to a
- maximum of 79 digits. No check digit is added by default, but can be set
- the same as for <a href="#standard-code-2-of-5">6.1.2.1 Standard Code 2
- of 5</a>.</p>
- <h4 id="interleaved-code-2-of-5-iso-16390">6.1.2.4 Interleaved Code 2 of
- 5 (ISO 16390)</h4>
- <figure>
- <img src="images/c25inter.svg" title="fig:" class="lin"
- alt="zint -b C25INTER --compliantheight -d "9212320967"" />
- <figcaption
- aria-hidden="true"><code>zint -b C25INTER --compliantheight -d "9212320967"</code></figcaption>
- </figure>
- <p>This self-checking symbology encodes pairs of numbers, and so can
- only encode an even number of digits (0-9). If an odd number of digits
- is entered a leading zero is added by Zint. A maximum of 62 pairs (124
- digits) can be encoded. No check digit is added by default, but can be
- set the same as for <a href="#standard-code-2-of-5">6.1.2.1 Standard
- Code 2 of 5</a>.</p>
- <h4 id="code-2-of-5-data-logic">6.1.2.5 Code 2 of 5 Data Logic</h4>
- <figure>
- <img src="images/c25logic.svg" title="fig:" class="lin"
- alt="zint -b C25LOGIC -d "9212320967"" />
- <figcaption
- aria-hidden="true"><code>zint -b C25LOGIC -d "9212320967"</code></figcaption>
- </figure>
- <p>Data Logic does not include a check digit by default and can encode
- numeric input (digits 0-9) up to a maximum of 113 digits. Check digit
- options are the same as for <a href="#standard-code-2-of-5">6.1.2.1
- Standard Code 2 of 5</a>.</p>
- <h4 id="itf-14">6.1.2.6 ITF-14</h4>
- <figure>
- <img src="images/itf14.svg" title="fig:" class="lin"
- alt="zint -b ITF14 --compliantheight -d "9212320967145"" />
- <figcaption
- aria-hidden="true"><code>zint -b ITF14 --compliantheight -d "9212320967145"</code></figcaption>
- </figure>
- <p>ITF-14, also known as UPC Shipping Container Symbol or Case Code, is
- based on Interleaved Code 2 of 5 and requires a 13-digit numeric input
- (digits 0-9). One modulo-10 check digit is added by Zint.</p>
- <p>If no border option is specified Zint defaults to adding a bounding
- box with a border width of 5. This behaviour can be overridden by using
- the <code>--bind</code> option (API
- <code>output_options |= BARCODE_BIND</code>). Similarly the border width
- can be overridden using <code>--border</code> (API
- <code>border_width</code>). If a symbol with no border is required this
- can be achieved by explicitly setting the border type to box (or bind or
- bindtop) and leaving the border width 0.</p>
- <figure>
- <img src="images/itf14_border0.svg" title="fig:" class="lin"
- alt="zint -b ITF14 --box --compliantheight -d "9212320967145"" />
- <figcaption
- aria-hidden="true"><code>zint -b ITF14 --box --compliantheight -d "9212320967145"</code></figcaption>
- </figure>
- <h4 id="deutsche-post-leitcode">6.1.2.7 Deutsche Post Leitcode</h4>
- <figure>
- <img src="images/dpleit.svg" title="fig:" class="lin"
- alt="zint -b DPLEIT -d "9212320967145"" />
- <figcaption
- aria-hidden="true"><code>zint -b DPLEIT -d "9212320967145"</code></figcaption>
- </figure>
- <p>Leitcode is based on Interleaved Code 2 of 5 and is used by Deutsche
- Post for routing purposes. Leitcode requires a 13-digit numerical input
- to which Zint adds a check digit.</p>
- <h4 id="deutsche-post-identcode">6.1.2.8 Deutsche Post Identcode</h4>
- <figure>
- <img src="images/dpident.svg" title="fig:" class="lin"
- alt="zint -b DPIDENT -d "91232096712"" />
- <figcaption
- aria-hidden="true"><code>zint -b DPIDENT -d "91232096712"</code></figcaption>
- </figure>
- <p>Identcode is based on Interleaved Code 2 of 5 and is used by Deutsche
- Post for identification purposes. Identcode requires an 11-digit
- numerical input to which Zint adds a check digit.</p>
- <h3 id="upc-universal-product-code-iso-15420">6.1.3 UPC (Universal
- Product Code) (ISO 15420)</h3>
- <h4 id="upc-version-a">6.1.3.1 UPC Version A</h4>
- <figure>
- <img src="images/upca.svg" title="fig:" class="upcean"
- alt="zint -b UPCA --compliantheight -d "72527270270"" />
- <figcaption
- aria-hidden="true"><code>zint -b UPCA --compliantheight -d "72527270270"</code></figcaption>
- </figure>
- <p>UPC-A is used in the United States for retail applications. The
- symbol requires an 11-digit article number. The check digit is
- calculated by Zint. In addition EAN-2 and EAN-5 add-on symbols can be
- added using the + character. For example, to draw a UPC-A symbol with
- the data 72527270270 with an EAN-5 add-on showing the data 12345 use the
- command:</p>
- <div class="sourceCode" id="cb88"><pre
- class="sourceCode bash"><code class="sourceCode bash"><span id="cb88-1"><a href="#cb88-1" aria-hidden="true" tabindex="-1"></a><span class="ex">zint</span> <span class="at">-b</span> UPCA <span class="at">-d</span> <span class="st">"72527270270+12345"</span></span></code></pre></div>
- <p>or using the API encode a data string with the + character
- included:</p>
- <div class="sourceCode" id="cb89"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb89-1"><a href="#cb89-1" aria-hidden="true" tabindex="-1"></a>my_symbol<span class="op">-></span>symbology <span class="op">=</span> BARCODE_UPCA<span class="op">;</span></span>
- <span id="cb89-2"><a href="#cb89-2" aria-hidden="true" tabindex="-1"></a>error <span class="op">=</span> ZBarcode_Encode_and_Print<span class="op">(</span>my_symbol<span class="op">,</span> <span class="st">"72527270270+12345"</span><span class="op">,</span> <span class="dv">0</span><span class="op">,</span> <span class="dv">0</span><span class="op">);</span></span></code></pre></div>
- <figure>
- <img src="images/upca_5.svg" title="fig:" class="upcean"
- alt="zint -b UPCA --compliantheight -d "72527270270+12345"" />
- <figcaption
- aria-hidden="true"><code>zint -b UPCA --compliantheight -d "72527270270+12345"</code></figcaption>
- </figure>
- <p>If your input data already includes the check digit symbology
- <code>BARCODE_UPCA_CHK</code> (35) can be used which takes a 12-digit
- input and validates the check digit before encoding.</p>
- <p>A quiet zone indicator can be added to the HRT by setting
- <code>--guardwhitespace</code> (API
- <code>output_options |= EANUPC_GUARD_WHITESPACE</code>). For UPC, this
- is only relevant when there is add-on:</p>
- <div class="sourceCode" id="cb90"><pre
- class="sourceCode bash"><code class="sourceCode bash"><span id="cb90-1"><a href="#cb90-1" aria-hidden="true" tabindex="-1"></a><span class="ex">zint</span> <span class="at">-b</span> UPCA <span class="at">-d</span> <span class="st">"72527270270+12345"</span> <span class="at">--guardwhitespace</span></span></code></pre></div>
- <p>or using the API:</p>
- <div class="sourceCode" id="cb91"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb91-1"><a href="#cb91-1" aria-hidden="true" tabindex="-1"></a>my_symbol<span class="op">-></span>symbology <span class="op">=</span> BARCODE_UPCA<span class="op">;</span></span>
- <span id="cb91-2"><a href="#cb91-2" aria-hidden="true" tabindex="-1"></a>my_symbol<span class="op">-></span>output_options <span class="op">|=</span> EANUPC_GUARD_WHITESPACE<span class="op">;</span></span>
- <span id="cb91-3"><a href="#cb91-3" aria-hidden="true" tabindex="-1"></a>error <span class="op">=</span> ZBarcode_Encode_and_Print<span class="op">(</span>my_symbol<span class="op">,</span> <span class="st">"72527270270+12345"</span><span class="op">,</span> <span class="dv">0</span><span class="op">,</span> <span class="dv">0</span><span class="op">);</span></span></code></pre></div>
- <figure>
- <img src="images/upca_5_gws.svg" title="fig:" class="upcean"
- alt="zint -b UPCA --compliantheight -d "72527270270+12345" --guardwhitespace" />
- <figcaption
- aria-hidden="true"><code>zint -b UPCA --compliantheight -d "72527270270+12345" --guardwhitespace</code></figcaption>
- </figure>
- <p>You can adjust the gap between the main symbol and an add-on in
- integral multiples of the X-dimension by setting <code>--addongap</code>
- (API <code>option_2</code>) to a value between 9 (default) and 12. The
- height in X-dimensions that the guard bars descend below the main bars
- can be adjusted by setting <code>--guarddescent</code> (API
- <code>guard_descent</code>) to a value between 0.0 and 20.0 (default
- 5.0).</p>
- <h4 id="upc-version-e">6.1.3.2 UPC Version E</h4>
- <figure>
- <img src="images/upce.svg" title="fig:" class="upcean"
- alt="zint -b UPCE --compliantheight -d "1123456"" />
- <figcaption
- aria-hidden="true"><code>zint -b UPCE --compliantheight -d "1123456"</code></figcaption>
- </figure>
- <p>UPC-E is a zero-compressed version of UPC-A developed for smaller
- packages. The code requires a 6-digit article number (digits 0-9). The
- check digit is calculated by Zint. EAN-2 and EAN-5 add-on symbols can be
- added using the + character as with UPC-A. In addition Zint also
- supports Number System 1 encoding by entering a 7-digit article number
- starting with the digit 1. For example:</p>
- <div class="sourceCode" id="cb92"><pre
- class="sourceCode bash"><code class="sourceCode bash"><span id="cb92-1"><a href="#cb92-1" aria-hidden="true" tabindex="-1"></a><span class="ex">zint</span> <span class="at">-b</span> UPCE <span class="at">-d</span> <span class="st">"1123456"</span></span></code></pre></div>
- <p>or</p>
- <div class="sourceCode" id="cb93"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb93-1"><a href="#cb93-1" aria-hidden="true" tabindex="-1"></a>my_symbol<span class="op">-></span>symbology <span class="op">=</span> BARCODE_UPCE<span class="op">;</span></span>
- <span id="cb93-2"><a href="#cb93-2" aria-hidden="true" tabindex="-1"></a>error <span class="op">=</span> ZBarcode_Encode_and_Print<span class="op">(</span>my_symbol<span class="op">,</span> <span class="st">"1123456"</span><span class="op">,</span> <span class="dv">0</span><span class="op">,</span> <span class="dv">0</span><span class="op">);</span></span></code></pre></div>
- <p>If your input data already includes the check digit symbology
- <code>BARCODE_UPCE_CHK</code> (38) can be used which takes a 7 or
- 8-digit input and validates the check digit before encoding.</p>
- <p>As with UPC-A, a quiet zone indicator can be added when there is an
- add-on by setting <code>--guardwhitespace</code> (API
- <code>output_options |= EANUPC_GUARD_WHITESPACE</code>):</p>
- <div class="sourceCode" id="cb94"><pre
- class="sourceCode bash"><code class="sourceCode bash"><span id="cb94-1"><a href="#cb94-1" aria-hidden="true" tabindex="-1"></a><span class="ex">zint</span> <span class="at">-b</span> UPCE <span class="at">-d</span> <span class="st">"1123456+12"</span> <span class="at">--guardwhitespace</span></span></code></pre></div>
- <figure>
- <img src="images/upce_2_gws.svg" title="fig:" class="upcean"
- alt="zint -b UPCE --compliantheight -d "1123456+12" --guardwhitespace" />
- <figcaption
- aria-hidden="true"><code>zint -b UPCE --compliantheight -d "1123456+12" --guardwhitespace</code></figcaption>
- </figure>
- <p>You can adjust the gap between the main symbol and an add-on in
- integral multiples of the X-dimension by setting <code>--addongap</code>
- (API <code>option_2</code>) to a value between 7 (default) and 12. The
- height in X-dimensions that the guard bars descend below the main bars
- can be adjusted by setting <code>--guarddescent</code> (API
- <code>guard_descent</code>) to a value between 0.0 and 20.0 (default
- 5.0).</p>
- <h3 id="ean-european-article-number-iso-15420">6.1.4 EAN (European
- Article Number) (ISO 15420)</h3>
- <h4 id="ean-2-ean-5-ean-8-and-ean-13">6.1.4.1 EAN-2, EAN-5, EAN-8 and
- EAN-13</h4>
- <figure>
- <img src="images/eanx13.svg" title="fig:" class="upcean"
- alt="zint -b EANX --compliantheight -d "4512345678906"" />
- <figcaption
- aria-hidden="true"><code>zint -b EANX --compliantheight -d "4512345678906"</code></figcaption>
- </figure>
- <p>The EAN system is used in retail across Europe and includes standards
- for EAN-2, EAN-5, EAN-8 and EAN-13 which encode 2, 5, 7 or 12-digit
- numbers respectively. Zint will decide which symbology to use depending
- on the length of the input data. In addition EAN-2 and EAN-5 add-on
- symbols can be added to EAN-8 and EAN-13 symbols using the + character
- as with UPC symbols. For example:</p>
- <div class="sourceCode" id="cb95"><pre
- class="sourceCode bash"><code class="sourceCode bash"><span id="cb95-1"><a href="#cb95-1" aria-hidden="true" tabindex="-1"></a><span class="ex">zint</span> <span class="at">-b</span> EANX <span class="at">-d</span> <span class="st">"54321"</span></span></code></pre></div>
- <figure>
- <img src="images/eanx5.svg" title="fig:" class="upcean"
- alt="zint -b EANX --compliantheight -d "54321"" />
- <figcaption
- aria-hidden="true"><code>zint -b EANX --compliantheight -d "54321"</code></figcaption>
- </figure>
- <p>will encode a stand-alone EAN-5, whereas</p>
- <div class="sourceCode" id="cb96"><pre
- class="sourceCode bash"><code class="sourceCode bash"><span id="cb96-1"><a href="#cb96-1" aria-hidden="true" tabindex="-1"></a><span class="ex">zint</span> <span class="at">-b</span> EANX <span class="at">-d</span> <span class="st">"7432365+54321"</span></span></code></pre></div>
- <p>will encode an EAN-8 symbol with an EAN-5 add-on. As before these
- results can be achieved using the API:</p>
- <div class="sourceCode" id="cb97"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb97-1"><a href="#cb97-1" aria-hidden="true" tabindex="-1"></a>my_symbol<span class="op">-></span>symbology <span class="op">=</span> BARCODE_EANX<span class="op">;</span></span>
- <span id="cb97-2"><a href="#cb97-2" aria-hidden="true" tabindex="-1"></a></span>
- <span id="cb97-3"><a href="#cb97-3" aria-hidden="true" tabindex="-1"></a>error <span class="op">=</span> ZBarcode_Encode_and_Print<span class="op">(</span>my_symbol<span class="op">,</span> <span class="st">"54321"</span><span class="op">,</span> <span class="dv">0</span><span class="op">,</span> <span class="dv">0</span><span class="op">);</span></span>
- <span id="cb97-4"><a href="#cb97-4" aria-hidden="true" tabindex="-1"></a></span>
- <span id="cb97-5"><a href="#cb97-5" aria-hidden="true" tabindex="-1"></a>error <span class="op">=</span> ZBarcode_Encode_and_Print<span class="op">(</span>my_symbol<span class="op">,</span> <span class="st">"7432365+54321"</span><span class="op">,</span> <span class="dv">0</span><span class="op">,</span> <span class="dv">0</span><span class="op">);</span></span></code></pre></div>
- <figure>
- <img src="images/eanx8_5.svg" title="fig:" class="upcean"
- alt="zint -b EANX --compliantheight -d "7432365+54321"" />
- <figcaption
- aria-hidden="true"><code>zint -b EANX --compliantheight -d "7432365+54321"</code></figcaption>
- </figure>
- <p>All of the EAN symbols include check digits which are added by
- Zint.</p>
- <p>If you are encoding an EAN-8 or EAN-13 symbol and your data already
- includes the check digit then you can use symbology
- <code>BARCODE_EANX_CHK</code> (14) which takes an 8 or 13-digit input
- and validates the check digit before encoding.</p>
- <p>Options to add quiet zone indicators and to adjust the add-on gap and
- the guard bar descent height are the same as for <a
- href="#upc-version-e">6.1.3.2 UPC Version E</a>. For instance:</p>
- <div class="sourceCode" id="cb98"><pre
- class="sourceCode bash"><code class="sourceCode bash"><span id="cb98-1"><a href="#cb98-1" aria-hidden="true" tabindex="-1"></a><span class="ex">zint</span> <span class="at">-b</span> EANX_CHK <span class="at">-d</span> <span class="st">"74323654"</span> <span class="at">--guardwhitespace</span></span></code></pre></div>
- <figure>
- <img src="images/eanx8_gws.svg" title="fig:" class="upcean"
- alt="zint -b EANX_CHK --compliantheight -d "74323654" –guardwhitespace" />
- <figcaption
- aria-hidden="true"><code>zint -b EANX_CHK --compliantheight -d "74323654"</code>
- –guardwhitespace</figcaption>
- </figure>
- <h4 id="sbn-isbn-and-isbn-13">6.1.4.2 SBN, ISBN and ISBN-13</h4>
- <figure>
- <img src="images/isbnx.svg" title="fig:" class="upcean"
- alt="zint -b ISBNX --compliantheight -d "9789295055124"" />
- <figcaption
- aria-hidden="true"><code>zint -b ISBNX --compliantheight -d "9789295055124"</code></figcaption>
- </figure>
- <p>EAN-13 symbols (also known as Bookland EAN-13) can also be produced
- from 9-digit SBN, 10-digit ISBN or 13-digit ISBN-13 data. The relevant
- check digit needs to be present in the input data and will be verified
- before the symbol is generated.</p>
- <p>As with EAN-13, a quiet zone indicator can be added using
- <code>--guardwhitespace</code>:</p>
- <figure>
- <img src="images/isbnx_gws.svg" title="fig:" class="upcean"
- alt="zint -b ISBNX --compliantheight -d "9789295055124" --guardwhitespace" />
- <figcaption
- aria-hidden="true"><code>zint -b ISBNX --compliantheight -d "9789295055124" --guardwhitespace</code></figcaption>
- </figure>
- <p>EAN-2 and EAN-5 add-on symbols can be added using the + character,
- and there are options to adjust the add-on gap and the guard bar descent
- height - see <a href="#upc-version-e">6.1.3.2 UPC Version E</a>.</p>
- <h3 id="plessey">6.1.5 Plessey</h3>
- <h4 id="uk-plessey">6.1.5.1 UK Plessey</h4>
- <figure>
- <img src="images/plessey.svg" title="fig:" class="lin"
- alt="zint -b PLESSEY -d "C64"" />
- <figcaption
- aria-hidden="true"><code>zint -b PLESSEY -d "C64"</code></figcaption>
- </figure>
- <p>Also known as Plessey Code, this symbology was developed by the
- Plessey Company Ltd. in the UK. The symbol can encode data consisting of
- digits (0-9) or letters A-F up to a maximum of 67 characters and
- includes a hidden CRC check digit.</p>
- <h4 id="msi-plessey">6.1.5.2 MSI Plessey</h4>
- <figure>
- <img src="images/msi_plessey.svg" title="fig:" class="lin"
- alt="zint -b MSI_PLESSEY -d "6502" --vers=2" />
- <figcaption
- aria-hidden="true"><code>zint -b MSI_PLESSEY -d "6502" --vers=2</code></figcaption>
- </figure>
- <p>Based on Plessey and developed by MSI Data Corporation, MSI Plessey
- can encode numeric (digits 0-9) input of up to 92 digits. It has a range
- of check digit options that are selectable by setting
- <code>--vers</code> (API <code>option_2</code>), shown in the table
- below:</p>
- <div id="tbl:msi_plessey_check_digits" class="tablenos">
- <table id="tbl:msi_plessey_check_digits"
- data-tag=": MSI Plessey Check Digit Options">
- <caption><span>Table : MSI Plessey Check Digit Options</span>
- </caption>
- <thead>
- <tr>
- <th>Value</th>
- <th style="text-align: left;">Check Digits</th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <td>0</td>
- <td style="text-align: left;">None</td>
- </tr>
- <tr>
- <td>1</td>
- <td style="text-align: left;">Modulo-10 (Luhn)</td>
- </tr>
- <tr>
- <td>2</td>
- <td style="text-align: left;">Modulo-10 & Modulo-10</td>
- </tr>
- <tr>
- <td>3</td>
- <td style="text-align: left;">Modulo-11 (IBM)</td>
- </tr>
- <tr>
- <td>4</td>
- <td style="text-align: left;">Modulo-11 (IBM) & Modulo-10</td>
- </tr>
- <tr>
- <td>5</td>
- <td style="text-align: left;">Modulo-11 (NCR)</td>
- </tr>
- <tr>
- <td>6</td>
- <td style="text-align: left;">Modulo-11 (NCR) & Modulo-10</td>
- </tr>
- </tbody>
- </table>
- </div>
- <p>To not show the check digit or digits in the Human Readable Text, add
- 10 to the <code>--vers</code> value. For example <code>--vers=12</code>
- (API <code>option_2 = 12</code>) will add two hidden modulo-10 check
- digits.</p>
- <h3 id="telepen">6.1.6 Telepen</h3>
- <h4 id="telepen-alpha">6.1.6.1 Telepen Alpha</h4>
- <figure>
- <img src="images/telepen.svg" title="fig:" class="lin"
- alt="zint -b TELEPEN --compliantheight -d "Z80"" />
- <figcaption
- aria-hidden="true"><code>zint -b TELEPEN --compliantheight -d "Z80"</code></figcaption>
- </figure>
- <p>Telepen Alpha was developed by SB Electronic Systems Limited and can
- encode ASCII text input, up to a maximum of 69 characters. Telepen
- includes a hidden modulo-127 check digit, added by Zint.</p>
- <h4 id="telepen-numeric">6.1.6.2 Telepen Numeric</h4>
- <figure>
- <img src="images/telepen_num.svg" title="fig:" class="lin"
- alt="zint -b TELEPEN_NUM --compliantheight -d "466X33"" />
- <figcaption
- aria-hidden="true"><code>zint -b TELEPEN_NUM --compliantheight -d "466X33"</code></figcaption>
- </figure>
- <p>Telepen Numeric allows compression of numeric data into a Telepen
- symbol. Data can consist of pairs of numbers or pairs consisting of a
- numerical digit followed an X character. For example: 466333 and 466X33
- are valid codes whereas 46X333 is not (the digit pair <code>"X3"</code>
- is not valid). Up to 136 digits can be encoded. Telepen Numeric includes
- a hidden modulo-127 check digit which is added by Zint.</p>
- <h3 id="code-39">6.1.7 Code 39</h3>
- <h4 id="standard-code-39-iso-16388">6.1.7.1 Standard Code 39 (ISO
- 16388)</h4>
- <figure>
- <img src="images/code39.svg" title="fig:" class="lin"
- alt="zint -b CODE39 --compliantheight -d "1A" --vers=1" />
- <figcaption
- aria-hidden="true"><code>zint -b CODE39 --compliantheight -d "1A" --vers=1</code></figcaption>
- </figure>
- <p>Standard Code 39 was developed in 1974 by Intermec. Input data can be
- up to 86 characters in length and can include the characters 0-9, A-Z,
- dash (<code>-</code>), full stop (<code>.</code>), space, asterisk
- (<code>*</code>), dollar (<code>$</code>), slash (<code>/</code>), plus
- (<code>+</code>) and percent (<code>%</code>). The standard does not
- require a check digit but a modulo-43 check digit can be added if
- desired by setting <code>--vers=1</code> (API
- <code>option_2 = 1</code>). To add a check digit but not show it in the
- Human Readable Text, set <code>--vers=2</code> (API
- <code>option_2 = 2</code>).</p>
- <h4 id="extended-code-39">6.1.7.2 Extended Code 39</h4>
- <figure>
- <img src="images/excode39.svg" title="fig:" class="lin"
- alt="zint -b EXCODE39 --compliantheight -d "123.45$@fd"" />
- <figcaption
- aria-hidden="true"><code>zint -b EXCODE39 --compliantheight -d "123.45$@fd"</code></figcaption>
- </figure>
- <p>Also known as Code 39e and Code39+, this symbology expands on
- Standard Code 39 to provide support for the full 7-bit ASCII character
- set. The check digit options are the same as for <a
- href="#standard-code-39-iso-16388">6.1.7.1 Standard Code 39 (ISO
- 16388)</a>.</p>
- <h4 id="code-93">6.1.7.3 Code 93</h4>
- <figure>
- <img src="images/code93.svg" title="fig:" class="lin"
- alt="zint -b CODE93 --compliantheight -d "C93"" />
- <figcaption
- aria-hidden="true"><code>zint -b CODE93 --compliantheight -d "C93"</code></figcaption>
- </figure>
- <p>A variation of Extended Code 39, Code 93 also supports full ASCII
- text, accepting up to 123 characters. Two check characters are added by
- Zint. By default these check characters are not shown in the Human
- Readable Text, but may be shown by setting <code>--vers=1</code> (API
- <code>option_2 = 1</code>).</p>
- <h4 id="pzn-pharmazentralnummer">6.1.7.4 PZN (Pharmazentralnummer)</h4>
- <figure>
- <img src="images/pzn.svg" title="fig:" class="lin"
- alt="zint -b PZN --compliantheight -d "2758089"" />
- <figcaption
- aria-hidden="true"><code>zint -b PZN --compliantheight -d "2758089"</code></figcaption>
- </figure>
- <p>PZN is a Code 39 based symbology used by the pharmaceutical industry
- in Germany. PZN encodes a 7-digit number to which Zint will add a
- modulo-11 check digit (PZN8). Input less than 7 digits will be
- zero-filled. An 8-digit input can be supplied in which case Zint will
- validate the check digit.</p>
- <p>To encode a PZN7 (obsolete since 2013) instead set
- <code>--vers=1</code> (API <code>option_2 = 1</code>) and supply up to 7
- digits. As with PZN8, a modulo-11 check digit will be added or if 7
- digits supplied the check digit validated.</p>
- <h4 id="logmars">6.1.7.5 LOGMARS</h4>
- <figure>
- <img src="images/logmars.svg" title="fig:" class="lin"
- alt="zint -b LOGMARS --compliantheight -d "12345/ABCDE" --vers=1" />
- <figcaption
- aria-hidden="true"><code>zint -b LOGMARS --compliantheight -d "12345/ABCDE" --vers=1</code></figcaption>
- </figure>
- <p>LOGMARS (Logistics Applications of Automated Marking and Reading
- Symbols) is a variation of the Code 39 symbology used by the U.S.
- Department of Defense. LOGMARS encodes the same character set as <a
- href="#standard-code-39-iso-16388">6.1.7.1 Standard Code 39 (ISO
- 16388)</a>, and the check digit options are also the same. Input is
- restricted to a maximum of 30 characters.</p>
- <h4 id="code-32">6.1.7.6 Code 32</h4>
- <figure>
- <img src="images/code32.svg" title="fig:" class="lin"
- alt="zint -b CODE32 --compliantheight -d "14352312"" />
- <figcaption
- aria-hidden="true"><code>zint -b CODE32 --compliantheight -d "14352312"</code></figcaption>
- </figure>
- <p>A variation of Code 39 used by the Italian Ministry of Health
- (“Ministero della Sanità”) for encoding identifiers on pharmaceutical
- products. This symbology requires a numeric input up to 8 digits in
- length. A check digit is added by Zint.</p>
- <h4 id="hibc-code-39">6.1.7.7 HIBC Code 39</h4>
- <figure>
- <img src="images/hibc_39.svg" title="fig:" class="lin"
- alt="zint -b HIBC_39 --compliantheight -d "14352312"" />
- <figcaption
- aria-hidden="true"><code>zint -b HIBC_39 --compliantheight -d "14352312"</code></figcaption>
- </figure>
- <p>This variant adds a leading <code>'+'</code> character and a trailing
- modulo-49 check digit to a standard Code 39 symbol as required by the
- Health Industry Barcode standards.</p>
- <h4 id="vehicle-identification-number-vin">6.1.7.8 Vehicle
- Identification Number (VIN)</h4>
- <figure>
- <img src="images/vin.svg" title="fig:" class="lin"
- alt="zint -b VIN -d "2FTPX28L0XCA15511" --vers=1" />
- <figcaption
- aria-hidden="true"><code>zint -b VIN -d "2FTPX28L0XCA15511" --vers=1</code></figcaption>
- </figure>
- <p>A variation of Code 39 that for vehicle identification numbers used
- in North America (first character <code>'1'</code> to <code>'5'</code>)
- has a check character verification stage. A 17 character input (0-9, and
- A-Z excluding <code>'I'</code>, <code>'O'</code> and <code>'Q'</code>)
- is required. An invisible Import character prefix <code>'I'</code> can
- be added by setting <code>--vers=1</code> (API
- <code>option_2 = 1</code>).</p>
- <h3 id="codabar-en-798">6.1.8 Codabar (EN 798)</h3>
- <figure>
- <img src="images/codabar.svg" title="fig:" class="lin"
- alt="zint -b CODABAR --compliantheight -d "A37859B"" />
- <figcaption
- aria-hidden="true"><code>zint -b CODABAR --compliantheight -d "A37859B"</code></figcaption>
- </figure>
- <p>Also known as NW-7, Monarch, ABC Codabar, USD-4, Ames Code and Code
- 27, this symbology was developed in 1972 by Monarch Marketing Systems
- for retail purposes. The American Blood Commission adopted Codabar in
- 1977 as the standard symbology for blood identification. Codabar can
- encode up to 103 characters starting and ending with the letters A-D and
- containing between these letters the numbers 0-9, dash (<code>-</code>),
- dollar (<code>$</code>), colon (<code>:</code>), slash (<code>/</code>),
- full stop (<code>.</code>) or plus (<code>+</code>). No check character
- is generated by default, but a modulo-16 one can be added by setting
- <code>--vers=1</code> (API <code>option_2 = 1</code>). To have the check
- character appear in the Human Readable Text, set <code>--vers=2</code>
- (API <code>option_2 = 2</code>).</p>
- <h3 id="pharmacode">6.1.9 Pharmacode</h3>
- <figure>
- <img src="images/pharma.svg" title="fig:" class="lin"
- alt="zint -b PHARMA --compliantheight -d "130170"" />
- <figcaption
- aria-hidden="true"><code>zint -b PHARMA --compliantheight -d "130170"</code></figcaption>
- </figure>
- <p>Developed by Laetus, Pharmacode is used for the identification of
- pharmaceuticals. The symbology is able to encode whole numbers between 3
- and 131070.</p>
- <h3 id="code-128">6.1.10 Code 128</h3>
- <h4 id="standard-code-128-iso-15417">6.1.10.1 Standard Code 128 (ISO
- 15417)</h4>
- <figure>
- <img src="images/code128.svg" title="fig:" class="lin"
- alt="zint -b CODE128 --bind -d "130170X178"" />
- <figcaption
- aria-hidden="true"><code>zint -b CODE128 --bind -d "130170X178"</code></figcaption>
- </figure>
- <p>One of the most ubiquitous one-dimensional barcode symbologies, Code
- 128 was developed in 1981 by Computer Identics. This symbology supports
- full ASCII text and uses a three-Code Set system to compress the data
- into a smaller symbol. Zint automatically switches between Code Sets A,
- B and C (but see below) and adds a hidden modulo-103 check digit.</p>
- <p>Code 128 is the default barcode symbology used by Zint. In addition
- Zint supports the encoding of ISO/IEC 8859-1 (non-English) characters in
- Code 128 symbols. The ISO/IEC 8859-1 character set is shown in Annex <a
- href="#a.2-latin-alphabet-no.-1-isoiec-8859-1">A.2 Latin Alphabet No. 1
- (ISO/IEC 8859-1)</a>.</p>
- <p>Manual switching of Code Sets is possible using the
- <code>--extraesc</code> option (API
- <code>input_mode |= EXTRA_ESCAPE_MODE</code>), which apart from
- processing normal escape sequences also processes the Code 128-specific
- escapes <code>\^A</code>, <code>\^B</code>, <code>\^C</code> and
- <code>\^@</code> (the latter turns off manual Code Set selection). For
- instance the following will force switching to Code Set B for the data
- <code>"5678"</code> (normally Code Set C would be used throughout):</p>
- <div class="sourceCode" id="cb99"><pre
- class="sourceCode bash"><code class="sourceCode bash"><span id="cb99-1"><a href="#cb99-1" aria-hidden="true" tabindex="-1"></a><span class="ex">zint</span> <span class="at">-b</span> CODE128 <span class="at">-d</span> <span class="st">"1234\^B5678"</span> <span class="at">--extraesc</span></span></code></pre></div>
- <p>The manually selected Code Set will apply until the next Code Set
- escape sequence or until a <code>\^@</code>, with the exception that
- data that cannot be represented in that Code Set will be switched as
- appropriate. If the data contains an extra escape sequence, it can be
- escaped by doubling the caret (<code>^</code>). For instance</p>
- <div class="sourceCode" id="cb100"><pre
- class="sourceCode bash"><code class="sourceCode bash"><span id="cb100-1"><a href="#cb100-1" aria-hidden="true" tabindex="-1"></a><span class="ex">zint</span> <span class="at">-b</span> CODE128 <span class="at">-d</span> <span class="st">"\^AABC\^^BDEF"</span> <span class="at">--extraesc</span></span></code></pre></div>
- <p>will encode the data <code>"ABC\^BDEF"</code> in Code Set A.</p>
- <p>There is also the extra escape <code>\^1</code>, which will encode a
- special Function Code 1 character (FNC1) anywhere you chose in the data,
- for instance</p>
- <div class="sourceCode" id="cb101"><pre
- class="sourceCode bash"><code class="sourceCode bash"><span id="cb101-1"><a href="#cb101-1" aria-hidden="true" tabindex="-1"></a><span class="ex">zint</span> <span class="at">-b</span> CODE128 <span class="at">-d</span> <span class="st">"A\^1BC\^1DEF"</span> <span class="at">--extraesc</span></span></code></pre></div>
- <p>Zint can encode a maximum of 102 symbol characters, which allows for
- e.g. 202 all-numeric or 101 all-uppercase characters. Sizes above 120
- digits (60 alphanumerics) are not recommended.</p>
- <h4 id="code-128-suppress-code-set-c-code-sets-a-and-b-only">6.1.10.2
- Code 128 Suppress Code Set C (Code Sets A and B only)</h4>
- <figure>
- <img src="images/code128ab.svg" title="fig:" class="lin"
- alt="zint -b CODE128AB -d "130170X178"" />
- <figcaption
- aria-hidden="true"><code>zint -b CODE128AB -d "130170X178"</code></figcaption>
- </figure>
- <p>It is sometimes advantageous to stop Code 128 from using Code Set C
- which compresses numerical data. The <code>BARCODE_CODE128AB</code><a
- href="#fn14" class="footnote-ref" id="fnref14"
- role="doc-noteref"><sup>14</sup></a> variant (symbology 60) suppresses
- Code Set C in favour of Code Sets A and B.</p>
- <p>Note that the special extra escapes mentioned above are not available
- for this variant (nor for any other).</p>
- <h4 id="gs1-128">6.1.10.3 GS1-128</h4>
- <figure>
- <img src="images/gs1_128.svg" title="fig:" class="lin"
- alt="zint -b GS1_128 --compliantheight -d "[01]98898765432106[3202]012345[15]991231"" />
- <figcaption
- aria-hidden="true"><code>zint -b GS1_128 --compliantheight -d "[01]98898765432106[3202]012345[15]991231"</code></figcaption>
- </figure>
- <p>A variation of Code 128 previously known as UCC/EAN-128, this
- symbology is defined by the GS1 General Specifications. Application
- Identifiers (AIs) should be entered using [square bracket] notation.
- These will be converted to parentheses (round brackets) for the Human
- Readable Text. This will allow round brackets to be used in the data
- strings to be encoded.</p>
- <p>For compatibility with data entry in other systems, if the data does
- not include round brackets, the option <code>--gs1parens</code> (API
- <code>input_mode |= GS1PARENS_MODE</code>) may be used to signal that
- AIs are encased in round brackets instead of square ones.</p>
- <p>Fixed length data should be entered at the appropriate length for
- correct encoding. GS1-128 does not support extended ASCII (ISO/IEC
- 8859-1) characters. Check digits for GTIN data AI (01) are not generated
- and need to be included in the input data. The following is an example
- of a valid GS1-128 input:</p>
- <div class="sourceCode" id="cb102"><pre
- class="sourceCode bash"><code class="sourceCode bash"><span id="cb102-1"><a href="#cb102-1" aria-hidden="true" tabindex="-1"></a><span class="ex">zint</span> <span class="at">-b</span> 16 <span class="at">-d</span> <span class="st">"[01]98898765432106[3202]012345[15]991231"</span></span></code></pre></div>
- <p>or using the <code>--gs1parens</code> option:</p>
- <div class="sourceCode" id="cb103"><pre
- class="sourceCode bash"><code class="sourceCode bash"><span id="cb103-1"><a href="#cb103-1" aria-hidden="true" tabindex="-1"></a><span class="ex">zint</span> <span class="at">-b</span> 16 <span class="at">--gs1parens</span> <span class="at">-d</span> <span class="st">"(01)98898765432106(3202)012345(15)991231"</span></span></code></pre></div>
- <h4 id="ean-14">6.1.10.4 EAN-14</h4>
- <figure>
- <img src="images/ean14.svg" title="fig:" class="lin"
- alt="zint -b EAN14 --compliantheight -d "9889876543210"" />
- <figcaption
- aria-hidden="true"><code>zint -b EAN14 --compliantheight -d "9889876543210"</code></figcaption>
- </figure>
- <p>A shorter version of GS1-128 which encodes GTIN data only. A 13-digit
- number is required. The GTIN check digit and HRT-only AI “(01)” are
- added by Zint.</p>
- <h4 id="nve-18-sscc-18">6.1.10.5 NVE-18 (SSCC-18)</h4>
- <figure>
- <img src="images/nve18.svg" title="fig:" class="lin"
- alt="zint -b NVE18 --compliantheight -d "37612345000001003"" />
- <figcaption
- aria-hidden="true"><code>zint -b NVE18 --compliantheight -d "37612345000001003"</code></figcaption>
- </figure>
- <p>A variation of Code 128 the ‘Nummer der Versandeinheit’ standard,
- also known as SSCC-18 (Serial Shipping Container Code), includes both a
- visible modulo-10 and a hidden modulo-103 check digit. NVE-18 requires a
- 17-digit numerical input. Check digits and HRT-only AI “(00)” are added
- by Zint.</p>
- <h4 id="hibc-code-128">6.1.10.6 HIBC Code 128</h4>
- <figure>
- <img src="images/hibc_128.svg" title="fig:" class="lin"
- alt="zint -b HIBC_128 -d "A123BJC5D6E71"" />
- <figcaption
- aria-hidden="true"><code>zint -b HIBC_128 -d "A123BJC5D6E71"</code></figcaption>
- </figure>
- <p>This option adds a leading <code>'+'</code> character and a trailing
- modulo-49 check digit to a standard Code 128 symbol as required by the
- Health Industry Barcode standards.</p>
- <h4 id="dpd-code">6.1.10.7 DPD Code</h4>
- <figure>
- <img src="images/dpd.svg" title="fig:" class="lin"
- alt="zint -b DPD --compliantheight -d "000393206219912345678101040"" />
- <figcaption
- aria-hidden="true"><code>zint -b DPD --compliantheight -d "000393206219912345678101040"</code></figcaption>
- </figure>
- <p>Another variation of Code 128 as used by DPD (Deutscher Paketdienst).
- Requires a 27 or 28 character input. For 28 character input, the first
- character is an identification tag (Barcode ID), which should usually be
- <code>"%"</code> (ASCII 37). If 27 characters are supplied,
- <code>"%"</code> will be prefixed by Zint (except if marked as a
- “relabel”, see below). The rest of the 27-character input must be
- alphanumeric, and is of the form:</p>
- <div id="tbl:dpd_input_fields" class="tablenos">
- <table id="tbl:dpd_input_fields" data-tag=": DPD Input Fields">
- <caption><span>Table : DPD Input Fields</span> </caption>
- <colgroup>
- <col style="width: 26%" />
- <col style="width: 27%" />
- <col style="width: 16%" />
- <col style="width: 29%" />
- </colgroup>
- <thead>
- <tr>
- <th style="text-align: left;">Destination Post Code</th>
- <th style="text-align: left;">Tracking Number</th>
- <th style="text-align: left;">Service Code</th>
- <th style="text-align: left;">Destination Country Code</th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <td style="text-align: left;">PPPPPPP (7 alphanumerics)</td>
- <td style="text-align: left;">TTTTTTTTTTTTTT (14 alphanumerics)</td>
- <td style="text-align: left;">SSS (3 digits)</td>
- <td style="text-align: left;">CCC (3-digit ISO 3166-1)</td>
- </tr>
- </tbody>
- </table>
- </div>
- <p>A warning will be generated if the Service Code, the Destination
- Country Code, or the last 10 characters of the Tracking Number are
- non-numeric.</p>
- <p>Zint formats the Human Readable Text as specified by DPD, leaving out
- the identication tag, and adds a modulo-36 check character to the text
- (not to the barcode itself), thus:</p>
- <p><code>PPPP PPP TTTT TTTT TTTT TT SSS CCC D</code></p>
- <p>By default a top boundary bar is added, with default width 3X. The
- width can be overridden using <code>--border</code> (API
- <code>border_width</code>). For a symbol with no top boundary bar,
- explicitly set the border type to bindtop (or bind or box) and leave the
- border width 0.</p>
- <p>A DPD Code can be marked as a “relabel” by specifying
- <code>--vers=1</code> (API <code>option_2 = 1</code>), which omits the
- identification tag and prints the barcode at half height. In this case,
- an input of 27 alphanumeric characters is required.</p>
- <h4 id="upu-s10">6.1.10.8 UPU S10</h4>
- <figure>
- <img src="images/upu_s10.svg" title="fig:" class="lin"
- alt="zint -b UPU_S10 --compliantheight -d "EE876543216CA"" />
- <figcaption
- aria-hidden="true"><code>zint -b UPU_S10 --compliantheight -d "EE876543216CA"</code></figcaption>
- </figure>
- <p>The Universal Postal Union S10 variant of Code 128 encodes 13
- characters in the format <code>"SSNNNNNNNNXCC"</code>, where
- <code>"SS"</code> is a two-character alphabetic service indicator,
- <code>"NNNNNNNN"</code> is an 8-digit serial number, <code>"X"</code> is
- a modulo-11 check digit, and <code>"CC"</code> is a two-character ISO
- 3166-1 country code.</p>
- <p>The check digit may be omitted in which case Zint will add it.
- Warnings will be generated if the service indicator is non-standard or
- the country code is not ISO 3361-1.</p>
- <h3 id="gs1-databar-iso-24724">6.1.11 GS1 DataBar (ISO 24724)</h3>
- <p>Previously known as RSS (Reduced Spaced Symbology), these symbols are
- due to replace GS1-128 symbols in accordance with the GS1 General
- Specifications. If a GS1 DataBar symbol is to be printed with a 2D
- component as specified in ISO/IEC 24723 set <code>--mode=2</code> (API
- <code>option_1 = 2</code>). See <a
- href="#gs1-composite-symbols-iso-24723">6.3 GS1 Composite Symbols (ISO
- 24723)</a> to find out how to generate DataBar symbols with 2D
- components.</p>
- <h4 id="gs1-databar-omnidirectional-and-gs1-databar-truncated">6.1.11.1
- GS1 DataBar Omnidirectional and GS1 DataBar Truncated</h4>
- <figure>
- <img src="images/dbar_omn.svg" title="fig:" class="lin"
- alt="zint -b DBAR_OMN --compliantheight -d "0950110153001"" />
- <figcaption
- aria-hidden="true"><code>zint -b DBAR_OMN --compliantheight -d "0950110153001"</code></figcaption>
- </figure>
- <p>Previously known as RSS-14 this standard encodes a 13-digit item
- code. A check digit and HRT-only Application Identifier of “(01)” are
- added by Zint. (A 14-digit code that appends the check digit may be
- given, in which case the check digit will be verified.)</p>
- <p>GS1 DataBar Omnidirectional symbols should have a height of 33 or
- greater. To produce a GS1 DataBar Truncated symbol set the symbol height
- to a value between 13 and 32. Truncated symbols may not be scannable by
- omnidirectional scanners.</p>
- <figure>
- <img src="images/dbar_truncated.svg" title="fig:" class="lin"
- alt="zint -b DBAR_OMN -d "0950110153001" --height=13" />
- <figcaption
- aria-hidden="true"><code>zint -b DBAR_OMN -d "0950110153001" --height=13</code></figcaption>
- </figure>
- <h4 id="gs1-databar-limited">6.1.11.2 GS1 DataBar Limited</h4>
- <figure>
- <img src="images/dbar_ltd.svg" title="fig:" class="lin"
- alt="zint -b DBAR_LTD --compliantheight -d "0950110153001"" />
- <figcaption
- aria-hidden="true"><code>zint -b DBAR_LTD --compliantheight -d "0950110153001"</code></figcaption>
- </figure>
- <p>Previously known as RSS Limited this standard encodes a 13-digit item
- code and can be used in the same way as GS1 DataBar Omnidirectional
- above. GS1 DataBar Limited, however, is limited to data starting with
- digits 0 and 1 (i.e. numbers in the range 0 to 1999999999999). As with
- GS1 DataBar Omnidirectional a check digit and HRT-only Application
- Identifier of “(01)” are added by Zint, and a 14-digit code may be given
- in which case the check digit will be verified.</p>
- <h4 id="gs1-databar-expanded">6.1.11.3 GS1 DataBar Expanded</h4>
- <figure>
- <img src="images/dbar_exp.svg" title="fig:" class="lin"
- alt="zint -b DBAR_EXP --compliantheight -d "[01]98898765432106[3202]012345[15]991231"" />
- <figcaption
- aria-hidden="true"><code>zint -b DBAR_EXP --compliantheight -d "[01]98898765432106[3202]012345[15]991231"</code></figcaption>
- </figure>
- <p>Previously known as RSS Expanded this is a variable length symbology
- capable of encoding data from a number of AIs in a single symbol. AIs
- should be encased in [square brackets] in the input data, which will be
- converted to parentheses (round brackets) before being included in the
- Human Readable Text attached to the symbol. This method allows the
- inclusion of parentheses in the data to be encoded. If the data does not
- include parentheses, the AIs may alternatively be encased in parentheses
- using the <code>--gs1parens</code> switch. See <a
- href="#gs1-128">6.1.10.3 GS1-128</a>.</p>
- <p>GTIN data AI (01) should also include the check digit data as this is
- not calculated by Zint when this symbology is encoded. Fixed length data
- should be entered at the appropriate length for correct encoding. The
- following is an example of a valid GS1 DataBar Expanded input:</p>
- <div class="sourceCode" id="cb104"><pre
- class="sourceCode bash"><code class="sourceCode bash"><span id="cb104-1"><a href="#cb104-1" aria-hidden="true" tabindex="-1"></a><span class="ex">zint</span> <span class="at">-b</span> 31 <span class="at">-d</span> <span class="st">"[01]98898765432106[3202]012345[15]991231"</span></span></code></pre></div>
- <h3 id="korea-post-barcode">6.1.12 Korea Post Barcode</h3>
- <figure>
- <img src="images/koreapost.svg" title="fig:" class="lin"
- alt="zint -b KOREAPOST -d "923457"" />
- <figcaption
- aria-hidden="true"><code>zint -b KOREAPOST -d "923457"</code></figcaption>
- </figure>
- <p>The Korean Postal Barcode is used to encode a 6-digit number and
- includes one check digit.</p>
- <h3 id="channel-code">6.1.13 Channel Code</h3>
- <figure>
- <img src="images/channel.svg" title="fig:" class="lin"
- alt="zint -b CHANNEL -d "453678" --compliantheight" />
- <figcaption
- aria-hidden="true"><code>zint -b CHANNEL -d "453678" --compliantheight</code></figcaption>
- </figure>
- <p>A highly compressed symbol for numeric data. The number of channels
- in the symbol can be between 3 and 8 and this can be specified by
- setting the value of the <code>--vers</code> option (API
- <code>option_2</code>). It can also be determined by the length of the
- input data: e.g. a three character input string generates a 4 channel
- code by default.</p>
- <p>The maximum values permitted depend on the number of channels used as
- shown in the table below:</p>
- <div id="tbl:channel_maxima" class="tablenos">
- <table id="tbl:channel_maxima" data-tag=": Channel Value Ranges">
- <caption><span>Table : Channel Value Ranges</span> </caption>
- <thead>
- <tr>
- <th style="text-align: left;">Channels</th>
- <th style="text-align: left;">Minimum Value</th>
- <th style="text-align: left;">Maximum Value</th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <td style="text-align: left;">3</td>
- <td style="text-align: left;">00</td>
- <td style="text-align: left;">26</td>
- </tr>
- <tr>
- <td style="text-align: left;">4</td>
- <td style="text-align: left;">000</td>
- <td style="text-align: left;">292</td>
- </tr>
- <tr>
- <td style="text-align: left;">5</td>
- <td style="text-align: left;">0000</td>
- <td style="text-align: left;">3493</td>
- </tr>
- <tr>
- <td style="text-align: left;">6</td>
- <td style="text-align: left;">00000</td>
- <td style="text-align: left;">44072</td>
- </tr>
- <tr>
- <td style="text-align: left;">7</td>
- <td style="text-align: left;">000000</td>
- <td style="text-align: left;">576688</td>
- </tr>
- <tr>
- <td style="text-align: left;">8</td>
- <td style="text-align: left;">0000000</td>
- <td style="text-align: left;">7742862</td>
- </tr>
- </tbody>
- </table>
- </div>
- <h3 id="bc412-semi-t1-95">6.1.14 BC412 (SEMI T1-95)</h3>
- <figure>
- <img src="images/bc412.svg" title="fig:" class="lin"
- alt="zint -b BC412 -d "AQ45670" --compliantheight" />
- <figcaption
- aria-hidden="true"><code>zint -b BC412 -d "AQ45670" --compliantheight</code></figcaption>
- </figure>
- <p>Designed by IBM for marking silicon wafers, each BC412 character is
- represented by 4 bars of a single size, interleaved with 4 spaces of
- varying sizes that total 8 (hence 4 bars in 12). Zint implements the
- SEMI T1-95 standard, where input must be alphanumeric, excluding the
- letter <code>O</code>, and must be from 7 to 18 characters in length. A
- single check character is added by Zint, appearing in the 2nd character
- position. Lowercase input is automatically made uppercase.</p>
- <h2 id="stacked-symbologies">6.2 Stacked Symbologies</h2>
- <h3 id="basic-symbol-stacking">6.2.1 Basic Symbol Stacking</h3>
- <p>An early innovation to get more information into a symbol, used
- primarily in the vehicle industry, is to simply stack one-dimensional
- codes on top of each other. This can be achieved at the command prompt
- by giving more than one set of input data. For example</p>
- <div class="sourceCode" id="cb105"><pre
- class="sourceCode bash"><code class="sourceCode bash"><span id="cb105-1"><a href="#cb105-1" aria-hidden="true" tabindex="-1"></a><span class="ex">zint</span> <span class="at">-d</span> <span class="st">"This"</span> <span class="at">-d</span> <span class="st">"That"</span></span></code></pre></div>
- <p>will draw two Code 128 symbols, one on top of the other. The same
- result can be achieved using the API by executing the
- <code>ZBarcode_Encode()</code> function more than once on a symbol. For
- example:</p>
- <div class="sourceCode" id="cb106"><pre
- class="sourceCode c"><code class="sourceCode c"><span id="cb106-1"><a href="#cb106-1" aria-hidden="true" tabindex="-1"></a>my_symbol<span class="op">-></span>symbology <span class="op">=</span> BARCODE_CODE128<span class="op">;</span></span>
- <span id="cb106-2"><a href="#cb106-2" aria-hidden="true" tabindex="-1"></a></span>
- <span id="cb106-3"><a href="#cb106-3" aria-hidden="true" tabindex="-1"></a>error <span class="op">=</span> ZBarcode_Encode<span class="op">(</span>my_symbol<span class="op">,</span> <span class="st">"This"</span><span class="op">,</span> <span class="dv">0</span><span class="op">);</span></span>
- <span id="cb106-4"><a href="#cb106-4" aria-hidden="true" tabindex="-1"></a></span>
- <span id="cb106-5"><a href="#cb106-5" aria-hidden="true" tabindex="-1"></a>error <span class="op">=</span> ZBarcode_Encode<span class="op">(</span>my_symbol<span class="op">,</span> <span class="st">"That"</span><span class="op">,</span> <span class="dv">0</span><span class="op">);</span></span>
- <span id="cb106-6"><a href="#cb106-6" aria-hidden="true" tabindex="-1"></a></span>
- <span id="cb106-7"><a href="#cb106-7" aria-hidden="true" tabindex="-1"></a>error <span class="op">=</span> ZBarcode_Print<span class="op">(</span>my_symbol<span class="op">);</span></span></code></pre></div>
- <figure>
- <img src="images/code128_stacked.svg" title="fig:" class="lin"
- alt="zint -d "This" -d "That"" />
- <figcaption
- aria-hidden="true"><code>zint -d "This" -d "That"</code></figcaption>
- </figure>
- <p>Note that the Human Readable Text will be that of the last data, so
- it’s best to use the option <code>--notext</code> (API
- <code>show_hrt = 0</code>).</p>
- <p>The stacked barcode rows can be separated by row separator bars by
- specifying <code>--bind</code> (API
- <code>output_options |= BARCODE_BIND</code>). The height of the row
- separator bars in integral multiples of the X-dimension (minimum and
- default 1, maximum 4) can be set by <code>--separator</code> (API
- <code>option_3</code>):</p>
- <div class="sourceCode" id="cb107"><pre
- class="sourceCode bash"><code class="sourceCode bash"><span id="cb107-1"><a href="#cb107-1" aria-hidden="true" tabindex="-1"></a><span class="ex">zint</span> <span class="at">--bind</span> <span class="at">--notext</span> <span class="at">--separator</span><span class="op">=</span>2 <span class="at">-d</span> <span class="st">"This"</span> <span class="at">-d</span> <span class="st">"That"</span></span></code></pre></div>
- <figure>
- <img src="images/code128_stacked_sep2.svg" title="fig:" class="lin"
- alt="zint --notext --bind --separator=2 -d "This" -d "That"" />
- <figcaption
- aria-hidden="true"><code>zint --notext --bind --separator=2 -d "This" -d "That"</code></figcaption>
- </figure>
- <p>A more sophisticated method is to use some type of line indexing
- which indicates to the barcode reader which order the stacked symbols
- should be read in. This is demonstrated by the symbologies below.</p>
- <h3 id="codablock-f">6.2.2 Codablock-F</h3>
- <figure>
- <img src="images/codablockf.svg" title="fig:" class="lin"
- alt="zint -b CODABLOCKF -d "CODABLOCK F Symbology" --rows=3" />
- <figcaption
- aria-hidden="true"><code>zint -b CODABLOCKF -d "CODABLOCK F Symbology" --rows=3</code></figcaption>
- </figure>
- <p>This is a stacked symbology based on Code 128 which can encode
- Latin-1 data up to a maximum length of 2726 symbol characters, meaning
- for instance up to 2726 all ASCII characters, or 5452 all numeric, or up
- to 1363 all extended ASCII (ISO/IEC 8859-1).</p>
- <p>The width of the Codablock-F symbol can be set using the
- <code>--cols</code> option (API <code>option_2</code>), to a value
- between 9 and 67. The height (number of rows) can be set using the
- <code>--rows</code> option (API <code>option_1</code>), with a maximum
- of 44. Zint does not currently support encoding of GS1 data in
- Codablock-F symbols.</p>
- <p>A separate symbology ID (<code>BARCODE_HIBC_BLOCKF</code>) can be
- used to encode Health Industry Barcode (HIBC) data which adds a leading
- <code>'+'</code> character and a modulo-49 check digit to the encoded
- data.</p>
- <h3 id="code-16k-en-12323">6.2.3 Code 16K (EN 12323)</h3>
- <figure>
- <img src="images/code16k.svg" title="fig:" class="lin"
- alt="zint -b CODE16K --compliantheight -d "ab0123456789"" />
- <figcaption
- aria-hidden="true"><code>zint -b CODE16K --compliantheight -d "ab0123456789"</code></figcaption>
- </figure>
- <p>Code 16K uses a Code 128 based system which can stack up to 16 rows
- in a block. This gives a maximum data capacity of 77 characters or 154
- numerical digits and includes two modulo-107 check digits. Code 16K also
- supports ISO/IEC 8859-1 character encoding in the same manner as Code
- 128. GS1 data encoding is also supported. The minimum number of rows to
- use can be set using the <code>--rows</code> option (API
- <code>option_1</code>), with values from 2 to 16.</p>
- <h3 id="pdf417-iso-15438">6.2.4 PDF417 (ISO 15438)</h3>
- <figure>
- <img src="images/pdf417.svg" title="fig:" class="lin"
- alt="zint -b PDF417 -d "PDF417"" />
- <figcaption
- aria-hidden="true"><code>zint -b PDF417 -d "PDF417"</code></figcaption>
- </figure>
- <p>Heavily used in the parcel industry, the PDF417 symbology can encode
- a vast amount of data into a small space. Zint supports encoding up to
- the ISO standard maximum symbol size of 925 codewords which (at error
- correction level 0) allows a maximum data size of 1850 text characters,
- or 2710 digits.</p>
- <p>The width of the generated PDF417 symbol can be specified at the
- command line using the <code>--cols</code> switch (API
- <code>option_2</code>) followed by a number between 1 and 30, the number
- of rows using the <code>--rows</code> switch (API <code>option_3</code>)
- followed by a number between 3 and 90, and the amount of error
- correction information can be specified by using the
- <code>--secure</code> switch (API <code>option_1</code>) followed by a
- number between 0 and 8 where the number of codewords used for error
- correction is determined by <code>2^(value + 1)</code>. The default
- level of error correction is determined by the amount of data being
- encoded.</p>
- <p>This symbology uses Latin-1 character encoding by default but also
- supports the ECI encoding mechanism. A separate symbology ID
- (<code>BARCODE_HIBC_PDF</code>) can be used to encode Health Industry
- Barcode (HIBC) data.</p>
- <p>For a faster but less optimal encoding, the <code>--fast</code>
- option (API <code>input_mode |= FAST_MODE</code>) may be used.</p>
- <p>PDF417 supports Structured Append of up to 99,999 symbols and an
- optional numeric ID of up to 30 digits, which can be set by using the
- <code>--structapp</code> option (see <a href="#structured-append">4.17
- Structured Append</a>) (API <code>structapp</code>). The ID consists of
- up to 10 triplets, each ranging from <code>"000"</code> to
- <code>"899"</code>. For instance <code>"123456789"</code> would be a
- valid ID of 3 triplets. However <code>"123456900"</code> would not, as
- the last triplet <code>"900"</code> exceeds <code>"899"</code>. The
- triplets are 0-filled, for instance <code>"1234"</code> becomes
- <code>"123004"</code>. If an ID is not given, no ID is encoded.</p>
- <h3 id="compact-pdf417-iso-15438">6.2.5 Compact PDF417 (ISO 15438)</h3>
- <figure>
- <img src="images/pdf417comp.svg" title="fig:" class="lin"
- alt="zint -b PDF417COMP -d "PDF417"" />
- <figcaption
- aria-hidden="true"><code>zint -b PDF417COMP -d "PDF417"</code></figcaption>
- </figure>
- <p>Previously known as Truncated PDF417, Compact PDF417 omits some
- per-row overhead to produce a narrower but less robust symbol. Options
- are the same as for PDF417 above.</p>
- <h3 id="micropdf417-iso-24728">6.2.6 MicroPDF417 (ISO 24728)</h3>
- <figure>
- <img src="images/micropdf417.svg" title="fig:" class="lin"
- alt="zint -b MICROPDF417 -d "12345678"" />
- <figcaption
- aria-hidden="true"><code>zint -b MICROPDF417 -d "12345678"</code></figcaption>
- </figure>
- <p>A variation of the PDF417 standard, MicroPDF417 is intended for
- applications where symbol size needs to be kept to a minimum. 34
- predefined symbol sizes are available with 1 - 4 columns and 4 - 44
- rows. The maximum amount a MicroPDF417 symbol can hold is 250
- alphanumeric characters or 366 digits. The amount of error correction
- used is dependent on symbol size. The number of columns used can be
- determined using the <code>--cols</code> switch (API
- <code>option_2</code>) as with PDF417.</p>
- <p>This symbology uses Latin-1 character encoding by default but also
- supports the ECI encoding mechanism. A separate symbology ID
- (<code>BARCODE_HIBC_MICPDF</code>) can be used to encode Health Industry
- Barcode (HIBC) data. MicroPDF417 supports <code>FAST_MODE</code> and
- Structured Append the same as PDF417, for which see details.</p>
- <h3 id="gs1-databar-stacked-iso-24724">6.2.7 GS1 DataBar Stacked (ISO
- 24724)</h3>
- <h4 id="gs1-databar-stacked">6.2.7.1 GS1 DataBar Stacked</h4>
- <figure>
- <img src="images/dbar_stk.svg" title="fig:" class="lin"
- alt="zint -b DBAR_STK --compliantheight -d "9889876543210"" />
- <figcaption
- aria-hidden="true"><code>zint -b DBAR_STK --compliantheight -d "9889876543210"</code></figcaption>
- </figure>
- <p>A stacked variation of the GS1 DataBar Truncated symbol requiring the
- same input (see <a
- href="#gs1-databar-omnidirectional-and-gs1-databar-truncated">6.1.11.1
- GS1 DataBar Omnidirectional and GS1 DataBar Truncated</a>), this symbol
- is the same as the following GS1 DataBar Stacked Omnidirectional symbol
- except that its height is reduced and its central separator is a single
- row, making it suitable for small items when omnidirectional scanning is
- not required. It can be generated with a two-dimensional component to
- make a composite symbol.</p>
- <h4 id="gs1-databar-stacked-omnidirectional">6.2.7.2 GS1 DataBar Stacked
- Omnidirectional</h4>
- <figure>
- <img src="images/dbar_omnstk.svg" title="fig:" class="lin"
- alt="zint -b DBAR_OMNSTK --compliantheight -d "9889876543210"" />
- <figcaption
- aria-hidden="true"><code>zint -b DBAR_OMNSTK --compliantheight -d "9889876543210"</code></figcaption>
- </figure>
- <p>A stacked variation of the GS1 DataBar Omnidirectional symbol
- requiring the same input (see <a
- href="#gs1-databar-omnidirectional-and-gs1-databar-truncated">6.1.11.1
- GS1 DataBar Omnidirectional and GS1 DataBar Truncated</a>). The data is
- encoded in two rows of bars with a central 3-row separator. This symbol
- can be generated with a two-dimensional component to make a composite
- symbol.</p>
- <h4 id="gs1-databar-expanded-stacked">6.2.7.3 GS1 DataBar Expanded
- Stacked</h4>
- <figure>
- <img src="images/dbar_expstk.svg" title="fig:" class="lin"
- alt="zint -b DBAR_EXPSTK --compliantheight -d "[01]98898765432106[3202]012345[15]991231"" />
- <figcaption
- aria-hidden="true"><code>zint -b DBAR_EXPSTK --compliantheight -d "[01]98898765432106[3202]012345[15]991231"</code></figcaption>
- </figure>
- <p>A stacked variation of the GS1 DataBar Expanded symbol for smaller
- packages. Input is the same as for GS1 DataBar Expanded (see <a
- href="#gs1-databar-expanded">6.1.11.3 GS1 DataBar Expanded</a>). In
- addition the width of the symbol can be altered using the
- <code>--cols</code> switch (API <code>option_2</code>). In this case the
- number of columns (values 1 to 11) relates to the number of character
- pairs on each row of the symbol. Alternatively the <code>--rows</code>
- switch (API <code>option_3</code>) can be used to specify the maximum
- number of rows (values 2 to 11), and the number of columns will be
- adjusted accordingly. This symbol can be generated with a
- two-dimensional component to make a composite symbol. For symbols with a
- 2D component the number of columns must be at least 2.</p>
- <h3 id="code-49">6.2.8 Code 49</h3>
- <figure>
- <img src="images/code49.svg" title="fig:" class="lin"
- alt="zint -b CODE49 --compliantheight -d "MULTIPLE ROWS IN CODE 49"" />
- <figcaption
- aria-hidden="true"><code>zint -b CODE49 --compliantheight -d "MULTIPLE ROWS IN CODE 49"</code></figcaption>
- </figure>
- <p>Developed in 1987 at Intermec, Code 49 is a cross between UPC and
- Code 39. It is one of the earliest stacked symbologies and influenced
- the design of Code 16K a few years later. It supports full 7-bit ASCII
- input up to a maximum of 49 characters or 81 numeric digits. GS1 data
- encoding is also supported. The minimum number of rows to use can be set
- using the <code>--rows</code> option (API <code>option_1</code>), with
- values from 2 to 8.</p>
- <h2 id="gs1-composite-symbols-iso-24723">6.3 GS1 Composite Symbols (ISO
- 24723)</h2>
- <p>GS1 Composite symbols employ a mixture of components to give more
- comprehensive information about a product. The permissible contents of a
- composite symbol is determined by the terms of the GS1 General
- Specifications. Composite symbols consist of a linear component which
- can be an EAN, UPC, GS1-128 or GS1 DataBar symbol, a two-dimensional
- (2D) component which is based on PDF417 or MicroPDF417, and a separator
- pattern. The type of linear component to be used is determined using the
- <code>-b</code> or <code>--barcode</code> switch (API
- <code>symbology</code>) as with other encoding methods. Valid values are
- shown below.</p>
- <div id="tbl:composite_symbologies" class="tablenos">
- <table id="tbl:composite_symbologies"
- data-tag=": GS1 Composite Symbology Values">
- <caption><span>Table : GS1 Composite Symbology Values</span> </caption>
- <colgroup>
- <col style="width: 11%" />
- <col style="width: 34%" />
- <col style="width: 53%" />
- </colgroup>
- <thead>
- <tr>
- <th style="text-align: left;">Numeric Value</th>
- <th style="text-align: left;">Name</th>
- <th style="text-align: left;">Barcode Name</th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <td style="text-align: left;">130</td>
- <td style="text-align: left;"><code>BARCODE_EANX_CC</code></td>
- <td style="text-align: left;">GS1 Composite Symbol with EAN linear
- component</td>
- </tr>
- <tr>
- <td style="text-align: left;">131</td>
- <td style="text-align: left;"><code>BARCODE_GS1_128_CC</code></td>
- <td style="text-align: left;">GS1 Composite Symbol with GS1-128 linear
- component</td>
- </tr>
- <tr>
- <td style="text-align: left;">132</td>
- <td style="text-align: left;"><code>BARCODE_DBAR_OMN_CC</code></td>
- <td style="text-align: left;">GS1 Composite Symbol with GS1 DataBar
- Omnidirectional linear component</td>
- </tr>
- <tr>
- <td style="text-align: left;">133</td>
- <td style="text-align: left;"><code>BARCODE_DBAR_LTD_CC</code></td>
- <td style="text-align: left;">GS1 Composite Symbol with GS1 DataBar
- Limited linear component</td>
- </tr>
- <tr>
- <td style="text-align: left;">134</td>
- <td style="text-align: left;"><code>BARCODE_DBAR_EXP_CC</code></td>
- <td style="text-align: left;">GS1 Composite Symbol with GS1 DataBar
- Expanded linear component</td>
- </tr>
- <tr>
- <td style="text-align: left;">135</td>
- <td style="text-align: left;"><code>BARCODE_UPCA_CC</code></td>
- <td style="text-align: left;">GS1 Composite Symbol with UPC-A linear
- component</td>
- </tr>
- <tr>
- <td style="text-align: left;">136</td>
- <td style="text-align: left;"><code>BARCODE_UPCE_CC</code></td>
- <td style="text-align: left;">GS1 Composite Symbol with UPC-E linear
- component</td>
- </tr>
- <tr>
- <td style="text-align: left;">137</td>
- <td style="text-align: left;"><code>BARCODE_DBAR_STK_CC</code></td>
- <td style="text-align: left;">GS1 Composite Symbol with GS1 DataBar
- Stacked component</td>
- </tr>
- <tr>
- <td style="text-align: left;">138</td>
- <td style="text-align: left;"><code>BARCODE_DBAR_OMNSTK_CC</code></td>
- <td style="text-align: left;">GS1 Composite Symbol with GS1 DataBar
- Stacked Omnidirectional component</td>
- </tr>
- <tr>
- <td style="text-align: left;">139</td>
- <td style="text-align: left;"><code>BARCODE_DBAR_EXPSTK_CC</code></td>
- <td style="text-align: left;">GS1 Composite Symbol with GS1 DataBar
- Expanded Stacked component</td>
- </tr>
- </tbody>
- </table>
- </div>
- <p>The data to be encoded in the linear component of a composite symbol
- should be entered into a primary string with the data for the 2D
- component being entered in the normal way. To do this at the command
- prompt use the <code>--primary</code> switch (API <code>primary</code>).
- For example:</p>
- <div class="sourceCode" id="cb108"><pre
- class="sourceCode bash"><code class="sourceCode bash"><span id="cb108-1"><a href="#cb108-1" aria-hidden="true" tabindex="-1"></a><span class="ex">zint</span> <span class="at">-b</span> EANX_CC <span class="at">--mode</span><span class="op">=</span>1 <span class="at">--primary</span><span class="op">=</span>331234567890 <span class="at">-d</span> <span class="st">"[99]1234-abcd"</span></span></code></pre></div>
- <p>This creates an EAN-13 linear component with the data
- <code>"331234567890"</code> and a 2D CC-A (see <a
- href="#cc-a">below</a>) component with the data
- <code>"(99)1234-abcd"</code>. The same results can be achieved using the
- API as shown below:</p>
- <div class="sourceCode" id="cb109"><pre
- class="sourceCode c"><code class="sourceCode c"><span id="cb109-1"><a href="#cb109-1" aria-hidden="true" tabindex="-1"></a>my_symbol<span class="op">-></span>symbology <span class="op">=</span> BARCODE_EANX_CC<span class="op">;</span></span>
- <span id="cb109-2"><a href="#cb109-2" aria-hidden="true" tabindex="-1"></a></span>
- <span id="cb109-3"><a href="#cb109-3" aria-hidden="true" tabindex="-1"></a>my_symbol<span class="op">-></span>option_1 <span class="op">=</span> <span class="dv">1</span><span class="op">;</span></span>
- <span id="cb109-4"><a href="#cb109-4" aria-hidden="true" tabindex="-1"></a></span>
- <span id="cb109-5"><a href="#cb109-5" aria-hidden="true" tabindex="-1"></a>strcpy<span class="op">(</span>my_symbol<span class="op">-></span>primary<span class="op">,</span> <span class="st">"331234567890"</span><span class="op">);</span></span>
- <span id="cb109-6"><a href="#cb109-6" aria-hidden="true" tabindex="-1"></a></span>
- <span id="cb109-7"><a href="#cb109-7" aria-hidden="true" tabindex="-1"></a>ZBarcode_Encode_and_Print<span class="op">(</span>my_symbol<span class="op">,</span> <span class="st">"[99]1234-abcd"</span><span class="op">,</span> <span class="dv">0</span><span class="op">,</span> <span class="dv">0</span><span class="op">);</span></span></code></pre></div>
- <p>EAN-2 and EAN-5 add-on data can be used with EAN and UPC symbols
- using the + symbol as described in sections <a
- href="#upc-universal-product-code-iso-15420">6.1.3 UPC (Universal
- Product Code) (ISO 15420)</a> and <a
- href="#ean-european-article-number-iso-15420">6.1.4 EAN (European
- Article Number) (ISO 15420)</a>.</p>
- <p>The 2D component of a composite symbol can use one of three systems:
- CC-A, CC-B and CC-C, as described below. The 2D component type can be
- selected automatically by Zint dependent on the length of the input
- string. Alternatively the three methods can be accessed using the
- <code>--mode</code> prompt (API <code>option_1</code>) followed by 1, 2
- or 3 for CC-A, CC-B or CC-C respectively.</p>
- <h3 id="cc-a">6.3.1 CC-A</h3>
- <figure>
- <img src="images/eanx_cc_a.svg" title="fig:" class="upcean"
- alt="zint -b EANX_CC --compliantheight -d "[99]1234-abcd" --mode=1 --primary=331234567890" />
- <figcaption
- aria-hidden="true"><code>zint -b EANX_CC --compliantheight -d "[99]1234-abcd" --mode=1 --primary=331234567890</code></figcaption>
- </figure>
- <p>This system uses a variation of MicroPDF417 which is optimised to fit
- into a small space. The size of the 2D component and the amount of error
- correction is determined by the amount of data to be encoded and the
- type of linear component which is being used. CC-A can encode up to 56
- numeric digits or an alphanumeric string of shorter length. To select
- CC-A use <code>--mode=1</code> (API <code>option_1 = 1</code>).</p>
- <h3 id="cc-b">6.3.2 CC-B</h3>
- <figure>
- <img src="images/eanx_cc_b.svg" title="fig:" class="upcean"
- alt="zint -b EANX_CC --compliantheight -d "[99]1234-abcd" --mode=2 --primary=331234567890" />
- <figcaption
- aria-hidden="true"><code>zint -b EANX_CC --compliantheight -d "[99]1234-abcd" --mode=2 --primary=331234567890</code></figcaption>
- </figure>
- <p>This system uses MicroPDF417 to encode the 2D component. The size of
- the 2D component and the amount of error correction is determined by the
- amount of data to be encoded and the type of linear component which is
- being used. CC-B can encode up to 338 numeric digits or an alphanumeric
- string of shorter length. To select CC-B use <code>--mode=2</code> (API
- <code>option_1 = 2</code>).</p>
- <h3 id="cc-c">6.3.3 CC-C</h3>
- <figure>
- <img src="images/gs1_128_cc_c.svg" title="fig:" class="upcean"
- alt="zint -b GS1_128_CC --compliantheight -d "[99]1234-abcd" --mode=3 --primary="[01]03312345678903"" />
- <figcaption
- aria-hidden="true"><code>zint -b GS1_128_CC --compliantheight -d "[99]1234-abcd" --mode=3 --primary="[01]03312345678903"</code></figcaption>
- </figure>
- <p>This system uses PDF417 and can only be used in conjunction with a
- GS1-128 linear component. CC-C can encode up to 2361 numeric digits or
- an alphanumeric string of shorter length. To select CC-C use
- <code>--mode=3</code> (API <code>option_1 = 3</code>).</p>
- <h2 id="two-track-symbols">6.4 Two-Track Symbols</h2>
- <h3 id="two-track-pharmacode">6.4.1 Two-Track Pharmacode</h3>
- <figure>
- <img src="images/pharma_two.svg" title="fig:" class="trk"
- alt="zint -b PHARMA_TWO --compliantheight -d "29876543"" />
- <figcaption
- aria-hidden="true"><code>zint -b PHARMA_TWO --compliantheight -d "29876543"</code></figcaption>
- </figure>
- <p>Developed by Laetus, Pharmacode Two-Track is an alternative system to
- Pharmacode One-Track (see <a href="#pharmacode">6.1.9 Pharmacode</a>)
- used for the identification of pharmaceuticals. The symbology is able to
- encode whole numbers between 4 and 64570080.</p>
- <h3 id="postnet">6.4.2 POSTNET</h3>
- <figure>
- <img src="images/postnet.svg" title="fig:" class="trk"
- alt="zint -b POSTNET --compliantheight -d "12345678901"" />
- <figcaption
- aria-hidden="true"><code>zint -b POSTNET --compliantheight -d "12345678901"</code></figcaption>
- </figure>
- <p>Used by the United States Postal Service until 2009, the POSTNET
- barcode was used for encoding zip-codes on mail items. POSTNET uses
- numerical input data and includes a modulo-10 check digit. While Zint
- will encode POSTNET symbols of up to 38 digits in length, standard
- lengths as used by USPS were <code>PostNet6</code> (5-digit ZIP input),
- <code>PostNet10</code> (5-digit ZIP + 4-digit user data) and
- <code>PostNet12</code> (5-digit ZIP + 6-digit user data), and a warning
- will be issued if the input length is not one of these.</p>
- <h3 id="planet">6.4.3 PLANET</h3>
- <figure>
- <img src="images/planet.svg" title="fig:" class="trk"
- alt="zint -b PLANET --compliantheight -d "4012345235636"" />
- <figcaption
- aria-hidden="true"><code>zint -b PLANET --compliantheight -d "4012345235636"</code></figcaption>
- </figure>
- <p>Used by the United States Postal Service until 2009, the PLANET
- (Postal Alpha Numeric Encoding Technique) barcode was used for encoding
- routing data on mail items. PLANET uses numerical input data and
- includes a modulo-10 check digit. While Zint will encode PLANET symbols
- of up to 38 digits in length, standard lengths used by USPS were
- <code>Planet12</code> (11-digit input) and <code>Planet14</code>
- (13-digit input), and as with POSTNET a warning will be issued if the
- length is not one of these.</p>
- <h3 id="brazilian-cepnet">6.4.4 Brazilian CEPNet</h3>
- <figure>
- <img src="images/cepnet.svg" title="fig:" class="trk"
- alt="zint -b CEPNET --compliantheight -d "12345678"" />
- <figcaption
- aria-hidden="true"><code>zint -b CEPNET --compliantheight -d "12345678"</code></figcaption>
- </figure>
- <p>Based on POSTNET, the CEPNet symbol is used by Correios, the
- Brazilian postal service, to encode CEP (Código de Endereçamento Postal)
- numbers on mail items. Input should consist of eight digits with the
- check digit being automatically added by Zint.</p>
- <h3 id="dx-film-edge-barcode">6.4.5 DX Film Edge Barcode</h3>
- <figure>
- <img src="images/dxfilmedge.svg" title="fig:" class="trk"
- alt="zint -b DXFILMEDGE --compliantheight -d "112-1/10A"" />
- <figcaption
- aria-hidden="true"><code>zint -b DXFILMEDGE --compliantheight -d "112-1/10A"</code></figcaption>
- </figure>
- <p>Introduced by Kodak in the 1980s, the DX (Digital Index) barcode is
- printed on the bottom edge of 35mm film to aid in the reordering and
- post-processing of prints.</p>
- <p>The data can be in two parts. The first part (required) is the “DX
- number”, identifying the manufacturer and film type - the National
- Association of Photographic Manufacturers (NAPM) number. The second
- part, which is optional and if present is separated from the first by a
- slash (<code>/</code>), gives the frame number.</p>
- <p>The DX number is in either of two formats. The first format is a
- number of 1 to 4 digits (“DX Extract”) or 6 digits (“DX Full”), but for
- the 6-digit version the first and last digit are ignored, leaving a
- 4-digit DX Extract number in any case, which must be in the range 16 to
- 2047. The second format “NNN-NN” represents the DX Extract as two
- numbers separated by a dash (<code>-</code>), the first number being 1
- to 3 digits (range 1 to 127) and the second 1 to 2 digits (range 0 to
- 15).<a href="#fn15" class="footnote-ref" id="fnref15"
- role="doc-noteref"><sup>15</sup></a></p>
- <p>The optional frame number is a number in the range 0 to 63, and may
- have a half frame indicator “A” appended. Special character sequences
- (with or without a half frame indicator appended) may also be used: “S”
- or “X” means frame number 62, “K” or “00” means frame number 63, and “F”
- means frame number 0.</p>
- <p>A parity bit is automatically added by Zint.</p>
- <h2 id="state-postal-codes">6.5 4-State Postal Codes</h2>
- <h3 id="australia-post-4-state-symbols">6.5.1 Australia Post 4-State
- Symbols</h3>
- <h4 id="customer-barcodes">6.5.1.1 Customer Barcodes</h4>
- <figure>
- <img src="images/auspost.svg" title="fig:" class="trk"
- alt="zint -b AUSPOST --compliantheight -d "96184209"" />
- <figcaption
- aria-hidden="true"><code>zint -b AUSPOST --compliantheight -d "96184209"</code></figcaption>
- </figure>
- <p>Australia Post Standard Customer Barcode, Customer Barcode 2 and
- Customer Barcode 3 are 37-bar, 52-bar and 67-bar specifications
- respectively, developed by Australia Post for printing Delivery Point ID
- (DPID) and customer information on mail items. Valid data characters are
- 0-9, A-Z, a-z, space and hash (#). A Format Control Code (FCC) is added
- by Zint and should not be included in the input data. Reed-Solomon error
- correction data is generated by Zint. Encoding behaviour is determined
- by the length of the input data according to the formula shown in the
- following table.</p>
- <div id="tbl:auspost_input_formats" class="tablenos">
- <table id="tbl:auspost_input_formats" style="width:86%;"
- data-tag=": Australia Post Input Formats">
- <caption><span>Table : Australia Post Input Formats</span> </caption>
- <colgroup>
- <col style="width: 13%" />
- <col style="width: 38%" />
- <col style="width: 12%" />
- <col style="width: 8%" />
- <col style="width: 12%" />
- </colgroup>
- <thead>
- <tr>
- <th style="text-align: left;">Input Length</th>
- <th style="text-align: left;">Required Input Format</th>
- <th>Symbol Length</th>
- <th>FCC</th>
- <th style="text-align: left;">Encoding Table</th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <td style="text-align: left;">8</td>
- <td style="text-align: left;"><code>99999999</code></td>
- <td>37-bar</td>
- <td>11</td>
- <td style="text-align: left;">None</td>
- </tr>
- <tr>
- <td style="text-align: left;">13</td>
- <td style="text-align: left;"><code>99999999AAAAA</code></td>
- <td>52-bar</td>
- <td>59</td>
- <td style="text-align: left;">C</td>
- </tr>
- <tr>
- <td style="text-align: left;">16</td>
- <td style="text-align: left;"><code>9999999999999999</code></td>
- <td>52-bar</td>
- <td>59</td>
- <td style="text-align: left;">N</td>
- </tr>
- <tr>
- <td style="text-align: left;">18</td>
- <td style="text-align: left;"><code>99999999AAAAAAAAAA</code></td>
- <td>67-bar</td>
- <td>62</td>
- <td style="text-align: left;">C</td>
- </tr>
- <tr>
- <td style="text-align: left;">23</td>
- <td style="text-align: left;"><code>99999999999999999999999</code></td>
- <td>67-bar</td>
- <td>62</td>
- <td style="text-align: left;">N</td>
- </tr>
- </tbody>
- </table>
- </div>
- <h4 id="reply-paid-barcode">6.5.1.2 Reply Paid Barcode</h4>
- <figure>
- <img src="images/ausreply.svg" title="fig:" class="trk"
- alt="zint -b AUSREPLY --compliantheight -d "12345678"" />
- <figcaption
- aria-hidden="true"><code>zint -b AUSREPLY --compliantheight -d "12345678"</code></figcaption>
- </figure>
- <p>A Reply Paid version of the Australia Post 4-State Barcode (FCC 45)
- which requires an 8-digit DPID input.</p>
- <h4 id="routing-barcode">6.5.1.3 Routing Barcode</h4>
- <figure>
- <img src="images/ausroute.svg" title="fig:" class="trk"
- alt="zint -b AUSROUTE --compliantheight -d "34567890"" />
- <figcaption
- aria-hidden="true"><code>zint -b AUSROUTE --compliantheight -d "34567890"</code></figcaption>
- </figure>
- <p>A Routing version of the Australia Post 4-State Barcode (FCC 87)
- which requires an 8-digit DPID input.</p>
- <h4 id="redirect-barcode">6.5.1.4 Redirect Barcode</h4>
- <figure>
- <img src="images/ausredirect.svg" title="fig:" class="trk"
- alt="zint -b AUSREDIRECT --compliantheight -d "98765432"" />
- <figcaption
- aria-hidden="true"><code>zint -b AUSREDIRECT --compliantheight -d "98765432"</code></figcaption>
- </figure>
- <p>A Redirection version of the Australia Post 4-State Barcode (FCC 92)
- which requires an 8-digit DPID input.</p>
- <h3 id="dutch-post-kix-code">6.5.2 Dutch Post KIX Code</h3>
- <figure>
- <img src="images/kix.svg" title="fig:" class="trk"
- alt="zint -b KIX --compliantheight -d "2500GG30250"" />
- <figcaption
- aria-hidden="true"><code>zint -b KIX --compliantheight -d "2500GG30250"</code></figcaption>
- </figure>
- <p>This symbology is used by Royal Dutch TPG Post (Netherlands) for
- Postal code and automatic mail sorting. Data input can consist of
- numbers 0-9 and letters A-Z and needs to be 11 characters in length. No
- check digit is included.</p>
- <h3 id="royal-mail-4-state-customer-code-rm4scc">6.5.3 Royal Mail
- 4-State Customer Code (RM4SCC)</h3>
- <figure>
- <img src="images/rm4scc.svg" title="fig:" class="trk"
- alt="zint -b RM4SCC --compliantheight -d "W1J0TR01"" />
- <figcaption
- aria-hidden="true"><code>zint -b RM4SCC --compliantheight -d "W1J0TR01"</code></figcaption>
- </figure>
- <p>The RM4SCC standard is used by the Royal Mail in the UK to encode
- postcode and customer data on mail items. Data input can consist of
- numbers 0-9 and letters A-Z and usually includes delivery postcode
- followed by house number. For example <code>"W1J0TR01"</code> for 1
- Piccadilly Circus in London. Check digit data is generated by Zint.</p>
- <h3 id="royal-mail-4-state-mailmark">6.5.4 Royal Mail 4-State
- Mailmark</h3>
- <figure>
- <img src="images/mailmark_4s.svg" title="fig:" class="trk"
- alt="zint -b MAILMARK_4S --compliantheight -d "1100000000000XY11"" />
- <figcaption
- aria-hidden="true"><code>zint -b MAILMARK_4S --compliantheight -d "1100000000000XY11"</code></figcaption>
- </figure>
- <p>Developed in 2014 as a replacement for RM4SCC this 4-state symbol
- includes Reed- Solomon error correction. Input is a pre-formatted
- alphanumeric string of 22 (for Barcode C) or 26 (for Barcode L)
- characters, producing a symbol with 66 or 78 bars respectively. The
- rules for the input data are complex, as summarized in the following
- table.</p>
- <div id="tbl:mailmark_4s_input_fields" class="tablenos">
- <table id="tbl:mailmark_4s_input_fields" style="width:100%;"
- data-tag=": Royal Mail 4-State Mailmark Input Fields">
- <caption><span>Table : Royal Mail 4-State Mailmark Input Fields</span>
- </caption>
- <colgroup>
- <col style="width: 11%" />
- <col style="width: 11%" />
- <col style="width: 17%" />
- <col style="width: 22%" />
- <col style="width: 13%" />
- <col style="width: 23%" />
- </colgroup>
- <thead>
- <tr>
- <th style="text-align: left;">Format</th>
- <th style="text-align: left;">Version ID</th>
- <th style="text-align: left;">Class</th>
- <th>Supply Chain ID</th>
- <th style="text-align: left;">Item ID</th>
- <th style="text-align: left;">Destination+DPS</th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <td style="text-align: left;">1 digit (0-4)</td>
- <td style="text-align: left;">1 digit (0-3)</td>
- <td style="text-align: left;">1 alphanum. (0-9A-E)</td>
- <td>2 digits (C) or 6 digits (L)</td>
- <td style="text-align: left;">8 digits</td>
- <td style="text-align: left;">9 alphanumerics (1 of 6 patterns)</td>
- </tr>
- </tbody>
- </table>
- </div>
- <p>The 6 Destination+DPS (Destination Post Code plus Delivery Point
- Suffix) patterns are:</p>
- <div id="tbl:mailmark_destination_dps" class="tablenos">
- <table id="tbl:mailmark_destination_dps"
- data-tag=": Royal Mail Mailmark Destination+DPS Patterns">
- <caption><span>Table : Royal Mail Mailmark Destination+DPS
- Patterns:</span> </caption>
- <tbody>
- <tr>
- <td><code>FNFNLLNLS</code></td>
- <td><code>FFNNLLNLS</code></td>
- <td><code>FFNNNLLNL</code></td>
- </tr>
- <tr>
- <td><code>FFNFNLLNL</code></td>
- <td><code>FNNLLNLSS</code></td>
- <td><code>FNNNLLNLS</code></td>
- </tr>
- </tbody>
- </table>
- </div>
- <p>where <code>'F'</code> stands for full alphabetic (A-Z),
- <code>'L'</code> for limited alphabetic (A-Z less
- <code>'CIKMOV'</code>), <code>'N'</code> for numeric (0-9), and
- <code>'S'</code> for space.</p>
- <p>Four of the permitted patterns include a number of trailing space
- characters - these will be appended by Zint if not included in the input
- data.</p>
- <p>For the two-dimensional Data Matrix-based version, see <a
- href="#royal-mail-2d-mailmark-cmdm-data-matrix">6.6.2 Royal Mail 2D
- Mailmark (CMDM) (Data Matrix)</a>.</p>
- <h3 id="usps-intelligent-mail">6.5.5 USPS Intelligent Mail</h3>
- <figure>
- <img src="images/usps_imail.svg" title="fig:" class="trk"
- alt="zint -b USPS_IMAIL --compliantheight -d "01234567094987654321-01234"" />
- <figcaption
- aria-hidden="true"><code>zint -b USPS_IMAIL --compliantheight -d "01234567094987654321-01234"</code></figcaption>
- </figure>
- <p>Also known as the OneCode barcode and used in the U.S. by the United
- States Postal Service (USPS), the Intelligent Mail system replaced the
- POSTNET and PLANET symbologies in 2009. Intelligent Mail is a fixed
- length (65-bar) symbol which combines routing and customer information
- in a single symbol. Input data consists of a 20-digit tracking code,
- followed by a dash (<code>-</code>), followed by a delivery point
- zip-code which can be 0, 5, 9 or 11 digits in length. For example all of
- the following inputs are valid data entries:</p>
- <ul>
- <li><code>"01234567094987654321"</code></li>
- <li><code>"01234567094987654321-01234"</code></li>
- <li><code>"01234567094987654321-012345678"</code></li>
- <li><code>"01234567094987654321-01234567891"</code></li>
- </ul>
- <h3 id="japanese-postal-code">6.5.6 Japanese Postal Code</h3>
- <figure>
- <img src="images/japanpost.svg" title="fig:" class="trk"
- alt="zint -b JAPANPOST --compliantheight -d "15400233-16-4-205"" />
- <figcaption
- aria-hidden="true"><code>zint -b JAPANPOST --compliantheight -d "15400233-16-4-205"</code></figcaption>
- </figure>
- <p>Used for address data on mail items for Japan Post. Accepted values
- are 0-9, A-Z and dash (<code>-</code>). A modulo 19 check digit is added
- by Zint.</p>
- <h3 id="daft-code">6.5.7 DAFT Code</h3>
- <figure>
- <img src="images/daft_rm4scc.svg" title="fig:" class="trk"
- alt="zint -b DAFT -d "AAFDTTDAFADTFTTFFFDATFTADTTFFTDAFAFDTF" --height=8.494 --vers=256" />
- <figcaption
- aria-hidden="true"><code>zint -b DAFT -d "AAFDTTDAFADTFTTFFFDATFTADTTFFTDAFAFDTF" --height=8.494 --vers=256</code></figcaption>
- </figure>
- <p>This is a method for creating 4-state codes where the data encoding
- is provided by an external program. Input data should consist of the
- letters <code>'D'</code>, <code>'A'</code>, <code>'F'</code> and
- <code>'T'</code> where these refer to descender, ascender, full
- (ascender and descender) and tracker (neither ascender nor descender)
- respectively. All other characters are invalid. The ratio of the tracker
- size to full height can be given in thousandths (permille) using the
- <code>--vers</code> option (API <code>option_2</code>). The default
- value is 250 (25%).</p>
- <p>For example the following</p>
- <div class="sourceCode" id="cb110"><pre
- class="sourceCode bash"><code class="sourceCode bash"><span id="cb110-1"><a href="#cb110-1" aria-hidden="true" tabindex="-1"></a><span class="ex">zint</span> <span class="at">-b</span> DAFT <span class="at">-d</span> AAFDTTDAFADTFTTFFFDATFTADTTFFTDAFAFDTF <span class="at">--height</span><span class="op">=</span>8.494 <span class="at">--vers</span><span class="op">=</span>256</span></code></pre></div>
- <p>produces the same barcode (see <a
- href="#royal-mail-4-state-customer-code-rm4scc">6.5.3 Royal Mail 4-State
- Customer Code (RM4SCC)</a>) as</p>
- <div class="sourceCode" id="cb111"><pre
- class="sourceCode bash"><code class="sourceCode bash"><span id="cb111-1"><a href="#cb111-1" aria-hidden="true" tabindex="-1"></a><span class="ex">zint</span> <span class="at">-b</span> RM4SCC <span class="at">--compliantheight</span> <span class="at">-d</span> <span class="st">"W1J0TR01"</span></span></code></pre></div>
- <h2 id="matrix-symbols">6.6 Matrix Symbols</h2>
- <h3 id="data-matrix-iso-16022">6.6.1 Data Matrix (ISO 16022)</h3>
- <figure>
- <img src="images/hibc_dm.svg" title="fig:" class="i2dbig"
- alt="zint -b HIBC_DM -d "/ACMRN123456/V200912190833" --fast --square" />
- <figcaption
- aria-hidden="true"><code>zint -b HIBC_DM -d "/ACMRN123456/V200912190833" --fast --square</code></figcaption>
- </figure>
- <p>Also known as Semacode this symbology was developed in 1989 by Acuity
- CiMatrix in partnership with the U.S. DoD and NASA. The symbol can
- encode a large amount of data in a small area. Data Matrix encodes
- characters in the Latin-1 set by default but also supports encoding in
- other character sets using the ECI mechanism. It can also encode GS1
- data. The size of the generated symbol can be adjusted using the
- <code>--vers</code> option (API <code>option_2</code>) as shown in the
- table below. A separate symbology ID (<code>BARCODE_HIBC_DM</code>) can
- be used to encode Health Industry Barcode (HIBC) data. Note that only
- ECC200 encoding is supported, the older standards have now been removed
- from Zint.</p>
- <div id="tbl:datamatrix_sizes" class="tablenos">
- <table id="tbl:datamatrix_sizes" data-tag=": Data Matrix Sizes">
- <caption><span>Table : Data Matrix Sizes</span> </caption>
- <thead>
- <tr>
- <th>Input</th>
- <th>Symbol Size</th>
- <th></th>
- <th>Input</th>
- <th>Symbol Size</th>
- <th></th>
- <th>Input</th>
- <th>Symbol Size</th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <td>1</td>
- <td>10 x 10</td>
- <td></td>
- <td>11</td>
- <td>36 x 36</td>
- <td></td>
- <td>21</td>
- <td>104 x 104</td>
- </tr>
- <tr>
- <td>2</td>
- <td>12 x 12</td>
- <td></td>
- <td>12</td>
- <td>40 x 40</td>
- <td></td>
- <td>22</td>
- <td>120 x 120</td>
- </tr>
- <tr>
- <td>3</td>
- <td>14 x 14</td>
- <td></td>
- <td>13</td>
- <td>44 x 44</td>
- <td></td>
- <td>23</td>
- <td>132 x 132</td>
- </tr>
- <tr>
- <td>4</td>
- <td>16 x 16</td>
- <td></td>
- <td>14</td>
- <td>48 x 48</td>
- <td></td>
- <td>24</td>
- <td>144 x 144</td>
- </tr>
- <tr>
- <td>5</td>
- <td>18 x 18</td>
- <td></td>
- <td>15</td>
- <td>52 x 52</td>
- <td></td>
- <td>25</td>
- <td>8 x 18</td>
- </tr>
- <tr>
- <td>6</td>
- <td>20 x 20</td>
- <td></td>
- <td>16</td>
- <td>64 x 64</td>
- <td></td>
- <td>26</td>
- <td>8 x 32</td>
- </tr>
- <tr>
- <td>7</td>
- <td>22 x 22</td>
- <td></td>
- <td>17</td>
- <td>72 x 72</td>
- <td></td>
- <td>28</td>
- <td>12 x 26</td>
- </tr>
- <tr>
- <td>8</td>
- <td>24 x 24</td>
- <td></td>
- <td>18</td>
- <td>80 x 80</td>
- <td></td>
- <td>28</td>
- <td>12 x 36</td>
- </tr>
- <tr>
- <td>9</td>
- <td>26 x 26</td>
- <td></td>
- <td>19</td>
- <td>88 x 88</td>
- <td></td>
- <td>29</td>
- <td>16 x 36</td>
- </tr>
- <tr>
- <td>10</td>
- <td>32 x 32</td>
- <td></td>
- <td>20</td>
- <td>96 x 96</td>
- <td></td>
- <td>30</td>
- <td>16 x 48</td>
- </tr>
- </tbody>
- </table>
- </div>
- <p>The largest version 24 (144 x 144) can encode 3116 digits, around
- 2335 alphanumeric characters, or 1555 bytes of data.</p>
- <p>When using automatic symbol sizes you can force Zint to use square
- symbols (versions 1-24) at the command line by using the option
- <code>--square</code> (API <code>option_3 = DM_SQUARE</code>).</p>
- <p>Data Matrix Rectangular Extension (ISO/IEC 21471) codes may be
- generated with the following values as before:</p>
- <div id="tbl:dmre_sizes" class="tablenos">
- <table id="tbl:dmre_sizes" data-tag=": DMRE Sizes">
- <caption><span>Table : DMRE Sizes</span> </caption>
- <thead>
- <tr>
- <th>Input</th>
- <th>Symbol Size</th>
- <th></th>
- <th>Input</th>
- <th>Symbol Size</th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <td>31</td>
- <td>8 x 48</td>
- <td></td>
- <td>40</td>
- <td>20 x 36</td>
- </tr>
- <tr>
- <td>32</td>
- <td>8 x 64</td>
- <td></td>
- <td>41</td>
- <td>20 x 44</td>
- </tr>
- <tr>
- <td>33</td>
- <td>8 x 80</td>
- <td></td>
- <td>42</td>
- <td>20 x 64</td>
- </tr>
- <tr>
- <td>34</td>
- <td>8 x 96</td>
- <td></td>
- <td>43</td>
- <td>22 x 48</td>
- </tr>
- <tr>
- <td>35</td>
- <td>8 x 120</td>
- <td></td>
- <td>44</td>
- <td>24 x 48</td>
- </tr>
- <tr>
- <td>36</td>
- <td>8 x 144</td>
- <td></td>
- <td>45</td>
- <td>24 x 64</td>
- </tr>
- <tr>
- <td>37</td>
- <td>12 x 64</td>
- <td></td>
- <td>46</td>
- <td>26 x 40</td>
- </tr>
- <tr>
- <td>38</td>
- <td>12 x 88</td>
- <td></td>
- <td>47</td>
- <td>26 x 48</td>
- </tr>
- <tr>
- <td>39</td>
- <td>16 x 64</td>
- <td></td>
- <td>48</td>
- <td>26 x 64</td>
- </tr>
- </tbody>
- </table>
- </div>
- <p>DMRE symbol sizes may be activated in automatic size mode using the
- option <code>--dmre</code> (API <code>option_3 = DM_DMRE</code>).</p>
- <p>GS1 data may be encoded using FNC1 (default) or GS (Group Separator,
- ASCII 29) as separator. Use the option <code>--gssep</code> to change to
- GS (API <code>output_options |= GS1_GS_SEPARATOR</code>).</p>
- <p>By default Zint uses a “de facto” codeword placement for symbols of
- size 144 x 144 (version 24). To override this and use the now clarified
- ISO/IEC standard placement, use option <code>--dmiso144</code> (API
- <code>option_3 |= DM_ISO_144</code>).</p>
- <p>For a faster but less optimal encoding, the <code>--fast</code>
- option (API <code>input_mode |= FAST_MODE</code>) may be used.</p>
- <p>Data Matrix supports Structured Append of up to 16 symbols and a
- numeric ID (file identifications), which can be set by using the
- <code>--structapp</code> option (see <a href="#structured-append">4.17
- Structured Append</a>) (API <code>structapp</code>). The ID consists of
- 2 numbers <code>ID1</code> and <code>ID2</code>, each of which can range
- from 1 to 254, and is specified as the single number
- <code>ID1 * 1000 + ID2</code>, so for instance <code>ID1</code>
- <code>"123"</code> and <code>ID2</code> <code>"234"</code> would be
- given as <code>"123234"</code>. Note that both <code>ID1</code> and
- <code>ID2</code> must be non-zero, so e.g. <code>"123000"</code> or
- <code>"000123"</code> would be invalid IDs. If an ID is not given it
- defaults to <code>"001001"</code>.</p>
- <h3 id="royal-mail-2d-mailmark-cmdm-data-matrix">6.6.2 Royal Mail 2D
- Mailmark (CMDM) (Data Matrix)</h3>
- <figure>
- <img src="images/mailmark_2d.svg" title="fig:" class="i2dbig"
- alt="zint -b MAILMARK_2D -d "JGB 01Z999999900000001EC1A1AA1A0SN35TQ" --vers=30" />
- <figcaption
- aria-hidden="true"><code>zint -b MAILMARK_2D -d "JGB 01Z999999900000001EC1A1AA1A0SN35TQ" --vers=30</code></figcaption>
- </figure>
- <p>This variant of Data Matrix, also known as “Complex Mail Data Mark”
- (CMDM), was introduced by Royal Mail along with <a
- href="#royal-mail-4-state-mailmark">6.5.4 Royal Mail 4-State
- Mailmark</a>, and offers space for customer data following an initial
- pre-formatted 45 character section, as summarized below.</p>
- <div id="tbl:mailmark_2d_input_fields" class="tablenos">
- <table id="tbl:mailmark_2d_input_fields"
- data-tag=": Royal Mail 2D Mailmark Input Fields">
- <caption><span>Table : Royal Mail 2D Mailmark Input Fields</span>
- </caption>
- <thead>
- <tr>
- <th style="text-align: left;">Field Name</th>
- <th style="text-align: left;">Length</th>
- <th style="text-align: left;">Values</th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <td style="text-align: left;">UPU Country ID</td>
- <td style="text-align: left;">4</td>
- <td style="text-align: left;"><code>"JGB "</code></td>
- </tr>
- <tr>
- <td style="text-align: left;">Information Type</td>
- <td style="text-align: left;">1</td>
- <td style="text-align: left;">Alphanumeric</td>
- </tr>
- <tr>
- <td style="text-align: left;">Version ID</td>
- <td style="text-align: left;">1</td>
- <td style="text-align: left;"><code>"1"</code></td>
- </tr>
- <tr>
- <td style="text-align: left;">Class</td>
- <td style="text-align: left;">1</td>
- <td style="text-align: left;">Alphanumeric</td>
- </tr>
- <tr>
- <td style="text-align: left;">Supply Chain ID</td>
- <td style="text-align: left;">7</td>
- <td style="text-align: left;">Numeric</td>
- </tr>
- <tr>
- <td style="text-align: left;">Item ID</td>
- <td style="text-align: left;">8</td>
- <td style="text-align: left;">Numeric</td>
- </tr>
- <tr>
- <td style="text-align: left;">Destination+DPS</td>
- <td style="text-align: left;">9</td>
- <td style="text-align: left;">Alphanumeric (1 of 6 patterns)</td>
- </tr>
- <tr>
- <td style="text-align: left;">Service Type</td>
- <td style="text-align: left;">1</td>
- <td style="text-align: left;">Numeric</td>
- </tr>
- <tr>
- <td style="text-align: left;">RTS Post Code</td>
- <td style="text-align: left;">7</td>
- <td style="text-align: left;">Alphanumeric (1 of 6 patterns)</td>
- </tr>
- <tr>
- <td style="text-align: left;">Reserved</td>
- <td style="text-align: left;">6</td>
- <td style="text-align: left;">Spaces</td>
- </tr>
- <tr>
- <td style="text-align: left;">Customer Data</td>
- <td style="text-align: left;">6, 45 or 29</td>
- <td style="text-align: left;">Anything (Latin-1)</td>
- </tr>
- </tbody>
- </table>
- </div>
- <p>The 6 Destination+DPS (Destination Post Code plus Delivery Point
- Suffix) patterns are the same as for the 4-state - see Table <a
- href="#tbl:mailmark_destination_dps">: Royal Mail Mailmark
- Destination+DPS Patterns</a>. The 6 RTS (Return to Sender) Post Code
- patterns are the same also except without the additional DPS
- <code>'NL'</code>, i.e.</p>
- <div id="tbl:mailmark_2d_rts" class="tablenos">
- <table id="tbl:mailmark_2d_rts"
- data-tag=": Royal Mail 2D Mailmark RTS Patterns">
- <caption><span>Table : Royal Mail 2D Mailmark RTS Patterns</span>
- </caption>
- <tbody>
- <tr>
- <td><code>FNFNLLS</code></td>
- <td><code>FFNNLLS</code></td>
- <td><code>FFNNNLL</code></td>
- </tr>
- <tr>
- <td><code>FFNFNLL</code></td>
- <td><code>FNNLLSS</code></td>
- <td><code>FNNNLLS</code></td>
- </tr>
- </tbody>
- </table>
- </div>
- <p>where <code>'F'</code> is full alphabetic (A-Z), <code>'L'</code>
- limited alphabetic (A-Z less <code>'CIKMOV'</code>), <code>'N'</code>
- numeric (0-9), and <code>'S'</code> space.</p>
- <p>Three sizes are defined, one rectangular, with varying maximum
- amounts of optional customer data:</p>
- <div id="tbl:mailmark_2d_sizes" class="tablenos">
- <table id="tbl:mailmark_2d_sizes"
- data-tag=": Royal Mail 2D Mailmark Sizes">
- <caption><span>Table : Royal Mail 2D Mailmark Sizes</span> </caption>
- <thead>
- <tr>
- <th style="text-align: left;">Name</th>
- <th style="text-align: left;">Size</th>
- <th>Customer Data</th>
- <th>Zint Version</th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <td style="text-align: left;">Type 7</td>
- <td style="text-align: left;">24 x 24</td>
- <td>6 characters</td>
- <td>8</td>
- </tr>
- <tr>
- <td style="text-align: left;">Type 9</td>
- <td style="text-align: left;">32 x 32</td>
- <td>45 characters</td>
- <td>10</td>
- </tr>
- <tr>
- <td style="text-align: left;">Type 29</td>
- <td style="text-align: left;">16 x 48</td>
- <td>29 characters</td>
- <td>30</td>
- </tr>
- </tbody>
- </table>
- </div>
- <p>Zint will automatically select a size based on the amount of customer
- data, or it can be specified using the <code>--vers</code> option (API
- <code>option_2</code>), which takes the Zint version number (one more
- than the Royal Mail Type number). Zint will prefix the input data with
- <code>"JGB "</code> if it’s missing, and also space-pad the input if the
- customer data is absent or falls short. As with Data Matrix, the
- rectangular symbol Type 29 can be excluded from automatic size selection
- by using the option <code>--square</code> (API
- <code>option_3 = DM_SQUARE</code>).</p>
- <p>GS1 data, the ECI mechanism, and Structured Append are not
- supported.</p>
- <h3 id="qr-code-iso-18004">6.6.3 QR Code (ISO 18004)</h3>
- <figure>
- <img src="images/qrcode.svg" title="fig:" class="i2dbig"
- alt="zint -b QRCODE -d "QR Code Symbol" --mask=5" />
- <figcaption
- aria-hidden="true"><code>zint -b QRCODE -d "QR Code Symbol" --mask=5</code></figcaption>
- </figure>
- <p>Also known as Quick Response Code this symbology was developed by
- Denso. Four levels of error correction are available using the
- <code>--secure</code> option (API <code>option_1</code>) as shown in the
- following table.</p>
- <div id="tbl:qrcode_eccs" class="tablenos">
- <table id="tbl:qrcode_eccs" data-tag=": QR Code ECC Levels">
- <caption><span>Table : QR Code ECC Levels</span> </caption>
- <thead>
- <tr>
- <th>Input</th>
- <th>ECC Level</th>
- <th>Error Correction Capacity</th>
- <th>Recovery Capacity</th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <td>1</td>
- <td>L</td>
- <td>Approx 20% of symbol</td>
- <td>Approx 7%</td>
- </tr>
- <tr>
- <td>2</td>
- <td>M</td>
- <td>Approx 37% of symbol</td>
- <td>Approx 15%</td>
- </tr>
- <tr>
- <td>3</td>
- <td>Q</td>
- <td>Approx 55% of symbol</td>
- <td>Approx 25%</td>
- </tr>
- <tr>
- <td>4</td>
- <td>H</td>
- <td>Approx 65% of symbol</td>
- <td>Approx 30%</td>
- </tr>
- </tbody>
- </table>
- </div>
- <p>The size of the symbol can be specified by setting the
- <code>--vers</code> option (API <code>option_2</code>) to the QR Code
- version required (1-40). The size of symbol generated is shown in the
- table below.</p>
- <div id="tbl:qrcode_sizes" class="tablenos">
- <table id="tbl:qrcode_sizes" data-tag=": QR Code Sizes">
- <caption><span>Table : QR Code Sizes</span> </caption>
- <thead>
- <tr>
- <th>Input</th>
- <th>Symbol Size</th>
- <th></th>
- <th>Input</th>
- <th>Symbol Size</th>
- <th></th>
- <th>Input</th>
- <th>Symbol Size</th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <td>1</td>
- <td>21 x 21</td>
- <td></td>
- <td>15</td>
- <td>77 x 77</td>
- <td></td>
- <td>29</td>
- <td>133 x 133</td>
- </tr>
- <tr>
- <td>2</td>
- <td>25 x 25</td>
- <td></td>
- <td>16</td>
- <td>81 x 81</td>
- <td></td>
- <td>30</td>
- <td>137 x 137</td>
- </tr>
- <tr>
- <td>3</td>
- <td>29 x 29</td>
- <td></td>
- <td>17</td>
- <td>85 x 85</td>
- <td></td>
- <td>31</td>
- <td>141 x 141</td>
- </tr>
- <tr>
- <td>4</td>
- <td>33 x 33</td>
- <td></td>
- <td>18</td>
- <td>89 x 89</td>
- <td></td>
- <td>32</td>
- <td>145 x 145</td>
- </tr>
- <tr>
- <td>5</td>
- <td>37 x 37</td>
- <td></td>
- <td>19</td>
- <td>93 x 93</td>
- <td></td>
- <td>33</td>
- <td>149 x 149</td>
- </tr>
- <tr>
- <td>6</td>
- <td>41 x 41</td>
- <td></td>
- <td>20</td>
- <td>97 x 97</td>
- <td></td>
- <td>34</td>
- <td>153 x 153</td>
- </tr>
- <tr>
- <td>7</td>
- <td>45 x 45</td>
- <td></td>
- <td>21</td>
- <td>101 x 101</td>
- <td></td>
- <td>35</td>
- <td>157 x 157</td>
- </tr>
- <tr>
- <td>8</td>
- <td>49 x 49</td>
- <td></td>
- <td>22</td>
- <td>105 x 105</td>
- <td></td>
- <td>36</td>
- <td>161 x 161</td>
- </tr>
- <tr>
- <td>9</td>
- <td>53 x 53</td>
- <td></td>
- <td>23</td>
- <td>109 x 109</td>
- <td></td>
- <td>37</td>
- <td>165 x 165</td>
- </tr>
- <tr>
- <td>10</td>
- <td>57 x 57</td>
- <td></td>
- <td>24</td>
- <td>113 x 113</td>
- <td></td>
- <td>38</td>
- <td>169 x 169</td>
- </tr>
- <tr>
- <td>11</td>
- <td>61 x 61</td>
- <td></td>
- <td>25</td>
- <td>117 x 117</td>
- <td></td>
- <td>39</td>
- <td>173 x 173</td>
- </tr>
- <tr>
- <td>12</td>
- <td>65 x 65</td>
- <td></td>
- <td>26</td>
- <td>121 x 121</td>
- <td></td>
- <td>40</td>
- <td>177 x 177</td>
- </tr>
- <tr>
- <td>13</td>
- <td>69 x 69</td>
- <td></td>
- <td>27</td>
- <td>125 x 125</td>
- <td></td>
- <td></td>
- <td></td>
- </tr>
- <tr>
- <td>14</td>
- <td>73 x 73</td>
- <td></td>
- <td>28</td>
- <td>129 x 129</td>
- <td></td>
- <td></td>
- <td></td>
- </tr>
- </tbody>
- </table>
- </div>
- <p>The maximum capacity of a QR Code symbol (version 40) is 7089 numeric
- digits, 4296 alphanumeric characters or 2953 bytes of data. QR Code
- symbols can also be used to encode GS1 data. QR Code symbols can by
- default encode either characters in the Latin-1 set or Kanji, Katakana
- and ASCII characters which are members of the Shift JIS encoding scheme.
- In addition QR Code supports other character sets using the ECI
- mechanism. Input should usually be entered as UTF-8 with conversion to
- Latin-1 or Shift JIS being carried out by Zint. A separate symbology ID
- (<code>BARCODE_HIBC_QR</code>) can be used to encode Health Industry
- Barcode (HIBC) data.</p>
- <p>Non-ASCII data density may be maximized by using the
- <code>--fullmultibyte</code> switch (API
- <code>option_3 = ZINT_FULL_MULTIBYTE</code>), but check that your
- barcode reader supports this before using.</p>
- <p>QR Code has eight different masks designed to minimize unwanted
- patterns. The best mask to use is selected automatically by Zint but may
- be manually specified by using the <code>--mask</code> switch with
- values 0-7, or in the API by setting
- <code>option_3 = (N + 1) << 8</code> where N is 0-7. To use with
- <code>ZINT_FULL_MULTIBYTE</code> set</p>
- <div class="sourceCode" id="cb112"><pre
- class="sourceCode c"><code class="sourceCode c"><span id="cb112-1"><a href="#cb112-1" aria-hidden="true" tabindex="-1"></a>option_3 <span class="op">=</span> ZINT_FULL_MULTIBYTE <span class="op">|</span> <span class="op">(</span>N <span class="op">+</span> <span class="dv">1</span><span class="op">)</span> <span class="op"><<</span> <span class="dv">8</span></span></code></pre></div>
- <p>The <code>--fast</code> option (API
- <code>input_mode |= FAST_MODE</code>) may be used when leaving Zint to
- automatically select a mask to reduce the number of masks to try to four
- (0, 2, 4, 7).</p>
- <p>QR Code supports Structured Append of up to 16 symbols and a numeric
- ID (parity), which can be set by using the <code>--structapp</code>
- option (see <a href="#structured-append">4.17 Structured Append</a>)
- (API <code>structapp</code>). The parity ID ranges from 0 (default) to
- 255, and for full compliance should be set to the value obtained by
- <code>XOR</code>-ing together each byte of the complete data forming the
- sequence. Currently this calculation must be done outside of Zint.</p>
- <h3 id="micro-qr-code-iso-18004">6.6.4 Micro QR Code (ISO 18004)</h3>
- <figure>
- <img src="images/microqr.svg" title="fig:" class="i2dbig"
- alt="zint -b MICROQR -d "01234567"" />
- <figcaption
- aria-hidden="true"><code>zint -b MICROQR -d "01234567"</code></figcaption>
- </figure>
- <p>A miniature version of the QR Code symbol for short messages, Micro
- QR Code symbols can encode either Latin-1 characters or Shift JIS
- characters. Input should be entered as a UTF-8 stream with conversion to
- Latin-1 or Shift JIS being carried out automatically by Zint. A
- preferred symbol size can be selected by using the <code>--vers</code>
- option (API <code>option_2</code>), as shown in the table below. Note
- that versions M1 and M2 have restrictions on what characters can be
- encoded.</p>
- <div id="tbl:micrqr_sizes" class="tablenos">
- <table id="tbl:micrqr_sizes" style="width:93%;"
- data-tag=": Micro QR Code Sizes">
- <caption><span>Table : Micro QR Code Sizes</span> </caption>
- <colgroup>
- <col style="width: 11%" />
- <col style="width: 13%" />
- <col style="width: 19%" />
- <col style="width: 48%" />
- </colgroup>
- <thead>
- <tr>
- <th>Input</th>
- <th>Version</th>
- <th>Symbol Size</th>
- <th style="text-align: left;">Allowed Characters</th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <td>1</td>
- <td>M1</td>
- <td>11 x 11</td>
- <td style="text-align: left;">Numeric only</td>
- </tr>
- <tr>
- <td>2</td>
- <td>M2</td>
- <td>13 x 13</td>
- <td style="text-align: left;">Numeric, uppercase letters, space, and the
- characters <code>"$%*+-./:"</code></td>
- </tr>
- <tr>
- <td>3</td>
- <td>M3</td>
- <td>15 x 15</td>
- <td style="text-align: left;">Latin-1 and Shift JIS</td>
- </tr>
- <tr>
- <td>4</td>
- <td>M4</td>
- <td>17 x 17</td>
- <td style="text-align: left;">Latin-1 and Shift JIS</td>
- </tr>
- </tbody>
- </table>
- </div>
- <p>Version M4 can encode up to 35 digits, 21 alphanumerics, 15 bytes or
- 9 Kanji characters.</p>
- <p>Except for version M1, which is always ECC level L, the amount of ECC
- codewords can be adjusted using the <code>--secure</code> option (API
- <code>option_1</code>); however ECC level H is not available for any
- version, and ECC level Q is only available for version M4:</p>
- <div id="tbl:micrqr_eccs" class="tablenos">
- <table id="tbl:micrqr_eccs" style="width:99%;"
- data-tag=": Micro QR ECC Levels">
- <caption><span>Table : Micro QR ECC Levels</span> </caption>
- <colgroup>
- <col style="width: 12%" />
- <col style="width: 12%" />
- <col style="width: 33%" />
- <col style="width: 19%" />
- <col style="width: 20%" />
- </colgroup>
- <thead>
- <tr>
- <th>Input</th>
- <th style="text-align: left;">ECC Level</th>
- <th style="text-align: left;">Error Correction Capacity</th>
- <th style="text-align: left;">Recovery Capacity</th>
- <th style="text-align: left;">Available for Versions</th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <td>1</td>
- <td style="text-align: left;">L</td>
- <td style="text-align: left;">Approx 20% of symbol</td>
- <td style="text-align: left;">Approx 7%</td>
- <td style="text-align: left;">M1, M2, M3, M4</td>
- </tr>
- <tr>
- <td>2</td>
- <td style="text-align: left;">M</td>
- <td style="text-align: left;">Approx 37% of symbol</td>
- <td style="text-align: left;">Approx 15%</td>
- <td style="text-align: left;">M2, M3, M4</td>
- </tr>
- <tr>
- <td>3</td>
- <td style="text-align: left;">Q</td>
- <td style="text-align: left;">Approx 55% of symbol</td>
- <td style="text-align: left;">Approx 25%</td>
- <td style="text-align: left;">M4</td>
- </tr>
- </tbody>
- </table>
- </div>
- <p>The defaults for symbol size and ECC level depend on the input and
- whether either of them is specified.</p>
- <p>For barcode readers that support it, non-ASCII data density may be
- maximized by using the <code>--fullmultibyte</code> switch (API
- <code>option_3 = ZINT_FULL_MULTIBYTE</code>).</p>
- <p>Micro QR Code has four different masks designed to minimize unwanted
- patterns. The best mask to use is selected automatically by Zint but may
- be manually specified by using the <code>--mask</code> switch with
- values 0-3, or in the API by setting
- <code>option_3 = (N + 1) << 8</code> where N is 0-3. To use with
- <code>ZINT_FULL_MULTIBYTE</code> set</p>
- <div class="sourceCode" id="cb113"><pre
- class="sourceCode c"><code class="sourceCode c"><span id="cb113-1"><a href="#cb113-1" aria-hidden="true" tabindex="-1"></a>option_3 <span class="op">=</span> ZINT_FULL_MULTIBYTE <span class="op">|</span> <span class="op">(</span>N <span class="op">+</span> <span class="dv">1</span><span class="op">)</span> <span class="op"><<</span> <span class="dv">8</span></span></code></pre></div>
- <h3 id="rectangular-micro-qr-code-rmqr-iso-23941">6.6.5 Rectangular
- Micro QR Code (rMQR) (ISO 23941)</h3>
- <figure>
- <img src="images/rmqr.svg" title="fig:" class="i2dbig"
- alt="zint -b RMQR -d "0123456"" />
- <figcaption
- aria-hidden="true"><code>zint -b RMQR -d "0123456"</code></figcaption>
- </figure>
- <p>A rectangular version of QR Code, rMQR supports encoding of GS1 data,
- and either Latin-1 characters or Shift JIS characters, and other
- encodings using the ECI mechanism. As with other symbologies data should
- be entered as UTF-8 with conversion being handled by Zint. The amount of
- ECC codewords can be adjusted using the <code>--secure</code> option
- (API <code>option_1</code>), however only ECC levels M and H are valid
- for this type of symbol.</p>
- <div id="tbl:rmqr_eccs" class="tablenos">
- <table id="tbl:rmqr_eccs" data-tag=": rMQR ECC Levels">
- <caption><span>Table : rMQR ECC Levels</span> </caption>
- <thead>
- <tr>
- <th>Input</th>
- <th>ECC Level</th>
- <th>Error Correction Capacity</th>
- <th>Recovery Capacity</th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <td>2</td>
- <td>M</td>
- <td>Approx 37% of symbol</td>
- <td>Approx 15%</td>
- </tr>
- <tr>
- <td>4</td>
- <td>H</td>
- <td>Approx 65% of symbol</td>
- <td>Approx 30%</td>
- </tr>
- </tbody>
- </table>
- </div>
- <p>The preferred symbol sizes can be selected using the
- <code>--vers</code> option (API <code>option_2</code>) as shown in the
- table below. Input values between 33 and 38 fix the height of the symbol
- while allowing Zint to determine the minimum symbol width.</p>
- <div id="tbl:rmqr_sizes" class="tablenos">
- <table id="tbl:rmqr_sizes" data-tag=": rMQR Sizes">
- <caption><span>Table : rMQR Sizes</span> </caption>
- <colgroup>
- <col style="width: 9%" />
- <col style="width: 12%" />
- <col style="width: 25%" />
- <col style="width: 4%" />
- <col style="width: 9%" />
- <col style="width: 12%" />
- <col style="width: 28%" />
- </colgroup>
- <thead>
- <tr>
- <th>Input</th>
- <th>Version</th>
- <th>Symbol Size (HxW)</th>
- <th></th>
- <th>Input</th>
- <th>Version</th>
- <th style="text-align: left;">Symbol Size (HxW)</th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <td>1</td>
- <td>R7x43</td>
- <td>7 x 43</td>
- <td></td>
- <td>20</td>
- <td>R13x77</td>
- <td style="text-align: left;">13 x 77</td>
- </tr>
- <tr>
- <td>2</td>
- <td>R7x59</td>
- <td>7 x 59</td>
- <td></td>
- <td>21</td>
- <td>R13x99</td>
- <td style="text-align: left;">13 x 99</td>
- </tr>
- <tr>
- <td>3</td>
- <td>R7x77</td>
- <td>7 x 77</td>
- <td></td>
- <td>22</td>
- <td>R13x139</td>
- <td style="text-align: left;">13 x 139</td>
- </tr>
- <tr>
- <td>4</td>
- <td>R7x99</td>
- <td>7 x 99</td>
- <td></td>
- <td>23</td>
- <td>R15x43</td>
- <td style="text-align: left;">15 x 43</td>
- </tr>
- <tr>
- <td>5</td>
- <td>R7x139</td>
- <td>7 x 139</td>
- <td></td>
- <td>24</td>
- <td>R15x59</td>
- <td style="text-align: left;">15 x 59</td>
- </tr>
- <tr>
- <td>6</td>
- <td>R9x43</td>
- <td>9 x 43</td>
- <td></td>
- <td>25</td>
- <td>R15x77</td>
- <td style="text-align: left;">15 x 77</td>
- </tr>
- <tr>
- <td>7</td>
- <td>R9x59</td>
- <td>9 x 59</td>
- <td></td>
- <td>26</td>
- <td>R15x99</td>
- <td style="text-align: left;">15 x 99</td>
- </tr>
- <tr>
- <td>8</td>
- <td>R9x77</td>
- <td>9 x 77</td>
- <td></td>
- <td>27</td>
- <td>R15x139</td>
- <td style="text-align: left;">15 x 139</td>
- </tr>
- <tr>
- <td>9</td>
- <td>R9x99</td>
- <td>9 x 99</td>
- <td></td>
- <td>28</td>
- <td>R17x43</td>
- <td style="text-align: left;">17 x 43</td>
- </tr>
- <tr>
- <td>10</td>
- <td>R9x139</td>
- <td>9 x 139</td>
- <td></td>
- <td>29</td>
- <td>R17x59</td>
- <td style="text-align: left;">17 x 59</td>
- </tr>
- <tr>
- <td>11</td>
- <td>R11x27</td>
- <td>11 x 27</td>
- <td></td>
- <td>30</td>
- <td>R17x77</td>
- <td style="text-align: left;">17 x 77</td>
- </tr>
- <tr>
- <td>12</td>
- <td>R11x43</td>
- <td>11 x 43</td>
- <td></td>
- <td>31</td>
- <td>R17x99</td>
- <td style="text-align: left;">17 x 99</td>
- </tr>
- <tr>
- <td>13</td>
- <td>R11x59</td>
- <td>11 x 59</td>
- <td></td>
- <td>32</td>
- <td>R17x139</td>
- <td style="text-align: left;">17 x 139</td>
- </tr>
- <tr>
- <td>14</td>
- <td>R11x77</td>
- <td>11 x 77</td>
- <td></td>
- <td>33</td>
- <td>R7xW</td>
- <td style="text-align: left;">7 x automatic width</td>
- </tr>
- <tr>
- <td>15</td>
- <td>R11x99</td>
- <td>11 x 99</td>
- <td></td>
- <td>34</td>
- <td>R9xW</td>
- <td style="text-align: left;">9 x automatic width</td>
- </tr>
- <tr>
- <td>16</td>
- <td>R11x139</td>
- <td>11 x 139</td>
- <td></td>
- <td>35</td>
- <td>R11xW</td>
- <td style="text-align: left;">11 x automatic width</td>
- </tr>
- <tr>
- <td>17</td>
- <td>R13x27</td>
- <td>13 x 27</td>
- <td></td>
- <td>36</td>
- <td>R13xW</td>
- <td style="text-align: left;">13 x automatic width</td>
- </tr>
- <tr>
- <td>18</td>
- <td>R13x43</td>
- <td>13 x 43</td>
- <td></td>
- <td>37</td>
- <td>R15xW</td>
- <td style="text-align: left;">15 x automatic width</td>
- </tr>
- <tr>
- <td>19</td>
- <td>R13x59</td>
- <td>13 x 59</td>
- <td></td>
- <td>38</td>
- <td>R17xW</td>
- <td style="text-align: left;">17 x automatic width</td>
- </tr>
- </tbody>
- </table>
- </div>
- <p>The largest version R17x139 (32) can encode up to 361 digits, 219
- alphanumerics, 150 bytes, or 92 Kanji characters.</p>
- <p>For barcode readers that support it, non-ASCII data density may be
- maximized by using the <code>--fullmultibyte</code> switch or in the API
- by setting <code>option_3 = ZINT_FULL_MULTIBYTE</code>.</p>
- <h3 id="upnqr-univerzalnega-plačilnega-naloga-qr">6.6.6 UPNQR
- (Univerzalnega Plačilnega Naloga QR)</h3>
- <figure>
- <img src="images/upnqr.svg" title="fig:" class="i2d"
- alt="zint -b UPNQR -i upn_utf8.txt --quietzones" />
- <figcaption
- aria-hidden="true"><code>zint -b UPNQR -i upn_utf8.txt --quietzones</code></figcaption>
- </figure>
- <p>A variation of QR Code used by Združenje Bank Slovenije (Bank
- Association of Slovenia). The size, error correction level and ECI are
- set by Zint and do not need to be specified. UPNQR is unusual in that it
- uses Latin-2 (ISO/IEC 8859-2 plus ASCII) formatted data. Zint will
- accept UTF-8 data and convert it to Latin-2, or if your data is already
- Latin-2 formatted use the <code>--binary</code> switch (API
- <code>input_mode = DATA_MODE</code>).</p>
- <p>The following example creates a symbol from data saved as a Latin-2
- file:</p>
- <div class="sourceCode" id="cb114"><pre
- class="sourceCode bash"><code class="sourceCode bash"><span id="cb114-1"><a href="#cb114-1" aria-hidden="true" tabindex="-1"></a><span class="ex">zint</span> <span class="at">-o</span> upnqr.png <span class="at">-b</span> 143 <span class="at">--scale</span><span class="op">=</span>3 <span class="at">--binary</span> <span class="at">-i</span> upn.txt</span></code></pre></div>
- <p>A mask may be manually specified or the <code>--fast</code> option
- used as with QRCODE.</p>
- <h3 id="maxicode-iso-16023">6.6.7 MaxiCode (ISO 16023)</h3>
- <figure>
- <img src="images/maxicode.svg" title="fig:" class="i2d"
- alt="zint -b MAXICODE -d "1Z00004951\GUPSN\G06X610\G159\G1234567\G1/1\G\GY\G1 MAIN ST\GNY\GNY\R\E" --esc --primary="152382802000000" --scmvv=96" />
- <figcaption
- aria-hidden="true"><code>zint -b MAXICODE -d "1Z00004951\GUPSN\G06X610\G159\G1234567\G1/1\G\GY\G1 MAIN ST\GNY\GNY\R\E" --esc --primary="152382802000000" --scmvv=96</code></figcaption>
- </figure>
- <p>Developed by UPS the MaxiCode symbology employs a grid of hexagons
- surrounding a bullseye finder pattern. This symbology is designed for
- the identification of parcels. MaxiCode symbols can be encoded in one of
- five modes. In modes 2 and 3 MaxiCode symbols are composed of two parts
- named the primary and secondary messages. The primary message consists
- of a Structured Carrier Message which includes various data about the
- package being sent and the secondary message usually consists of address
- data in a data structure. The format of the primary message required by
- Zint is given in the following table.</p>
- <div id="tbl:maxicode_scm" class="tablenos">
- <table id="tbl:maxicode_scm"
- data-tag=": MaxiCode Structured Carrier Message Format">
- <caption><span>Table : MaxiCode Structured Carrier Message
- Format:</span> </caption>
- <thead>
- <tr>
- <th>Characters</th>
- <th style="text-align: left;">Meaning</th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <td>1 - 9</td>
- <td style="text-align: left;">Postcode data which can consist of up to 9
- digits (for mode 2)</td>
- </tr>
- <tr>
- <td></td>
- <td style="text-align: left;">or up to 6 alphanumeric characters (for
- mode 3). Remaining</td>
- </tr>
- <tr>
- <td></td>
- <td style="text-align: left;">unused characters for mode 3 can be filled
- with the SPACE</td>
- </tr>
- <tr>
- <td></td>
- <td style="text-align: left;">character (ASCII 32) or omitted.</td>
- </tr>
- <tr>
- <td></td>
- <td style="text-align: left;">(adjust the following character positions
- according to postcode</td>
- </tr>
- <tr>
- <td></td>
- <td style="text-align: left;">length)</td>
- </tr>
- <tr>
- <td>10 - 12</td>
- <td style="text-align: left;">Three-digit country code according to ISO
- 3166-1.</td>
- </tr>
- <tr>
- <td>13 - 15</td>
- <td style="text-align: left;">Three-digit service code. This depends on
- your parcel courier.</td>
- </tr>
- </tbody>
- </table>
- </div>
- <p>The primary message can be set at the command prompt using the
- <code>--primary</code> switch (API <code>primary</code>). The secondary
- message uses the normal data entry method. For example:</p>
- <div class="sourceCode" id="cb115"><pre
- class="sourceCode bash"><code class="sourceCode bash"><span id="cb115-1"><a href="#cb115-1" aria-hidden="true" tabindex="-1"></a><span class="ex">zint</span> <span class="at">-o</span> test.eps <span class="at">-b</span> 57 <span class="at">--primary</span><span class="op">=</span><span class="st">"999999999840012"</span> <span class="dt">\</span></span>
- <span id="cb115-2"><a href="#cb115-2" aria-hidden="true" tabindex="-1"></a> <span class="at">-d</span> <span class="st">"Secondary Message Here"</span></span></code></pre></div>
- <p>When using the API the primary message must be placed in the
- <code>primary</code> string. The secondary is entered in the same way as
- described in <a href="#encoding-and-saving-to-file">5.2 Encoding and
- Saving to File</a>. When either of these modes is selected Zint will
- analyse the primary message and select either mode 2 or mode 3 as
- appropriate.</p>
- <p>As a convenience the secondary message for modes 2 and 3 can be set
- to be prefixed by the ISO/IEC 15434 Format <code>"01"</code>
- (transportation) sequence <code>"[)>\R01\Gvv"</code>, where
- <code>vv</code> is a 2-digit version, by using the <code>--scmvv</code>
- switch (API <code>option_2 = vv + 1</code>). For example to use the
- common version <code>"96"</code> (ASC MH10/SC 8):</p>
- <div class="sourceCode" id="cb116"><pre
- class="sourceCode bash"><code class="sourceCode bash"><span id="cb116-1"><a href="#cb116-1" aria-hidden="true" tabindex="-1"></a><span class="ex">zint</span> <span class="at">-b</span> 57 <span class="at">--primary</span><span class="op">=</span><span class="st">"152382802840001"</span> <span class="at">--scmvv</span><span class="op">=</span>96 <span class="at">--esc</span> <span class="at">-d</span> <span class="dt">\</span></span>
- <span id="cb116-2"><a href="#cb116-2" aria-hidden="true" tabindex="-1"></a> <span class="st">"1Z00004951\GUPSN\G06X610\G159\G1234567\G1/1\G\GY\G1 MAIN ST\GNY\GNY\R\E"</span></span></code></pre></div>
- <p>will prefix <code>"[)>\R01\G96"</code> to the secondary message.
- (<code>\R</code>, <code>\G</code> and <code>\E</code> are the escape
- sequences for Record Separator, Group Separator and End of Transmission
- respectively - see Table <a href="#tbl:escape_sequences">: Escape
- Sequences</a>.)</p>
- <p>Modes 4 to 6 can be accessed using the <code>--mode</code> switch
- (API <code>option_1</code>). Modes 4 to 6 do not have a primary message.
- For example:</p>
- <div class="sourceCode" id="cb117"><pre
- class="sourceCode bash"><code class="sourceCode bash"><span id="cb117-1"><a href="#cb117-1" aria-hidden="true" tabindex="-1"></a><span class="ex">zint</span> <span class="at">-o</span> test.eps <span class="at">-b</span> 57 <span class="at">--mode</span><span class="op">=</span>4 <span class="at">-d</span> <span class="st">"A MaxiCode Message in Mode 4"</span></span></code></pre></div>
- <p>Mode 6 is reserved for the maintenance of scanner hardware and should
- not be used to encode user data.</p>
- <p>This symbology uses Latin-1 character encoding by default but also
- supports the ECI encoding mechanism. The maximum length of text which
- can be placed in a MaxiCode symbol depends on the type of characters
- used in the text.</p>
- <p>Example maximum data lengths are given in the table below:</p>
- <div id="tbl:maxicode_data_length_maxima" class="tablenos">
- <table id="tbl:maxicode_data_length_maxima" style="width:100%;"
- data-tag=": MaxiCode Data Length Maxima">
- <caption><span>Table : MaxiCode Data Length Maxima</span> </caption>
- <colgroup>
- <col style="width: 9%" />
- <col style="width: 30%" />
- <col style="width: 30%" />
- <col style="width: 30%" />
- </colgroup>
- <thead>
- <tr>
- <th>Mode</th>
- <th>Maximum Data Length for Capital Letters</th>
- <th style="text-align: left;">Maximum Data Length for Numeric
- Digits</th>
- <th style="text-align: left;">Number of Error Correction Codewords</th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <td>2<code>*</code></td>
- <td>84</td>
- <td style="text-align: left;">126</td>
- <td style="text-align: left;">50</td>
- </tr>
- <tr>
- <td>3<code>*</code></td>
- <td>84</td>
- <td style="text-align: left;">126</td>
- <td style="text-align: left;">50</td>
- </tr>
- <tr>
- <td>4</td>
- <td>93</td>
- <td style="text-align: left;">138</td>
- <td style="text-align: left;">50</td>
- </tr>
- <tr>
- <td>5</td>
- <td>77</td>
- <td style="text-align: left;">113</td>
- <td style="text-align: left;">66</td>
- </tr>
- <tr>
- <td>6</td>
- <td>93</td>
- <td style="text-align: left;">138</td>
- <td style="text-align: left;">50</td>
- </tr>
- </tbody>
- </table>
- </div>
- <p><code>*</code> - secondary only</p>
- <p>MaxiCode supports Structured Append of up to 8 symbols, which can be
- set by using the <code>--structapp</code> option (see <a
- href="#structured-append">4.17 Structured Append</a>) (API
- <code>structapp</code>). It does not support specifying an ID.</p>
- <p>MaxiCode uses a different scaling than other symbols for raster
- output, see <a href="#maxicode-raster-scaling">4.9.3 MaxiCode Raster
- Scaling</a>, and also for EMF vector output, when the scale is
- multiplied by 20 instead of 2.</p>
- <h3 id="aztec-code-iso-24778">6.6.8 Aztec Code (ISO 24778)</h3>
- <figure>
- <img src="images/aztec.svg" title="fig:" class="i2d"
- alt="zint -b AZTEC -d "123456789012"" />
- <figcaption
- aria-hidden="true"><code>zint -b AZTEC -d "123456789012"</code></figcaption>
- </figure>
- <p>Invented by Andrew Longacre at Welch Allyn Inc in 1995 the Aztec Code
- symbol is a matrix symbol with a distinctive bullseye finder pattern.
- Zint can generate Compact Aztec Code (sometimes called Small Aztec Code)
- as well as ‘full-range’ Aztec Code symbols and by default will
- automatically select symbol type and size dependent on the length of the
- data to be encoded. Error correction codewords will normally be
- generated to fill at least 23% of the symbol. Two options are available
- to change this behaviour:</p>
- <p>The size of the symbol can be specified using the <code>--vers</code>
- option (API <code>option_2</code>) to a value between 1 and 36 according
- to the following table. The symbols marked with an asterisk
- (<code>*</code>) in the table below are ‘compact’ symbols, meaning they
- have a smaller bullseye pattern at the centre of the symbol.</p>
- <div id="tbl:aztec_sizes" class="tablenos">
- <table id="tbl:aztec_sizes" data-tag=": Aztec Code Sizes">
- <caption><span>Table : Aztec Code Sizes</span> </caption>
- <thead>
- <tr>
- <th>Input</th>
- <th>Symbol Size</th>
- <th></th>
- <th>Input</th>
- <th>Symbol Size</th>
- <th></th>
- <th>Input</th>
- <th>Symbol Size</th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <td>1</td>
- <td>15 x 15<code>*</code></td>
- <td></td>
- <td>13</td>
- <td>53 x 53</td>
- <td></td>
- <td>25</td>
- <td>105 x 105</td>
- </tr>
- <tr>
- <td>2</td>
- <td>19 x 19<code>*</code></td>
- <td></td>
- <td>14</td>
- <td>57 x 57</td>
- <td></td>
- <td>26</td>
- <td>109 x 109</td>
- </tr>
- <tr>
- <td>3</td>
- <td>23 x 23<code>*</code></td>
- <td></td>
- <td>15</td>
- <td>61 x 61</td>
- <td></td>
- <td>27</td>
- <td>113 x 113</td>
- </tr>
- <tr>
- <td>4</td>
- <td>27 x 27<code>*</code></td>
- <td></td>
- <td>16</td>
- <td>67 x 67</td>
- <td></td>
- <td>28</td>
- <td>117 x 117</td>
- </tr>
- <tr>
- <td>5</td>
- <td>19 x 19</td>
- <td></td>
- <td>17</td>
- <td>71 x 71</td>
- <td></td>
- <td>29</td>
- <td>121 x 121</td>
- </tr>
- <tr>
- <td>6</td>
- <td>23 x 23</td>
- <td></td>
- <td>18</td>
- <td>75 x 75</td>
- <td></td>
- <td>30</td>
- <td>125 x 125</td>
- </tr>
- <tr>
- <td>7</td>
- <td>27 x 27</td>
- <td></td>
- <td>19</td>
- <td>79 x 79</td>
- <td></td>
- <td>31</td>
- <td>131 x 131</td>
- </tr>
- <tr>
- <td>8</td>
- <td>31 x 31</td>
- <td></td>
- <td>20</td>
- <td>83 x 83</td>
- <td></td>
- <td>32</td>
- <td>135 x 135</td>
- </tr>
- <tr>
- <td>9</td>
- <td>37 x 37</td>
- <td></td>
- <td>21</td>
- <td>87 x 87</td>
- <td></td>
- <td>33</td>
- <td>139 x 139</td>
- </tr>
- <tr>
- <td>10</td>
- <td>41 x 41</td>
- <td></td>
- <td>22</td>
- <td>91 x 91</td>
- <td></td>
- <td>34</td>
- <td>143 x 143</td>
- </tr>
- <tr>
- <td>11</td>
- <td>45 x 45</td>
- <td></td>
- <td>23</td>
- <td>95 x 95</td>
- <td></td>
- <td>35</td>
- <td>147 x 147</td>
- </tr>
- <tr>
- <td>12</td>
- <td>49 x 49</td>
- <td></td>
- <td>24</td>
- <td>101 x 101</td>
- <td></td>
- <td>36</td>
- <td>151 x 151</td>
- </tr>
- </tbody>
- </table>
- </div>
- <p>Note that in symbols which have a specified size the amount of error
- correction is dependent on the length of the data input and Zint will
- allow error correction capacities as low as 3 codewords.</p>
- <p>Alternatively the amount of error correction data can be specified by
- setting the <code>--secure</code> option (API <code>option_1</code>) to
- a value from the following table.</p>
- <div id="tbl:aztec_eccs" class="tablenos">
- <table id="tbl:aztec_eccs"
- data-tag=": Aztec Code Error Correction Modes">
- <caption><span>Table : Aztec Code Error Correction Modes</span>
- </caption>
- <thead>
- <tr>
- <th>Mode</th>
- <th>Error Correction Capacity</th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <td>1</td>
- <td>>10% + 3 codewords</td>
- </tr>
- <tr>
- <td>2</td>
- <td>>23% + 3 codewords</td>
- </tr>
- <tr>
- <td>3</td>
- <td>>36% + 3 codewords</td>
- </tr>
- <tr>
- <td>4</td>
- <td>>50% + 3 codewords</td>
- </tr>
- </tbody>
- </table>
- </div>
- <p>It is not possible to select both symbol size and error correction
- capacity for the same symbol. If both options are selected then the
- error correction capacity selection will be ignored.</p>
- <p>Aztec Code supports ECI encoding and can encode up to a maximum
- length of approximately 3823 numeric or 3067 alphabetic characters or
- 1914 bytes of data. A separate symbology ID
- (<code>BARCODE_HIBC_AZTEC</code>) can be used to encode Health Industry
- Barcode (HIBC) data.</p>
- <p>Aztec Code supports Structured Append of up to 26 symbols and an
- optional alphanumeric ID of up to 32 characters, which can be set by
- using the <code>--structapp</code> option (see <a
- href="#structured-append">4.17 Structured Append</a>) (API
- <code>structapp</code>). The ID cannot contain spaces. If an ID is not
- given, no ID is encoded.</p>
- <h3 id="aztec-runes-iso-24778">6.6.9 Aztec Runes (ISO 24778)</h3>
- <figure>
- <img src="images/azrune.svg" title="fig:" class="i2d"
- alt="zint -b AZRUNE -d "125"" />
- <figcaption
- aria-hidden="true"><code>zint -b AZRUNE -d "125"</code></figcaption>
- </figure>
- <p>A truncated version of compact Aztec Code for encoding whole integers
- between 0 and 255, as defined in ISO/IEC 24778 Annex A. Includes
- Reed-Solomon error correction. It does not support Structured
- Append.</p>
- <h3 id="code-one">6.6.10 Code One</h3>
- <figure>
- <img src="images/codeone.svg" title="fig:" class="i2d"
- alt="zint -b CODEONE -d "1234567890123456789012"" />
- <figcaption
- aria-hidden="true"><code>zint -b CODEONE -d "1234567890123456789012"</code></figcaption>
- </figure>
- <p>A matrix symbology developed by Ted Williams in 1992 which encodes
- data in a way similar to Data Matrix, Code One is able to encode the
- Latin-1 character set or GS1 data, and also supports the ECI mechanism.
- There are two types of Code One symbol - fixed-ratio symbols which are
- roughly square (versions A through to H) and variable-width versions
- (versions S and T). These can be selected by using <code>--vers</code>
- (API <code>option_2</code>) as shown in the table below:</p>
- <div id="tbl:codeone_sizes" class="tablenos">
- <table id="tbl:codeone_sizes" style="width:88%;"
- data-tag=": Code One Sizes">
- <caption><span>Table : Code One Sizes</span> </caption>
- <colgroup>
- <col style="width: 11%" />
- <col style="width: 13%" />
- <col style="width: 18%" />
- <col style="width: 22%" />
- <col style="width: 22%" />
- </colgroup>
- <thead>
- <tr>
- <th>Input</th>
- <th>Version</th>
- <th style="text-align: left;">Size (W x H)</th>
- <th style="text-align: left;">Numeric Data Capacity</th>
- <th style="text-align: left;">Alphanumeric Data Capacity</th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <td>1</td>
- <td>A</td>
- <td style="text-align: left;">16 x 18</td>
- <td style="text-align: left;">22</td>
- <td style="text-align: left;">13</td>
- </tr>
- <tr>
- <td>2</td>
- <td>B</td>
- <td style="text-align: left;">22 x 22</td>
- <td style="text-align: left;">44</td>
- <td style="text-align: left;">27</td>
- </tr>
- <tr>
- <td>3</td>
- <td>C</td>
- <td style="text-align: left;">28 x 28</td>
- <td style="text-align: left;">104</td>
- <td style="text-align: left;">64</td>
- </tr>
- <tr>
- <td>4</td>
- <td>D</td>
- <td style="text-align: left;">40 x 42</td>
- <td style="text-align: left;">217</td>
- <td style="text-align: left;">135</td>
- </tr>
- <tr>
- <td>5</td>
- <td>E</td>
- <td style="text-align: left;">52 x 54</td>
- <td style="text-align: left;">435</td>
- <td style="text-align: left;">271</td>
- </tr>
- <tr>
- <td>6</td>
- <td>F</td>
- <td style="text-align: left;">70 x 76</td>
- <td style="text-align: left;">886</td>
- <td style="text-align: left;">553</td>
- </tr>
- <tr>
- <td>7</td>
- <td>G</td>
- <td style="text-align: left;">104 x 98</td>
- <td style="text-align: left;">1755</td>
- <td style="text-align: left;">1096</td>
- </tr>
- <tr>
- <td>8</td>
- <td>H</td>
- <td style="text-align: left;">148 x 134</td>
- <td style="text-align: left;">3550</td>
- <td style="text-align: left;">2218</td>
- </tr>
- <tr>
- <td>9</td>
- <td>S</td>
- <td style="text-align: left;">width x 8</td>
- <td style="text-align: left;">18</td>
- <td style="text-align: left;">N/A</td>
- </tr>
- <tr>
- <td>10</td>
- <td>T</td>
- <td style="text-align: left;">width x 16</td>
- <td style="text-align: left;">90</td>
- <td style="text-align: left;">55</td>
- </tr>
- </tbody>
- </table>
- </div>
- <p>Version S symbols can only encode numeric data. The width of version
- S and version T symbols is determined by the length of the input
- data.</p>
- <p>Code One supports Structured Append of up to 128 symbols, which can
- be set by using the <code>--structapp</code> option (see <a
- href="#structured-append">4.17 Structured Append</a>) (API
- <code>structapp</code>). It does not support specifying an ID.
- Structured Append is not supported with GS1 data nor for Version S
- symbols.</p>
- <h3 id="grid-matrix">6.6.11 Grid Matrix</h3>
- <figure>
- <img src="images/gridmatrix.svg" title="fig:" class="i2d"
- alt="zint -b GRIDMATRIX --eci=29 -d "AAT2556 电池充电器+降压转换器 200mA至2A tel:86 019 82512738"" />
- <figcaption
- aria-hidden="true"><code>zint -b GRIDMATRIX --eci=29 -d "AAT2556 电池充电器+降压转换器 200mA至2A tel:86 019 82512738"</code></figcaption>
- </figure>
- <p>Grid Matrix groups modules in a chequerboard pattern, and by default
- supports the GB 2312 standard set, which includes Hanzi, ASCII and a
- small number of ISO/IEC 8859-1 characters. Input should be entered as
- UTF-8 with conversion to GB 2312 being carried out automatically by
- Zint. Up to around 1529 alphanumeric characters or 2751 digits may be
- encoded. The symbology also supports the ECI mechanism. Support for GS1
- data has not yet been implemented.</p>
- <p>The size of the symbol and the error correction capacity can be
- specified. If you specify both of these values then Zint will make a
- ‘best-fit’ attempt to satisfy both conditions. The symbol size can be
- specified using the <code>--vers</code> option (API
- <code>option_2</code>), and the error correction capacity can be
- specified by using the <code>--secure</code> option (API
- <code>option_1</code>), according to the following tables.</p>
- <div id="tbl:gridmatrix_sizes" class="tablenos">
- <table id="tbl:gridmatrix_sizes" data-tag=": Grid Matrix Sizes">
- <caption><span>Table : Grid Matrix Sizes</span> </caption>
- <thead>
- <tr>
- <th>Input</th>
- <th>Symbol Size</th>
- <th></th>
- <th>Input</th>
- <th>Symbol Size</th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <td>1</td>
- <td>18 x 18</td>
- <td></td>
- <td>8</td>
- <td>102 x 102</td>
- </tr>
- <tr>
- <td>2</td>
- <td>30 x 30</td>
- <td></td>
- <td>9</td>
- <td>114 x 114</td>
- </tr>
- <tr>
- <td>3</td>
- <td>42 x 42</td>
- <td></td>
- <td>10</td>
- <td>126 x 126</td>
- </tr>
- <tr>
- <td>4</td>
- <td>54 x 54</td>
- <td></td>
- <td>11</td>
- <td>138 x 138</td>
- </tr>
- <tr>
- <td>5</td>
- <td>66 x 66</td>
- <td></td>
- <td>12</td>
- <td>150 x 150</td>
- </tr>
- <tr>
- <td>6</td>
- <td>78 x 78</td>
- <td></td>
- <td>13</td>
- <td>162 x 162</td>
- </tr>
- <tr>
- <td>7</td>
- <td>90 x 90</td>
- <td></td>
- <td></td>
- <td></td>
- </tr>
- </tbody>
- </table>
- </div>
- <div id="tbl:gridmatrix_eccs" class="tablenos">
- <table id="tbl:gridmatrix_eccs"
- data-tag=": Grid Matrix Error Correction Modes">
- <caption><span>Table : Grid Matrix Error Correction Modes</span>
- </caption>
- <thead>
- <tr>
- <th>Mode</th>
- <th>Error Correction Capacity</th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <td>1</td>
- <td>Approximately 10%</td>
- </tr>
- <tr>
- <td>2</td>
- <td>Approximately 20%</td>
- </tr>
- <tr>
- <td>3</td>
- <td>Approximately 30%</td>
- </tr>
- <tr>
- <td>4</td>
- <td>Approximately 40%</td>
- </tr>
- <tr>
- <td>5</td>
- <td>Approximately 50%</td>
- </tr>
- </tbody>
- </table>
- </div>
- <p>Non-ASCII data density may be maximized by using the
- <code>--fullmultibyte</code> switch (API
- <code>option_3 = ZINT_FULL_MULTIBYTE</code>), but check that your
- barcode reader supports this before using.</p>
- <p>Grid Matrix supports Structured Append of up to 16 symbols and a
- numeric ID (file signature), which can be set by using the
- <code>--structapp</code> option (see <a href="#structured-append">4.17
- Structured Append</a>) (API <code>structapp</code>). The ID ranges from
- 0 (default) to 255.</p>
- <h3 id="dotcode">6.6.12 DotCode</h3>
- <figure>
- <img src="images/dotcode.svg" title="fig:" class="i2d"
- alt="zint -b DOTCODE -d "[01]00012345678905[17]201231[10]ABC123456" --gs1" />
- <figcaption
- aria-hidden="true"><code>zint -b DOTCODE -d "[01]00012345678905[17]201231[10]ABC123456" --gs1</code></figcaption>
- </figure>
- <p>DotCode uses a grid of dots in a rectangular formation to encode
- characters up to a maximum of approximately 450 characters (or 900
- numeric digits). The symbology supports ECI encoding and GS1 data
- encoding. By default Zint will produce a symbol which is approximately
- square, however the width of the symbol can be adjusted by using the
- <code>--cols</code> option (API <code>option_2</code>) (maximum 200).
- Outputting DotCode to raster images (BMP, GIF, PCX, PNG, TIF) will
- require setting the scale of the image to a larger value than the
- default (e.g. approximately 10) for the dots to be plotted correctly.
- Approximately 33% of the resulting symbol is comprised of error
- correction codewords.</p>
- <p>DotCode has two sets of 4 masks, designated 0-3 and 0’-3’, the second
- <code>"prime"</code> set being the same as the first with corners lit.
- The best mask to use is selected automatically by Zint but may be
- manually specified by using the <code>--mask</code> switch with values
- 0-7, where 4-7 denote 0’-3’, or in the API by setting
- <code>option_3 = (N + 1) << 8</code> where N is 0-7.</p>
- <p>DotCode supports Structured Append of up to 35 symbols, which can be
- set by using the <code>--structapp</code> option (see <a
- href="#structured-append">4.17 Structured Append</a>) (API
- <code>structapp</code>). It does not support specifying an ID.</p>
- <h3 id="han-xin-code-iso-20830">6.6.13 Han Xin Code (ISO 20830)</h3>
- <figure>
- <img src="images/hanxin.svg" title="fig:" class="i2d"
- alt="zint -b HANXIN -d "Hanxin Code symbol"" />
- <figcaption
- aria-hidden="true"><code>zint -b HANXIN -d "Hanxin Code symbol"</code></figcaption>
- </figure>
- <p>Also known as Chinese Sensible Code, Han Xin is capable of encoding
- characters in either the Latin-1 character set or the GB 18030 character
- set (which is a UTF, i.e. includes all Unicode characters, optimized for
- Chinese characters) and is also able to support the ECI mechanism.
- Support for the encoding of GS1 data has not yet been implemented.</p>
- <p>The size of the symbol can be specified using the <code>--vers</code>
- option (API <code>option_2</code>) to a value between 1 and 84 according
- to the following table.</p>
- <div id="tbl:hanxin_sizes" class="tablenos">
- <table id="tbl:hanxin_sizes" data-tag=": Han Xin Sizes">
- <caption><span>Table : Han Xin Sizes</span> </caption>
- <thead>
- <tr>
- <th>Input</th>
- <th>Symbol Size</th>
- <th></th>
- <th>Input</th>
- <th>Symbol Size</th>
- <th></th>
- <th>Input</th>
- <th>Symbol Size</th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <td>1</td>
- <td>23 x 23</td>
- <td></td>
- <td>29</td>
- <td>79 x 79</td>
- <td></td>
- <td>57</td>
- <td>135 x 135</td>
- </tr>
- <tr>
- <td>2</td>
- <td>25 x 25</td>
- <td></td>
- <td>30</td>
- <td>81 x 81</td>
- <td></td>
- <td>58</td>
- <td>137 x 137</td>
- </tr>
- <tr>
- <td>3</td>
- <td>27 x 27</td>
- <td></td>
- <td>31</td>
- <td>83 x 83</td>
- <td></td>
- <td>59</td>
- <td>139 x 139</td>
- </tr>
- <tr>
- <td>4</td>
- <td>29 x 29</td>
- <td></td>
- <td>32</td>
- <td>85 x 85</td>
- <td></td>
- <td>60</td>
- <td>141 x 141</td>
- </tr>
- <tr>
- <td>5</td>
- <td>31 x 31</td>
- <td></td>
- <td>33</td>
- <td>87 x 87</td>
- <td></td>
- <td>61</td>
- <td>143 x 143</td>
- </tr>
- <tr>
- <td>6</td>
- <td>33 x 33</td>
- <td></td>
- <td>34</td>
- <td>89 x 89</td>
- <td></td>
- <td>62</td>
- <td>145 x 145</td>
- </tr>
- <tr>
- <td>7</td>
- <td>35 x 35</td>
- <td></td>
- <td>35</td>
- <td>91 x 91</td>
- <td></td>
- <td>63</td>
- <td>147 x 147</td>
- </tr>
- <tr>
- <td>8</td>
- <td>37 x 37</td>
- <td></td>
- <td>36</td>
- <td>93 x 93</td>
- <td></td>
- <td>64</td>
- <td>149 x 149</td>
- </tr>
- <tr>
- <td>9</td>
- <td>39 x 39</td>
- <td></td>
- <td>37</td>
- <td>95 x 95</td>
- <td></td>
- <td>65</td>
- <td>151 x 151</td>
- </tr>
- <tr>
- <td>10</td>
- <td>41 x 41</td>
- <td></td>
- <td>38</td>
- <td>97 x 97</td>
- <td></td>
- <td>66</td>
- <td>153 x 153</td>
- </tr>
- <tr>
- <td>11</td>
- <td>43 x 43</td>
- <td></td>
- <td>39</td>
- <td>99 x 99</td>
- <td></td>
- <td>67</td>
- <td>155 x 155</td>
- </tr>
- <tr>
- <td>12</td>
- <td>45 x 45</td>
- <td></td>
- <td>40</td>
- <td>101 x 101</td>
- <td></td>
- <td>68</td>
- <td>157 x 157</td>
- </tr>
- <tr>
- <td>13</td>
- <td>47 x 47</td>
- <td></td>
- <td>41</td>
- <td>103 x 103</td>
- <td></td>
- <td>69</td>
- <td>159 x 159</td>
- </tr>
- <tr>
- <td>14</td>
- <td>49 x 49</td>
- <td></td>
- <td>42</td>
- <td>105 x 105</td>
- <td></td>
- <td>70</td>
- <td>161 x 161</td>
- </tr>
- <tr>
- <td>15</td>
- <td>51 x 51</td>
- <td></td>
- <td>43</td>
- <td>107 x 107</td>
- <td></td>
- <td>71</td>
- <td>163 x 163</td>
- </tr>
- <tr>
- <td>16</td>
- <td>53 x 53</td>
- <td></td>
- <td>44</td>
- <td>109 x 109</td>
- <td></td>
- <td>72</td>
- <td>165 x 165</td>
- </tr>
- <tr>
- <td>17</td>
- <td>55 x 55</td>
- <td></td>
- <td>45</td>
- <td>111 x 111</td>
- <td></td>
- <td>73</td>
- <td>167 x 167</td>
- </tr>
- <tr>
- <td>18</td>
- <td>57 x 57</td>
- <td></td>
- <td>46</td>
- <td>113 x 113</td>
- <td></td>
- <td>74</td>
- <td>169 x 169</td>
- </tr>
- <tr>
- <td>19</td>
- <td>59 x 59</td>
- <td></td>
- <td>47</td>
- <td>115 x 115</td>
- <td></td>
- <td>75</td>
- <td>171 x 171</td>
- </tr>
- <tr>
- <td>20</td>
- <td>61 x 61</td>
- <td></td>
- <td>48</td>
- <td>117 x 117</td>
- <td></td>
- <td>76</td>
- <td>173 x 173</td>
- </tr>
- <tr>
- <td>21</td>
- <td>63 x 63</td>
- <td></td>
- <td>49</td>
- <td>119 x 119</td>
- <td></td>
- <td>77</td>
- <td>175 x 175</td>
- </tr>
- <tr>
- <td>22</td>
- <td>65 x 65</td>
- <td></td>
- <td>50</td>
- <td>121 x 121</td>
- <td></td>
- <td>78</td>
- <td>177 x 177</td>
- </tr>
- <tr>
- <td>23</td>
- <td>67 x 67</td>
- <td></td>
- <td>51</td>
- <td>123 x 123</td>
- <td></td>
- <td>79</td>
- <td>179 x 179</td>
- </tr>
- <tr>
- <td>24</td>
- <td>69 x 69</td>
- <td></td>
- <td>52</td>
- <td>125 x 125</td>
- <td></td>
- <td>80</td>
- <td>181 x 181</td>
- </tr>
- <tr>
- <td>25</td>
- <td>71 x 71</td>
- <td></td>
- <td>53</td>
- <td>127 x 127</td>
- <td></td>
- <td>81</td>
- <td>183 x 183</td>
- </tr>
- <tr>
- <td>26</td>
- <td>73 x 73</td>
- <td></td>
- <td>54</td>
- <td>129 x 129</td>
- <td></td>
- <td>82</td>
- <td>185 x 185</td>
- </tr>
- <tr>
- <td>27</td>
- <td>75 x 75</td>
- <td></td>
- <td>55</td>
- <td>131 x 131</td>
- <td></td>
- <td>83</td>
- <td>187 x 187</td>
- </tr>
- <tr>
- <td>28</td>
- <td>77 x 77</td>
- <td></td>
- <td>56</td>
- <td>133 x 133</td>
- <td></td>
- <td>84</td>
- <td>189 x 189</td>
- </tr>
- </tbody>
- </table>
- </div>
- <p>The largest version (84) can encode 7827 digits, 4350 ASCII
- characters, up to 2175 Chinese characters, or 3261 bytes, making it the
- most capacious of all the barcodes supported by Zint.</p>
- <p>There are four levels of error correction capacity available for Han
- Xin Code which can be set by using the <code>--secure</code> option (API
- <code>option_1</code>) to a value from the following table.</p>
- <div id="tbl:hanxin_eccs" class="tablenos">
- <table id="tbl:hanxin_eccs" data-tag=": Han Xin Error Correction Modes">
- <caption><span>Table : Han Xin Error Correction Modes</span> </caption>
- <thead>
- <tr>
- <th>Mode</th>
- <th>Recovery Capacity</th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <td>1</td>
- <td>Approx 8%</td>
- </tr>
- <tr>
- <td>2</td>
- <td>Approx 15%</td>
- </tr>
- <tr>
- <td>3</td>
- <td>Approx 23%</td>
- </tr>
- <tr>
- <td>4</td>
- <td>Approx 30%</td>
- </tr>
- </tbody>
- </table>
- </div>
- <p>Non-ASCII data density may be maximized by using the
- <code>--fullmultibyte</code> switch (API
- <code>option_3 = ZINT_FULL_MULTIBYTE</code>), but check that your
- barcode reader supports this before using.</p>
- <p>Han Xin has four different masks designed to minimize unwanted
- patterns. The best mask to use is selected automatically by Zint but may
- be manually specified by using the <code>--mask</code> switch with
- values 0-3, or in the API by setting
- <code>option_3 = (N + 1) << 8</code> where N is 0-3. To use with
- <code>ZINT_FULL_MULTIBYTE</code> set</p>
- <div class="sourceCode" id="cb118"><pre
- class="sourceCode c"><code class="sourceCode c"><span id="cb118-1"><a href="#cb118-1" aria-hidden="true" tabindex="-1"></a>option_3 <span class="op">=</span> ZINT_FULL_MULTIBYTE <span class="op">|</span> <span class="op">(</span>N <span class="op">+</span> <span class="dv">1</span><span class="op">)</span> <span class="op"><<</span> <span class="dv">8</span></span></code></pre></div>
- <h3 id="ultracode">6.6.14 Ultracode</h3>
- <figure>
- <img src="images/ultra.svg" title="fig:" class="ultra"
- alt="zint -b ULTRA -d "HEIMASÍÐA KENNARAHÁSKÓLA ÍSLANDS"" />
- <figcaption
- aria-hidden="true"><code>zint -b ULTRA -d "HEIMASÍÐA KENNARAHÁSKÓLA ÍSLANDS"</code></figcaption>
- </figure>
- <p>This symbology uses a grid of coloured elements to encode data. ECI
- and GS1 modes are supported. The amount of error correction can be set
- using the <code>--secure</code> option (API <code>option_1</code>) to a
- value as shown in the following table.</p>
- <div id="tbl:ultra_eccs" class="tablenos">
- <table id="tbl:ultra_eccs"
- data-tag=": Ultracode Error Correction Values">
- <caption><span>Table : Ultracode Error Correction Values</span>
- </caption>
- <thead>
- <tr>
- <th>Value</th>
- <th>EC Level</th>
- <th>Amount of symbol holding error correction data</th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <td>1</td>
- <td>EC0</td>
- <td>0% - Error detection only</td>
- </tr>
- <tr>
- <td>2</td>
- <td>EC1</td>
- <td>Approx 5%</td>
- </tr>
- <tr>
- <td>3</td>
- <td>EC2</td>
- <td>Approx 9% - Default value</td>
- </tr>
- <tr>
- <td>4</td>
- <td>EC3</td>
- <td>Approx 17%</td>
- </tr>
- <tr>
- <td>5</td>
- <td>EC4</td>
- <td>Approx 25%</td>
- </tr>
- <tr>
- <td>6</td>
- <td>EC5</td>
- <td>Approx 33%</td>
- </tr>
- </tbody>
- </table>
- </div>
- <p>Zint does not currently implement data compression by default, but
- this can be initiated through the API by setting</p>
- <div class="sourceCode" id="cb119"><pre
- class="sourceCode c"><code class="sourceCode c"><span id="cb119-1"><a href="#cb119-1" aria-hidden="true" tabindex="-1"></a>symbol<span class="op">-></span>option_3 <span class="op">=</span> ULTRA_COMPRESSION<span class="op">;</span></span></code></pre></div>
- <p>With compression, up to 504 digits, 375 alphanumerics or 252 bytes
- can be encoded.</p>
- <p>Revision 2 of Ultracode (2023) may be specified using
- <code>--vers=2</code> (API <code>option_2 = 2</code>).</p>
- <hr />
- <p>WARNING: Revision 2 of Ultracode was only finalized December 2023 and
- Zint has not yet been updated to support it. Do not use.</p>
- <hr />
- <p>Ultracode supports Structured Append of up to 8 symbols and an
- optional numeric ID (File Number), which can be set by using the
- <code>--structapp</code> option (see <a href="#structured-append">4.17
- Structured Append</a>) (API <code>structapp</code>). The ID ranges from
- 1 to 80088. If an ID is not given, no ID is encoded.</p>
- <h2 id="other-barcode-like-markings">6.7 Other Barcode-Like
- Markings</h2>
- <h3 id="facing-identification-mark-fim">6.7.1 Facing Identification Mark
- (FIM)</h3>
- <figure>
- <img src="images/fim.svg" title="fig:" class="trk"
- alt="zint -b FIM --compliantheight -d "C"" />
- <figcaption
- aria-hidden="true"><code>zint -b FIM --compliantheight -d "C"</code></figcaption>
- </figure>
- <p>Used by the United States Postal Service (USPS), the FIM symbology is
- used to assist automated mail processing. There are only 5 valid symbols
- which can be generated using the characters A-E as shown in the table
- below.</p>
- <div id="tbl:fim_characters" class="tablenos">
- <table id="tbl:fim_characters" data-tag=": Valid FIM Characters">
- <caption><span>Table : Valid FIM Characters</span> </caption>
- <thead>
- <tr>
- <th>Code Letter</th>
- <th style="text-align: left;">Usage</th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <td>A</td>
- <td style="text-align: left;">Used for courtesy reply mail and metered
- reply mail with a</td>
- </tr>
- <tr>
- <td></td>
- <td style="text-align: left;">pre-printed POSTNET symbol.</td>
- </tr>
- <tr>
- <td>B</td>
- <td style="text-align: left;">Used for business reply mail without a
- pre-printed zip code.</td>
- </tr>
- <tr>
- <td>C</td>
- <td style="text-align: left;">Used for business reply mail with a
- pre-printed zip code.</td>
- </tr>
- <tr>
- <td>D</td>
- <td style="text-align: left;">Used for Information Based Indicia (IBI)
- postage.</td>
- </tr>
- <tr>
- <td>E</td>
- <td style="text-align: left;">Used for customized mail with a USPS
- Intelligent Mail barcode.</td>
- </tr>
- </tbody>
- </table>
- </div>
- <h3 id="flattermarken">6.7.2 Flattermarken</h3>
- <figure>
- <img src="images/flat.svg" title="fig:" class="lin"
- alt="zint -b FLAT -d "1304056"" />
- <figcaption
- aria-hidden="true"><code>zint -b FLAT -d "1304056"</code></figcaption>
- </figure>
- <p>Used for the recognition of page sequences in print-shops, the
- Flattermarken is not a true barcode symbol and requires precise
- knowledge of the position of the mark on the page. The Flattermarken
- system can encode numeric data up to a maximum of 128 digits and does
- not include a check digit.</p>
- <h1 id="legal-and-version-information">7. Legal and Version
- Information</h1>
- <h2 id="license">7.1 License</h2>
- <p>Zint, libzint and Zint Barcode Studio are Copyright © 2024 Robin
- Stuart. All historical versions are distributed under the GNU General
- Public License version 3 or later. Versions 2.5 and later are released
- under a dual license: the encoding library is released under the BSD (3
- clause) license whereas the GUI, Zint Barcode Studio, and the CLI are
- released under the GNU General Public License version 3 or later.</p>
- <p>Telepen is a trademark of SB Electronic Systems Ltd.</p>
- <p>QR Code is a registered trademark of Denso Wave Incorporated.</p>
- <p>Mailmark is a registered trademark of Royal Mail Group Ltd.</p>
- <p>Microsoft, Windows and the Windows logo are either registered
- trademarks or trademarks of Microsoft Corporation in the United States
- and/or other countries.</p>
- <p>Linux is the registered trademark of Linus Torvalds in the U.S. and
- other countries.</p>
- <p>Mac and macOS are trademarks of Apple Inc., registered in the U.S.
- and other countries.</p>
- <p>The Zint logo is derived from “SF Planetary Orbiter” font by
- ShyFoundary.</p>
- <p>Zint.org.uk website design and hosting provided by Robert
- Elliott.</p>
- <h2 id="patent-issues">7.2 Patent Issues</h2>
- <p>All of the code in Zint is developed using information in the public
- domain, usually freely available on the Internet. Some of the techniques
- used may be subject to patents and other intellectual property
- legislation. It is my belief that any patents involved in the technology
- underlying symbologies utilised by Zint are ‘unadopted’, that is the
- holder does not object to their methods being used.</p>
- <p>Any methods patented or owned by third parties or trademarks or
- registered trademarks used within Zint or in this document are and
- remain the property of their respective owners and do not indicate
- endorsement or affiliation with those owners, companies or
- organisations.</p>
- <h2 id="version-information">7.3 Version Information</h2>
- <p>The current stable version of Zint is 2.13.0, released on 18th
- December 2023.</p>
- <p>See <code>"ChangeLog"</code> in the project root directory for
- information on all releases.</p>
- <h2 id="sources-of-information">7.4 Sources of Information</h2>
- <p>Below is a list of some of the sources used in rough chronological
- order:</p>
- <ul>
- <li>Nick Johnson’s Barcode Specifications</li>
- <li>Bar Code 1 Specification Source Page</li>
- <li>SB Electronic Systems Telepen website</li>
- <li>Pharmacode specifications from Laetus</li>
- <li>Morovia RM4SCC specification</li>
- <li>Australia Post’s ‘A Guide to Printing the 4-State Barcode’ and
- bcsample source code</li>
- <li>Plessey algorithm from GNU-Barcode v0.98 by Leonid A. Broukhis</li>
- <li>GS1 General Specifications v 8.0 Issue 2</li>
- <li>PNG: The Definitive Guide and wpng source code by Greg Reolofs</li>
- <li>PDF417 specification and pdf417 source code by Grand Zebu</li>
- <li>Barcode Reference, TBarCode/X User Documentation and TBarCode/X
- demonstration program from Tec-It</li>
- <li>IEC16022 source code by Stefan Schmidt et al</li>
- <li>United States Postal Service Specification USPS-B-3200</li>
- <li>Adobe Systems Incorporated Encapsulated PostScript File Format
- Specification</li>
- <li>BSI Online Library</li>
- <li>Libdmtx Data Matrix ECC200 decoding library</li>
- </ul>
- <h2 id="standards-compliance">7.5 Standards Compliance</h2>
- <p>Zint was developed to provide compliance with the following British
- and international standards:</p>
- <h3 id="symbology-standards">7.5.1 Symbology Standards</h3>
- <ul>
- <li>ISO/IEC 24778:2008 Information technology - Automatic identification
- and data capture techniques - Aztec Code bar code symbology
- specification</li>
- <li>SEMI T1-95 Specification for Back Surface Bar Code Marking of
- Silicon Wafers (BC412) (1996)</li>
- <li>ANSI/AIM BC12-1998 - Uniform Symbology Specification Channel
- Code</li>
- <li>BS EN 798:1996 Bar coding - Symbology specifications -
- ‘Codabar’</li>
- <li>AIM Europe ISS-X-24 - Uniform Symbology Specification Codablock-F
- (1995)</li>
- <li>ISO/IEC 15417:2007 Information technology - Automatic identification
- and data capture techniques - Code 128 bar code symbology
- specification</li>
- <li>BS EN 12323:2005 AIDC technologies - Symbology specifications - Code
- 16K</li>
- <li>ISO/IEC 16388:2007 Information technology - Automatic identification
- and data capture techniques - Code 39 bar code symbology
- specification</li>
- <li>ANSI/AIM BC6-2000 - Uniform Symbology Specification Code 49</li>
- <li>ANSI/AIM BC5-1995 - Uniform Symbology Specification Code 93</li>
- <li>AIM Uniform Symbology Specification Code One (1994)</li>
- <li>ISO/IEC 16022:2006 Information technology - Automatic identification
- and data capture techniques - Data Matrix ECC200 bar code symbology
- specification</li>
- <li>ISO/IEC 21471:2020 Information technology - Automatic identification
- and data capture techniques - Extended rectangular data matrix (DMRE)
- bar code symbology specification</li>
- <li>AIM TSC1705001 (v 4.0 Draft 0.15) - Information technology -
- Automatic identification and data capture techniques - Bar code
- symbology specification - DotCode (Revised 28th May 2019)</li>
- <li>ISO/IEC 15420:2009 Information technology - Automatic identification
- and data capture techniques - EAN/UPC bar code symbology
- specification</li>
- <li>AIMD014 (v 1.63) - Information technology, Automatic identification
- and data capture techniques - Bar code symbology specification - Grid
- Matrix (Released 9th Dec 2008)</li>
- <li>ISO/IEC 24723:2010 Information technology - Automatic identification
- and data capture techniques - GS1 Composite bar code symbology
- specification</li>
- <li>ISO/IEC 24724:2011 Information technology - Automatic identification
- and data capture techniques - GS1 DataBar bar code symbology
- specification</li>
- <li>ISO/IEC 20830:2021 Information technology - Automatic identification
- and data capture techniques - Han Xin Code bar code symbology
- specification</li>
- <li>ISO/IEC 16390:2007 Information technology - Automatic identification
- and data capture techniques - Interleaved 2 of 5 bar code symbology
- specification</li>
- <li>ISO/IEC 16023:2000 Information technology - International symbology
- specification - MaxiCode</li>
- <li>ISO/IEC 24728:2006 Information technology - Automatic identification
- and data capture techniques - MicroPDF417 bar code symbology
- specification</li>
- <li>ISO/IEC 15438:2015 Information technology - Automatic identification
- and data capture techniques - PDF417 bar code symbology
- specification</li>
- <li>ISO/IEC 18004:2015 Information technology - Automatic identification
- and data capture techniques - QR Code bar code symbology
- specification</li>
- <li>ISO/IEC 23941:2022 Information technology - Automatic identification
- and data capture techniques - Rectangular Micro QR Code (rMQR) bar code
- symbology specification</li>
- <li>AIMD/TSC15032-43 (v 0.99c) - International Technical Specification -
- Ultracode Symbology (Draft) (Released 4th Nov 2015)</li>
- </ul>
- <p>A number of other specification documents have also been referenced,
- such as MIL-STD-1189 Rev. B (1989) (LOGMARS), USPS DMM 300 2006 (2011)
- (POSTNET, PLANET, FIM) and USPS-B-3200 (2015) (IMAIL). Those not named
- include postal and delivery company references in particular.</p>
- <h3 id="general-standards">7.5.2 General Standards</h3>
- <ul>
- <li>AIM ITS/04-001 International Technical Standard - Extended Channel
- Interpretations Part 1: Identification Schemes and Protocol (Released
- 24th May 2004)</li>
- <li>AIM ITS/04-023 International Technical Standard - Extended Channel
- Interpretations Part 3: Register (Version 2, February 2022)</li>
- <li>GS1 General Specifications Release 24.0 (Jan 2024)</li>
- <li>ANSI/HIBC 2.6-2016 - The Health Industry Bar Code (HIBC) Supplier
- Labeling Standard</li>
- </ul>
- <h1 id="annex-a.-character-encoding">Annex A. Character Encoding</h1>
- <p>This section is intended as a quick reference to the character sets
- used by Zint. All symbologies use standard ASCII input as shown in
- section A.1, but some support extended characters as shown in the
- subsequent section <a href="#a.2-latin-alphabet-no.-1-isoiec-8859-1">A.2
- Latin Alphabet No. 1 (ISO/IEC 8859-1)</a>.</p>
- <h2 id="a.1-ascii-standard">A.1 ASCII Standard</h2>
- <p>The ubiquitous ASCII standard is well known to most computer users.
- It’s reproduced here for reference.</p>
- <div id="tbl:ascii" class="tablenos">
- <table id="tbl:ascii" data-tag=": ASCII">
- <caption><span>Table : ASCII</span> </caption>
- <thead>
- <tr>
- <th>Hex</th>
- <th style="text-align: left;">0</th>
- <th style="text-align: left;">1</th>
- <th style="text-align: left;">2</th>
- <th style="text-align: left;">3</th>
- <th style="text-align: left;">4</th>
- <th style="text-align: left;">5</th>
- <th style="text-align: left;">6</th>
- <th style="text-align: left;">7</th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <td>0</td>
- <td style="text-align: left;"><code>NUL</code></td>
- <td style="text-align: left;"><code>DLE</code></td>
- <td style="text-align: left;"><code>SPACE</code></td>
- <td style="text-align: left;"><code>0</code></td>
- <td style="text-align: left;"><code>@</code></td>
- <td style="text-align: left;"><code>P</code></td>
- <td style="text-align: left;"><code>`</code></td>
- <td style="text-align: left;"><code>p</code></td>
- </tr>
- <tr>
- <td>1</td>
- <td style="text-align: left;"><code>SOH</code></td>
- <td style="text-align: left;"><code>DC1</code></td>
- <td style="text-align: left;"><code>!</code></td>
- <td style="text-align: left;"><code>1</code></td>
- <td style="text-align: left;"><code>A</code></td>
- <td style="text-align: left;"><code>Q</code></td>
- <td style="text-align: left;"><code>a</code></td>
- <td style="text-align: left;"><code>q</code></td>
- </tr>
- <tr>
- <td>2</td>
- <td style="text-align: left;"><code>STX</code></td>
- <td style="text-align: left;"><code>DC2</code></td>
- <td style="text-align: left;"><code>"</code></td>
- <td style="text-align: left;"><code>2</code></td>
- <td style="text-align: left;"><code>B</code></td>
- <td style="text-align: left;"><code>R</code></td>
- <td style="text-align: left;"><code>b</code></td>
- <td style="text-align: left;"><code>r</code></td>
- </tr>
- <tr>
- <td>3</td>
- <td style="text-align: left;"><code>ETX</code></td>
- <td style="text-align: left;"><code>DC3</code></td>
- <td style="text-align: left;"><code>#</code></td>
- <td style="text-align: left;"><code>3</code></td>
- <td style="text-align: left;"><code>C</code></td>
- <td style="text-align: left;"><code>S</code></td>
- <td style="text-align: left;"><code>c</code></td>
- <td style="text-align: left;"><code>s</code></td>
- </tr>
- <tr>
- <td>4</td>
- <td style="text-align: left;"><code>EOT</code></td>
- <td style="text-align: left;"><code>DC4</code></td>
- <td style="text-align: left;"><code>$</code></td>
- <td style="text-align: left;"><code>4</code></td>
- <td style="text-align: left;"><code>D</code></td>
- <td style="text-align: left;"><code>T</code></td>
- <td style="text-align: left;"><code>d</code></td>
- <td style="text-align: left;"><code>t</code></td>
- </tr>
- <tr>
- <td>5</td>
- <td style="text-align: left;"><code>ENQ</code></td>
- <td style="text-align: left;"><code>NAK</code></td>
- <td style="text-align: left;"><code>%</code></td>
- <td style="text-align: left;"><code>5</code></td>
- <td style="text-align: left;"><code>E</code></td>
- <td style="text-align: left;"><code>U</code></td>
- <td style="text-align: left;"><code>e</code></td>
- <td style="text-align: left;"><code>u</code></td>
- </tr>
- <tr>
- <td>6</td>
- <td style="text-align: left;"><code>ACK</code></td>
- <td style="text-align: left;"><code>SYN</code></td>
- <td style="text-align: left;"><code>&</code></td>
- <td style="text-align: left;"><code>6</code></td>
- <td style="text-align: left;"><code>F</code></td>
- <td style="text-align: left;"><code>V</code></td>
- <td style="text-align: left;"><code>f</code></td>
- <td style="text-align: left;"><code>v</code></td>
- </tr>
- <tr>
- <td>7</td>
- <td style="text-align: left;"><code>BEL</code></td>
- <td style="text-align: left;"><code>ETB</code></td>
- <td style="text-align: left;"><code>'</code></td>
- <td style="text-align: left;"><code>7</code></td>
- <td style="text-align: left;"><code>G</code></td>
- <td style="text-align: left;"><code>W</code></td>
- <td style="text-align: left;"><code>g</code></td>
- <td style="text-align: left;"><code>w</code></td>
- </tr>
- <tr>
- <td>8</td>
- <td style="text-align: left;"><code>BS</code></td>
- <td style="text-align: left;"><code>CAN</code></td>
- <td style="text-align: left;"><code>(</code></td>
- <td style="text-align: left;"><code>8</code></td>
- <td style="text-align: left;"><code>H</code></td>
- <td style="text-align: left;"><code>X</code></td>
- <td style="text-align: left;"><code>h</code></td>
- <td style="text-align: left;"><code>x</code></td>
- </tr>
- <tr>
- <td>9</td>
- <td style="text-align: left;"><code>TAB</code></td>
- <td style="text-align: left;"><code>EM</code></td>
- <td style="text-align: left;"><code>)</code></td>
- <td style="text-align: left;"><code>9</code></td>
- <td style="text-align: left;"><code>I</code></td>
- <td style="text-align: left;"><code>Y</code></td>
- <td style="text-align: left;"><code>i</code></td>
- <td style="text-align: left;"><code>y</code></td>
- </tr>
- <tr>
- <td>A</td>
- <td style="text-align: left;"><code>LF</code></td>
- <td style="text-align: left;"><code>SUB</code></td>
- <td style="text-align: left;"><code>*</code></td>
- <td style="text-align: left;"><code>:</code></td>
- <td style="text-align: left;"><code>J</code></td>
- <td style="text-align: left;"><code>Z</code></td>
- <td style="text-align: left;"><code>j</code></td>
- <td style="text-align: left;"><code>z</code></td>
- </tr>
- <tr>
- <td>B</td>
- <td style="text-align: left;"><code>VT</code></td>
- <td style="text-align: left;"><code>ESC</code></td>
- <td style="text-align: left;"><code>+</code></td>
- <td style="text-align: left;"><code>;</code></td>
- <td style="text-align: left;"><code>K</code></td>
- <td style="text-align: left;"><code>[</code></td>
- <td style="text-align: left;"><code>k</code></td>
- <td style="text-align: left;"><code>{</code></td>
- </tr>
- <tr>
- <td>C</td>
- <td style="text-align: left;"><code>FF</code></td>
- <td style="text-align: left;"><code>FS</code></td>
- <td style="text-align: left;"><code>,</code></td>
- <td style="text-align: left;"><code><</code></td>
- <td style="text-align: left;"><code>L</code></td>
- <td style="text-align: left;"><code>\</code></td>
- <td style="text-align: left;"><code>l</code></td>
- <td style="text-align: left;"><code>|</code></td>
- </tr>
- <tr>
- <td>D</td>
- <td style="text-align: left;"><code>CR</code></td>
- <td style="text-align: left;"><code>GS</code></td>
- <td style="text-align: left;"><code>-</code></td>
- <td style="text-align: left;"><code>=</code></td>
- <td style="text-align: left;"><code>M</code></td>
- <td style="text-align: left;"><code>]</code></td>
- <td style="text-align: left;"><code>m</code></td>
- <td style="text-align: left;"><code>}</code></td>
- </tr>
- <tr>
- <td>E</td>
- <td style="text-align: left;"><code>SO</code></td>
- <td style="text-align: left;"><code>RS</code></td>
- <td style="text-align: left;"><code>.</code></td>
- <td style="text-align: left;"><code>></code></td>
- <td style="text-align: left;"><code>N</code></td>
- <td style="text-align: left;"><code>^</code></td>
- <td style="text-align: left;"><code>n</code></td>
- <td style="text-align: left;"><code>~</code></td>
- </tr>
- <tr>
- <td>F</td>
- <td style="text-align: left;"><code>SI</code></td>
- <td style="text-align: left;"><code>US</code></td>
- <td style="text-align: left;"><code>/</code></td>
- <td style="text-align: left;"><code>?</code></td>
- <td style="text-align: left;"><code>O</code></td>
- <td style="text-align: left;"><code>_</code></td>
- <td style="text-align: left;"><code>o</code></td>
- <td style="text-align: left;"><code>DEL</code></td>
- </tr>
- </tbody>
- </table>
- </div>
- <h2 id="a.2-latin-alphabet-no.-1-isoiec-8859-1">A.2 Latin Alphabet No. 1
- (ISO/IEC 8859-1)</h2>
- <p>ISO/IEC 8859-1 defines additional characters common in western
- European languages like French, German, Italian and Spanish. This
- extension is the default encoding of many barcodes (see Table <a
- href="#tbl:default_character_sets">: Default Character Sets</a>) when a
- codepoint above hex 9F is encoded. Note that codepoints hex 80 to 9F are
- not defined.</p>
- <div id="tbl:iso_iec_8869_1" class="tablenos">
- <table id="tbl:iso_iec_8869_1" data-tag=": ISO/IEC 8859-1">
- <caption><span>Table : ISO/IEC 8859-1</span> </caption>
- <thead>
- <tr>
- <th>Hex</th>
- <th style="text-align: left;">8</th>
- <th style="text-align: left;">9</th>
- <th style="text-align: left;">A</th>
- <th style="text-align: left;">B</th>
- <th style="text-align: left;">C</th>
- <th style="text-align: left;">D</th>
- <th style="text-align: left;">E</th>
- <th style="text-align: left;">F</th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <td>0</td>
- <td style="text-align: left;"></td>
- <td style="text-align: left;"></td>
- <td style="text-align: left;"><code>NBSP</code></td>
- <td style="text-align: left;"><code>°</code></td>
- <td style="text-align: left;"><code>À</code></td>
- <td style="text-align: left;"><code>Ð</code></td>
- <td style="text-align: left;"><code>à</code></td>
- <td style="text-align: left;"><code>ð</code></td>
- </tr>
- <tr>
- <td>1</td>
- <td style="text-align: left;"></td>
- <td style="text-align: left;"></td>
- <td style="text-align: left;"><code>¡</code></td>
- <td style="text-align: left;"><code>±</code></td>
- <td style="text-align: left;"><code>Á</code></td>
- <td style="text-align: left;"><code>Ñ</code></td>
- <td style="text-align: left;"><code>á</code></td>
- <td style="text-align: left;"><code>ñ</code></td>
- </tr>
- <tr>
- <td>2</td>
- <td style="text-align: left;"></td>
- <td style="text-align: left;"></td>
- <td style="text-align: left;"><code>¢</code></td>
- <td style="text-align: left;"><code>²</code></td>
- <td style="text-align: left;"><code>Â</code></td>
- <td style="text-align: left;"><code>Ò</code></td>
- <td style="text-align: left;"><code>â</code></td>
- <td style="text-align: left;"><code>ò</code></td>
- </tr>
- <tr>
- <td>3</td>
- <td style="text-align: left;"></td>
- <td style="text-align: left;"></td>
- <td style="text-align: left;"><code>£</code></td>
- <td style="text-align: left;"><code>³</code></td>
- <td style="text-align: left;"><code>Ã</code></td>
- <td style="text-align: left;"><code>Ó</code></td>
- <td style="text-align: left;"><code>ã</code></td>
- <td style="text-align: left;"><code>ó</code></td>
- </tr>
- <tr>
- <td>4</td>
- <td style="text-align: left;"></td>
- <td style="text-align: left;"></td>
- <td style="text-align: left;"><code>¤</code></td>
- <td style="text-align: left;"><code>´</code></td>
- <td style="text-align: left;"><code>Ä</code></td>
- <td style="text-align: left;"><code>Ô</code></td>
- <td style="text-align: left;"><code>ä</code></td>
- <td style="text-align: left;"><code>ô</code></td>
- </tr>
- <tr>
- <td>5</td>
- <td style="text-align: left;"></td>
- <td style="text-align: left;"></td>
- <td style="text-align: left;"><code>¥</code></td>
- <td style="text-align: left;"><code>μ</code></td>
- <td style="text-align: left;"><code>Å</code></td>
- <td style="text-align: left;"><code>Õ</code></td>
- <td style="text-align: left;"><code>å</code></td>
- <td style="text-align: left;"><code>õ</code></td>
- </tr>
- <tr>
- <td>6</td>
- <td style="text-align: left;"></td>
- <td style="text-align: left;"></td>
- <td style="text-align: left;"><code>¦</code></td>
- <td style="text-align: left;"><code>¶</code></td>
- <td style="text-align: left;"><code>Æ</code></td>
- <td style="text-align: left;"><code>Ö</code></td>
- <td style="text-align: left;"><code>æ</code></td>
- <td style="text-align: left;"><code>ö</code></td>
- </tr>
- <tr>
- <td>7</td>
- <td style="text-align: left;"></td>
- <td style="text-align: left;"></td>
- <td style="text-align: left;"><code>§</code></td>
- <td style="text-align: left;"><code>·</code></td>
- <td style="text-align: left;"><code>Ç</code></td>
- <td style="text-align: left;"><code>×</code></td>
- <td style="text-align: left;"><code>ç</code></td>
- <td style="text-align: left;"><code>÷</code></td>
- </tr>
- <tr>
- <td>8</td>
- <td style="text-align: left;"></td>
- <td style="text-align: left;"></td>
- <td style="text-align: left;"><code>¨</code></td>
- <td style="text-align: left;"><code>¸</code></td>
- <td style="text-align: left;"><code>È</code></td>
- <td style="text-align: left;"><code>Ø</code></td>
- <td style="text-align: left;"><code>è</code></td>
- <td style="text-align: left;"><code>ø</code></td>
- </tr>
- <tr>
- <td>9</td>
- <td style="text-align: left;"></td>
- <td style="text-align: left;"></td>
- <td style="text-align: left;"><code>©</code></td>
- <td style="text-align: left;"><code>¹</code></td>
- <td style="text-align: left;"><code>É</code></td>
- <td style="text-align: left;"><code>Ù</code></td>
- <td style="text-align: left;"><code>é</code></td>
- <td style="text-align: left;"><code>ù</code></td>
- </tr>
- <tr>
- <td>A</td>
- <td style="text-align: left;"></td>
- <td style="text-align: left;"></td>
- <td style="text-align: left;"><code>ª</code></td>
- <td style="text-align: left;"><code>º</code></td>
- <td style="text-align: left;"><code>Ê</code></td>
- <td style="text-align: left;"><code>Ú</code></td>
- <td style="text-align: left;"><code>ê</code></td>
- <td style="text-align: left;"><code>ú</code></td>
- </tr>
- <tr>
- <td>B</td>
- <td style="text-align: left;"></td>
- <td style="text-align: left;"></td>
- <td style="text-align: left;"><code>«</code></td>
- <td style="text-align: left;"><code>»</code></td>
- <td style="text-align: left;"><code>Ë</code></td>
- <td style="text-align: left;"><code>Û</code></td>
- <td style="text-align: left;"><code>ë</code></td>
- <td style="text-align: left;"><code>û</code></td>
- </tr>
- <tr>
- <td>C</td>
- <td style="text-align: left;"></td>
- <td style="text-align: left;"></td>
- <td style="text-align: left;"><code>¬</code></td>
- <td style="text-align: left;"><code>¼</code></td>
- <td style="text-align: left;"><code>Ì</code></td>
- <td style="text-align: left;"><code>Ü</code></td>
- <td style="text-align: left;"><code>ì</code></td>
- <td style="text-align: left;"><code>ü</code></td>
- </tr>
- <tr>
- <td>D</td>
- <td style="text-align: left;"></td>
- <td style="text-align: left;"></td>
- <td style="text-align: left;"><code>SHY</code></td>
- <td style="text-align: left;"><code>½</code></td>
- <td style="text-align: left;"><code>Í</code></td>
- <td style="text-align: left;"><code>Ý</code></td>
- <td style="text-align: left;"><code>í</code></td>
- <td style="text-align: left;"><code>ý</code></td>
- </tr>
- <tr>
- <td>E</td>
- <td style="text-align: left;"></td>
- <td style="text-align: left;"></td>
- <td style="text-align: left;"><code>®</code></td>
- <td style="text-align: left;"><code>¾</code></td>
- <td style="text-align: left;"><code>Î</code></td>
- <td style="text-align: left;"><code>Þ</code></td>
- <td style="text-align: left;"><code>î</code></td>
- <td style="text-align: left;"><code>þ</code></td>
- </tr>
- <tr>
- <td>F</td>
- <td style="text-align: left;"></td>
- <td style="text-align: left;"></td>
- <td style="text-align: left;"><code>¯</code></td>
- <td style="text-align: left;"><code>¿</code></td>
- <td style="text-align: left;"><code>Ï</code></td>
- <td style="text-align: left;"><code>ß</code></td>
- <td style="text-align: left;"><code>ï</code></td>
- <td style="text-align: left;"><code>ÿ</code></td>
- </tr>
- </tbody>
- </table>
- </div>
- <h1 id="annex-b.-qt-backend-qzint">Annex B. Qt Backend QZint</h1>
- <p>Used internally by Zint Barcode Studio to display the preview, the Qt
- Backend <code>QZint</code> renders a barcode by drawing the vector
- representation (see <a href="#buffering-symbols-in-memory-vector">5.5
- Buffering Symbols in Memory (vector)</a>) provided by the Zint library
- <code>libzint</code>.</p>
- <p>The main class is <code>Zint::QZint</code>, which has getter/setter
- properties that correspond to the <code>zint_symbol</code> structure
- (see <a href="#setting-options">5.7 Setting Options</a>), and a main
- method <code>render()</code> which takes a Qt <code>QPainter</code> to
- paint with, and a <code>QRectF</code> rectangular area specifying where
- to paint into:</p>
- <div class="sourceCode" id="cb120"><pre
- class="sourceCode cpp"><code class="sourceCode cpp"><span id="cb120-1"><a href="#cb120-1" aria-hidden="true" tabindex="-1"></a><span class="co">/* Encode and display barcode in `paintRect` using `painter`.</span></span>
- <span id="cb120-2"><a href="#cb120-2" aria-hidden="true" tabindex="-1"></a><span class="co"> Note: legacy argument `mode` is not used */</span></span>
- <span id="cb120-3"><a href="#cb120-3" aria-hidden="true" tabindex="-1"></a><span class="dt">void</span> render<span class="op">(</span><span class="ex">QPainter</span><span class="op">&</span> painter<span class="op">,</span> <span class="at">const</span> <span class="ex">QRectF</span><span class="op">&</span> paintRect<span class="op">,</span></span>
- <span id="cb120-4"><a href="#cb120-4" aria-hidden="true" tabindex="-1"></a> AspectRatioMode mode <span class="op">=</span> IgnoreAspectRatio<span class="op">);</span></span></code></pre></div>
- <p><code>render()</code> will emit one of two Qt signals -
- <code>encoded</code> on successful encoding and drawing, or
- <code>errored</code> on failure. The client can connect and act
- appropriately, for instance:</p>
- <div class="sourceCode" id="cb121"><pre
- class="sourceCode cpp"><code class="sourceCode cpp"><span id="cb121-1"><a href="#cb121-1" aria-hidden="true" tabindex="-1"></a><span class="fu">connect</span><span class="op">(</span>qzint<span class="op">,</span> <span class="ex">SIGNAL</span><span class="op">(</span>encoded<span class="op">()),</span> <span class="ex">SLOT</span><span class="op">(</span>on_encoded<span class="op">()));</span></span>
- <span id="cb121-2"><a href="#cb121-2" aria-hidden="true" tabindex="-1"></a><span class="fu">connect</span><span class="op">(</span>qzint<span class="op">,</span> <span class="ex">SIGNAL</span><span class="op">(</span>errored<span class="op">()),</span> <span class="ex">SLOT</span><span class="op">(</span>on_errored<span class="op">()));</span></span></code></pre></div>
- <p>where <code>qzint</code> is an instance of <code>Zint::QZint</code>
- and <code>on_encoded()</code> and <code>on_error()</code> are Qt slot
- methods provided by the caller. On error, the error value and message
- can be retrieved by the methods <code>getError()</code> and
- <code>lastError()</code> respectively.</p>
- <p>The other main method is <code>save_to_file()</code>:</p>
- <div class="sourceCode" id="cb122"><pre
- class="sourceCode cpp"><code class="sourceCode cpp"><span id="cb122-1"><a href="#cb122-1" aria-hidden="true" tabindex="-1"></a><span class="co">/* Encode and print barcode to file `filename`.</span></span>
- <span id="cb122-2"><a href="#cb122-2" aria-hidden="true" tabindex="-1"></a><span class="co"> Only sets `getError()` on error, not on warning */</span></span>
- <span id="cb122-3"><a href="#cb122-3" aria-hidden="true" tabindex="-1"></a><span class="dt">bool</span> save_to_file<span class="op">(</span><span class="at">const</span> <span class="ex">QString</span><span class="op">&</span> filename<span class="op">);</span> <span class="co">// `ZBarcode_Print()`</span></span></code></pre></div>
- <p>which takes a <code>filename</code> to output to. It too will emit an
- <code>errored</code> signal on failure, returning <code>false</code>
- (but nothing on success, which just returns <code>true</code>). Note
- that rotation is achieved through the setter method
- <code>setRotateAngleValue()</code> (as opposed to the
- <code>rotate_angle</code> argument used by
- <code>ZBarcode_Print()</code>).</p>
- <p>Various other methods are available, for instance methods for testing
- symbology capabilities, and utility methods such as
- <code>defaultXdim()</code> and <code>getAsCLI()</code>.</p>
- <p>For full details, see <code>"backend_qt/qzint.h"</code>.</p>
- <h1 id="annex-c.-tcl-backend-binding">Annex C. Tcl Backend Binding</h1>
- <p>A Tcl binding is available in the <code>"backend_tcl</code>”
- sub-directory. To make on Unix:</p>
- <div class="sourceCode" id="cb123"><pre
- class="sourceCode bash"><code class="sourceCode bash"><span id="cb123-1"><a href="#cb123-1" aria-hidden="true" tabindex="-1"></a><span class="bu">cd</span> backend_tcl</span>
- <span id="cb123-2"><a href="#cb123-2" aria-hidden="true" tabindex="-1"></a><span class="fu">autoconf</span></span>
- <span id="cb123-3"><a href="#cb123-3" aria-hidden="true" tabindex="-1"></a><span class="ex">./configure</span></span>
- <span id="cb123-4"><a href="#cb123-4" aria-hidden="true" tabindex="-1"></a><span class="fu">make</span></span>
- <span id="cb123-5"><a href="#cb123-5" aria-hidden="true" tabindex="-1"></a><span class="fu">sudo</span> make install</span></code></pre></div>
- <p>For Windows, a Visual Studio 6.0 project file is available at
- <code>"backend_tcl\zint_tcl.dsp"</code>. This can also be opened (and
- converted) by more modern Visual Studio versions, though some fixing up
- of the project configuration will likely be required.</p>
- <p>Once built and installed, invoke the Tcl/Tk CLI
- <code>"wish"</code>:</p>
- <div class="sourceCode" id="cb124"><pre
- class="sourceCode bash"><code class="sourceCode bash"><span id="cb124-1"><a href="#cb124-1" aria-hidden="true" tabindex="-1"></a><span class="ex">wish</span></span></code></pre></div>
- <p>and ignoring the Tk window click back to the command prompt
- <code>"%"</code> and type:</p>
- <div class="sourceCode" id="cb125"><pre
- class="sourceCode bash"><code class="sourceCode bash"><span id="cb125-1"><a href="#cb125-1" aria-hidden="true" tabindex="-1"></a><span class="ex">require</span> package zint</span>
- <span id="cb125-2"><a href="#cb125-2" aria-hidden="true" tabindex="-1"></a><span class="ex">zint</span> help</span></code></pre></div>
- <p>which will show the usage message, with options very similiar to the
- Zint CLI. (One notable difference is that boolean options such as
- <code>-bold</code> take a <code>1</code> or <code>0</code> as an
- argument.)</p>
- <p>A demonstration Tcl/Tk program which is also useful in itself is
- available at <code>"backend_tcl/demo/demo.tcl"</code>. To run type:</p>
- <div class="sourceCode" id="cb126"><pre
- class="sourceCode bash"><code class="sourceCode bash"><span id="cb126-1"><a href="#cb126-1" aria-hidden="true" tabindex="-1"></a><span class="ex">wish</span> demo/demo.tcl</span></code></pre></div>
- <p>which will display the following window.</p>
- <figure>
- <img src="images/tcl_demo.png" title="fig:" class="pop"
- alt="Tcl/Tk demonstration program window" />
- <figcaption aria-hidden="true">Tcl/Tk demonstration program
- window</figcaption>
- </figure>
- <p>You can select the symbology, enter the data to encode, and set
- options (which are the same as those given in the usage message). A
- raster preview of the configured barcode is displayed once the
- <code>"Generate"</code> button is pressed.</p>
- <h1 id="annex-d.-man-page-zint1">Annex D. Man Page ZINT(1)</h1>
- <h2 id="name">NAME</h2>
- <p><code>zint</code> - encode data as a barcode image</p>
- <h2 id="synopsis">SYNOPSIS</h2>
- <div class="line-block"><code>zint</code> [<code>-h</code> |
- <code>--help</code>]<br />
- <code>zint</code> [<em>options</em>]</div>
- <h2 id="description">DESCRIPTION</h2>
- <p>zint takes input data from the command line or a file to encode in a
- barcode which is then output to an image file.</p>
- <p>Input data is UTF-8, unless <code>--binary</code> is specified.</p>
- <p>Human Readable Text (HRT) is displayed by default for those barcodes
- that support HRT, unless <code>--notext</code> is specified.</p>
- <p>The output image file (specified with <code>-o</code> |
- <code>--output</code>) may be in one of these formats: Windows Bitmap
- (<code>BMP</code>), Enhanced Metafile Format (<code>EMF</code>),
- Encapsulated PostScript (<code>EPS</code>), Graphics Interchange Format
- (<code>GIF</code>), ZSoft Paintbrush (<code>PCX</code>), Portable
- Network Format (<code>PNG</code>), Scalable Vector Graphic
- (<code>SVG</code>), or Tagged Image File Format (<code>TIF</code>).</p>
- <h2 id="options">OPTIONS</h2>
- <dl>
- <dt><code>-h</code>, <code>--help</code></dt>
- <dd>
- <p>Print usage information summarizing command line options.</p>
- </dd>
- <dt><code>-b TYPE</code>, <code>--barcode=TYPE</code></dt>
- <dd>
- <p>Set the barcode symbology that will be used to encode the data.
- <em>TYPE</em> is the number or name of the barcode symbology. If not
- given, the symbology defaults to 20 (Code 128). To see what types are
- available, use the <code>-t</code> | <code>--types</code> option. Type
- names are case-insensitive, and non-alphanumerics are ignored.</p>
- </dd>
- <dt><code>--addongap=INTEGER</code></dt>
- <dd>
- <p>For EAN/UPC symbologies, set the gap between the main data and the
- add-on. <em>INTEGER</em> is in integral multiples of the X-dimension.
- The maximum gap that can be set is 12. The minimum is 7, except for
- UPC-A, when the minimum is 9.</p>
- </dd>
- <dt><code>--batch</code></dt>
- <dd>
- <p>Treat each line of an input file specified with <code>-i</code> |
- <code>--input</code> as a separate data set and produce a barcode image
- for each one. The barcode images are outputted by default to numbered
- filenames starting with “00001.png”, “00002.png” etc., which can be
- changed by using the <code>-o</code> | <code>--output</code> option.</p>
- </dd>
- <dt><code>--bg=COLOUR</code></dt>
- <dd>
- <p>Specify a background (paper) colour where <em>COLOUR</em> is in
- hexadecimal <code>RRGGBB</code> or <code>RRGGBBAA</code> format or in
- decimal <code>C,M,Y,K</code> percentages format.</p>
- </dd>
- <dt><code>--binary</code></dt>
- <dd>
- <p>Treat input data as raw 8-bit binary data instead of the default
- UTF-8. Automatic code page translation to an ECI page is disabled, and
- no validation of the data’s character encoding takes place.</p>
- </dd>
- <dt><code>--bind</code></dt>
- <dd>
- <p>Add horizontal boundary bars (also known as bearer bars) to the
- symbol. The width of the boundary bars is specified by the
- <code>--border</code> option. <code>--bind</code> can also be used to
- add row separator bars to symbols stacked with multiple <code>-d</code>
- | <code>--data</code> inputs, in which case the width of the separator
- bars is specified with the <code>--separator</code> option.</p>
- </dd>
- <dt><code>--bindtop</code></dt>
- <dd>
- <p>Add a horizontal boundary bar to the top of the symbol. The width of
- the boundary bar is specified by the <code>--border</code> option.</p>
- </dd>
- <dt><code>--bold</code></dt>
- <dd>
- <p>Use a bold font for the Human Readable Text (HRT).</p>
- </dd>
- <dt><code>--border=INTEGER</code></dt>
- <dd>
- <p>Set the width of boundary bars (<code>--bind</code> or
- <code>--bindtop</code>) or box borders (<code>--box</code>), where
- <em>INTEGER</em> is in integral multiples of the X-dimension. The
- default is zero.</p>
- </dd>
- <dt><code>--box</code></dt>
- <dd>
- <p>Add a box around the symbol. The width of the borders is specified by
- the <code>--border</code> option.</p>
- </dd>
- <dt><code>--cmyk</code></dt>
- <dd>
- <p>Use the CMYK colour space when outputting to Encapsulated PostScript
- (EPS) or TIF files.</p>
- </dd>
- <dt><code>--cols=INTEGER</code></dt>
- <dd>
- <p>Set the number of data columns in the symbol to <em>INTEGER</em>.
- Affects Codablock-F, DotCode, GS1 DataBar Expanded Stacked
- (DBAR_EXPSTK), MicroPDF417 and PDF417 symbols.</p>
- </dd>
- <dt><code>--compliantheight</code></dt>
- <dd>
- <p>Warn if the height specified by the <code>--height</code> option is
- not compliant with the barcode’s specification, or if
- <code>--height</code> is not given, default to the height specified by
- the specification (if any).</p>
- </dd>
- <dt><code>-d</code>, <code>--data=DATA</code></dt>
- <dd>
- <p>Specify the input <em>DATA</em> to encode. The <code>--esc</code>
- option may be used to enter non-printing characters using escape
- sequences. The <em>DATA</em> should be UTF-8, unless the
- <code>--binary</code> option is given, in which case it can be
- anything.</p>
- </dd>
- <dt><code>--direct</code></dt>
- <dd>
- <p>Send output to stdout, which in most cases should be re-directed to a
- pipe or a file. Use <code>--filetype</code> to specify output
- format.</p>
- </dd>
- <dt><code>--dmiso144</code></dt>
- <dd>
- <p>For Data Matrix symbols, use the standard ISO/IEC codeword placement
- for 144 x 144 (<code>--vers=24</code>) sized symbols, instead of the
- default “de facto” placement (which rotates the placement of ECC
- codewords).</p>
- </dd>
- <dt><code>--dmre</code></dt>
- <dd>
- <p>For Data Matrix symbols, allow Data Matrix Rectangular Extended
- (DMRE) sizes when considering automatic sizes. See also
- <code>--square</code>.</p>
- </dd>
- <dt><code>--dotsize=NUMBER</code></dt>
- <dd>
- <p>Set the radius of the dots in dotty mode (<code>--dotty</code>).
- <em>NUMBER</em> is in X-dimensions, and may be floating-point. The
- default is 0.8.</p>
- </dd>
- <dt><code>--dotty</code></dt>
- <dd>
- <p>Use dots instead of squares for matrix symbols. DotCode is always in
- dotty mode.</p>
- </dd>
- <dt><code>--dump</code></dt>
- <dd>
- <p>Dump a hexadecimal representation of the symbol’s encodation to
- stdout. The same representation may be outputted to a file by using a
- <code>.txt</code> extension with <code>-o</code> | <code>--output</code>
- or by specifying <code>--filetype=txt</code>.</p>
- </dd>
- <dt><code>-e</code>, <code>--ecinos</code></dt>
- <dd>
- <p>Display the table of ECIs (Extended Channel Interpretations).</p>
- </dd>
- <dt><code>--eci=INTEGER</code></dt>
- <dd>
- <p>Set the ECI code for the input data to <em>INTEGER</em>. See
- <code>-e</code> | <code>--ecinos</code> for a list of the ECIs
- available. ECIs are supported by Aztec Code, Code One, Data Matrix,
- DotCode, Grid Matrix, Han Xin Code, MaxiCode, MicroPDF417, PDF417, QR
- Code, rMQR and Ultracode.</p>
- </dd>
- <dt><code>--embedfont</code></dt>
- <dd>
- <p>For vector output, embed the font in the file for portability.
- Currently only available for SVG output.</p>
- </dd>
- <dt><code>--esc</code></dt>
- <dd>
- <p>Process escape characters in the input data. The escape sequences
- are:</p>
- <pre><code>\0 (0x00) NUL Null character
- \E (0x04) EOT End of Transmission
- \a (0x07) BEL Bell
- \b (0x08) BS Backspace
- \t (0x09) HT Horizontal Tab
- \n (0x0A) LF Line Feed
- \v (0x0B) VT Vertical Tab
- \f (0x0C) FF Form Feed
- \r (0x0D) CR Carriage Return
- \e (0x1B) ESC Escape
- \G (0x1D) GS Group Separator
- \R (0x1E) RS Record Separator
- \\ (0x5C) \ Backslash
- \dNNN (NNN) Any 8-bit character where NNN is
- decimal (000-255)
- \oNNN (0oNNN) Any 8-bit character where NNN is
- octal (000-377)
- \xNN (0xNN) Any 8-bit character where NN is
- hexadecimal (00-FF)
- \uNNNN (U+NNNN) Any 16-bit Unicode BMP character
- where NNNN is hexadecimal
- \UNNNNNN (U+NNNNNN) Any 21-bit Unicode character
- where NNNNNN is hexadecimal</code></pre>
- </dd>
- <dt><code>--extraesc</code></dt>
- <dd>
- <p>For Code 128 only, as well as processing the normal escape sequences
- above, process the special escape sequences <code>\^A</code>,
- <code>\^B</code>, <code>\^C</code> and <code>\^@</code> that allow
- manual switching of Code Sets, and the special escape sequence
- <code>\^1</code> that inserts an <code>FNC1</code> character. The
- sequence <code>\@</code> turns off manual switching. The sequence
- <code>\^^</code> can be used to encode data that contains special escape
- sequences.</p>
- </dd>
- <dt><code>--fast</code></dt>
- <dd>
- <p>Use faster if less optimal encodation or other shortcuts (affects
- Data Matrix, MicroPDF417, PDF417, QRCODE & UPNQR only).</p>
- </dd>
- <dt><code>--fg=COLOUR</code></dt>
- <dd>
- <p>Specify a foreground (ink) colour where <em>COLOUR</em> is in
- hexadecimal <code>RRGGBB</code> or <code>RRGGBBAA</code> format or in
- decimal <code>C,M,Y,K</code> percentages format.</p>
- </dd>
- <dt><code>--filetype=TYPE</code></dt>
- <dd>
- <p>Set the output file type to <em>TYPE</em>, which is one of
- <code>BMP</code>, <code>EMF</code>, <code>EPS</code>, <code>GIF</code>,
- <code>PCX</code>, <code>PNG</code>, <code>SVG</code>, <code>TIF</code>,
- <code>TXT</code>.</p>
- </dd>
- <dt><code>--fullmultibyte</code></dt>
- <dd>
- <p>Use the multibyte modes of Grid Matrix, Han Xin and QR Code for
- non-ASCII data.</p>
- </dd>
- <dt><code>--gs1</code></dt>
- <dd>
- <p>Treat input as GS1 compatible data. Application Identifiers (AIs)
- should be placed in square brackets <code>"[]"</code> (but see
- <code>--gs1parens</code>).</p>
- </dd>
- <dt><code>--gs1nocheck</code></dt>
- <dd>
- <p>Do not check the validity of GS1 data.</p>
- </dd>
- <dt><code>--gs1parens</code></dt>
- <dd>
- <p>Process parentheses <code>"()"</code> as GS1 AI delimiters, rather
- than square brackets <code>"[]"</code>. The input data must not
- otherwise contain parentheses.</p>
- </dd>
- <dt><code>--gssep</code></dt>
- <dd>
- <p>For Data Matrix in GS1 mode, use <code>GS</code> (0x1D) as the GS1
- data separator instead of <code>FNC1</code>.</p>
- </dd>
- <dt><code>--guarddescent=NUMBER</code></dt>
- <dd>
- <p>For EAN/UPC symbols, set the height the guard bars descend below the
- main bars, where <em>NUMBER</em> is in X-dimensions. <em>NUMBER</em> may
- be floating-point.</p>
- </dd>
- <dt><code>--guardwhitespace</code></dt>
- <dd>
- <p>For EAN/UPC symbols, add quiet zone indicators <code>"<"</code>
- and/or <code>">"</code> to HRT where applicable.</p>
- </dd>
- <dt><code>--height=NUMBER</code></dt>
- <dd>
- <p>Set the height of the symbol in X-dimensions. <em>NUMBER</em> may be
- floating-point.</p>
- </dd>
- <dt><code>--heightperrow</code></dt>
- <dd>
- <p>Treat height as per-row. Affects Codablock-F, Code 16K, Code 49, GS1
- DataBar Expanded Stacked (DBAR_EXPSTK), MicroPDF417 and PDF417.</p>
- </dd>
- <dt><code>-i</code>, <code>--input=FILE</code></dt>
- <dd>
- <p>Read the input data from <em>FILE</em>. Specify a single hyphen
- (<code>-</code>) for <em>FILE</em> to read from stdin.</p>
- </dd>
- <dt><code>--init</code></dt>
- <dd>
- <p>Create a Reader Initialisation (Programming) symbol.</p>
- </dd>
- <dt><code>--mask=INTEGER</code></dt>
- <dd>
- <p>Set the masking pattern to use for DotCode, Han Xin or QR Code to
- <em>INTEGER</em>, overriding the automatic selection.</p>
- </dd>
- <dt><code>--mirror</code></dt>
- <dd>
- <p>Use the batch data to determine the filename in batch mode
- (<code>--batch</code>). The <code>-o</code> | <code>--output</code>
- option can be used to specify an output directory (any filename will be
- ignored).</p>
- </dd>
- <dt><code>--mode=INTEGER</code></dt>
- <dd>
- <p>For MaxiCode and GS1 Composite symbols, set the encoding mode to
- <em>INTEGER</em>.</p>
- <p>For MaxiCode (SCM is Structured Carrier Message, with 3 fields:
- postcode, 3-digit ISO 3166-1 country code, 3-digit service code):</p>
- <pre><code>2 SCM with 9-digit numeric postcode
- 3 SCM with 6-character alphanumeric postcode
- 4 Enhanced ECC for the primary part of the message
- 5 Enhanced ECC for all of the message
- 6 Reader Initialisation (Programming)</code></pre>
- <p>For GS1 Composite symbols (names end in <code>_CC</code>,
- i.e. EANX_CC, GS1_128_CC, DBAR_OMN_CC etc.):</p>
- <pre><code>1 CC-A
- 2 CC-B
- 3 CC-C (GS1_128_CC only)</code></pre>
- </dd>
- <dt><code>--nobackground</code></dt>
- <dd>
- <p>Remove the background colour (EMF, EPS, GIF, PNG, SVG and TIF
- only).</p>
- </dd>
- <dt><code>--noquietzones</code></dt>
- <dd>
- <p>Disable any quiet zones for symbols that define them by default.</p>
- </dd>
- <dt><code>--notext</code></dt>
- <dd>
- <p>Remove the Human Readable Text (HRT).</p>
- </dd>
- <dt><code>-o</code>, <code>--output=FILE</code></dt>
- <dd>
- <p>Send the output to <em>FILE</em>. When not in batch mode, the default
- is “out.png” (or “out.gif” if zint built without PNG support). When in
- batch mode (<code>--batch</code>), special characters can be used to
- format the output filenames:</p>
- <pre><code>~ Insert a number or 0
- # Insert a number or space
- @ Insert a number or * (+ on Windows)
- Any other Insert literally</code></pre>
- </dd>
- <dt><code>--primary=STRING</code></dt>
- <dd>
- <p>For MaxiCode, set the content of the primary message. For GS1
- Composite symbols, set the content of the linear symbol.</p>
- </dd>
- <dt><code>--quietzones</code></dt>
- <dd>
- <p>Add compliant quiet zones for symbols that specify them. This is in
- addition to any whitespace specified by <code>-w</code> |
- <code>--whitesp</code> or <code>--vwhitesp</code>.</p>
- </dd>
- <dt><code>-r</code>, <code>--reverse</code></dt>
- <dd>
- <p>Reverse the foreground and background colours (white on black). Known
- as “reflectance reversal” or “reversed reflectance”.</p>
- </dd>
- <dt><code>--rotate=INTEGER</code></dt>
- <dd>
- <p>Rotate the symbol by <em>INTEGER</em> degrees, where <em>INTEGER</em>
- can be 0, 90, 270 or 360.</p>
- </dd>
- <dt><code>--rows=INTEGER</code></dt>
- <dd>
- <p>Set the number of rows for Codablock-F or PDF417 to <em>INTEGER</em>.
- It will also set the minimum number of rows for Code 16K or Code 49, and
- the maximum number of rows for GS1 DataBar Expanded Stacked
- (DBAR_EXPSTK).</p>
- </dd>
- <dt><code>--scale=NUMBER</code></dt>
- <dd>
- <p>Adjust the size of the X-dimension. <em>NUMBER</em> may be
- floating-point, and is multiplied by 2 (except for MaxiCode) before
- being applied. The default scale is 1.</p>
- <p>For MaxiCode, the scale is multiplied by 10 for raster output, by 40
- for EMF output, and by 2 otherwise.</p>
- <p>Increments of 0.5 (half-integers) are recommended for non-MaxiCode
- raster output (BMP, GIF, PCX, PNG and TIF).</p>
- <p>See also <code>--scalexdimdp</code> below.</p>
- </dd>
- <dt><code>--scalexdimdp=X[,R]</code></dt>
- <dd>
- <p>Scale the image according to X-dimension <em>X</em> and resolution
- <em>R</em>, where <em>X</em> is in mm and <em>R</em> is in dpmm (dots
- per mm). <em>X</em> and <em>R</em> may be floating-point. <em>R</em> is
- optional and defaults to 12 dpmm (approximately 300 dpi). <em>X</em> may
- be zero in which case a symbology-specific default is used.</p>
- <p>The scaling takes into account the output filetype, and deals with
- all the details mentioned above. Units may be specified for <em>X</em>
- by appending “in” (inch) or “mm”, and for <em>R</em> by appending “dpi”
- (dots per inch) or “dpmm” -
- e.g. <code>--scalexdimdp=0.013in,300dpi</code>.</p>
- </dd>
- <dt><code>--scmvv=INTEGER</code></dt>
- <dd>
- <p>For MaxiCode, prefix the Structured Carrier Message (SCM) with
- <code>"[)>\R01\Gvv"</code>, where <code>vv</code> is a 2-digit
- <em>INTEGER</em>.</p>
- </dd>
- <dt><code>--secure=INTEGER</code></dt>
- <dd>
- <p>Set the error correction level (ECC) to <em>INTEGER</em>. The meaning
- is specific to the following matrix symbols (all except PDF417 are
- approximate):</p>
- <pre><code>Aztec Code 1 to 4 (10%, 23%, 36%, 50%)
- Grid Matrix 1 to 5 (10% to 50%)
- Han Xin 1 to 4 (8%, 15%, 23%, 30%)
- Micro QR 1 to 3 (7%, 15%, 25%) (L, M, Q)
- PDF417 0 to 8 (2^(INTEGER + 1) codewords)
- QR Code 1 to 4 (7%, 15%, 25%, 30%) (L, M, Q, H)
- rMQR 2 or 4 (15% or 30%) (M or H)
- Ultracode 1 to 6 (0%, 5%, 9%, 17%, 25%, 33%)</code></pre>
- </dd>
- <dt><code>--segN=ECI,DATA</code></dt>
- <dd>
- <p>Set the <em>ECI</em> & <em>DATA</em> content for segment N, where
- N is 1 to 9. <code>-d</code> | <code>--data</code> must still be given,
- and counts as segment 0, its ECI given by <code>--eci</code>. Segments
- must be consecutive.</p>
- </dd>
- <dt><code>--separator=INTEGER</code></dt>
- <dd>
- <p>Set the height of row separator bars for stacked symbologies, where
- <em>INTEGER</em> is in integral multiples of the X-dimension. The
- default is zero.</p>
- </dd>
- <dt><code>--small</code></dt>
- <dd>
- <p>Use a smaller font for Human Readable Text (HRT).</p>
- </dd>
- <dt><code>--square</code></dt>
- <dd>
- <p>For Data Matrix symbols, exclude rectangular sizes when considering
- automatic sizes. See also <code>--dmre</code>.</p>
- </dd>
- <dt><code>--structapp=I,C[,ID]</code></dt>
- <dd>
- <p>Set Structured Append info, where <em>I</em> is the 1-based index,
- <em>C</em> is the total number of symbols in the sequence, and
- <em>ID</em>, which is optional, is the identifier that all symbols in
- the sequence share. Structured Append is supported by Aztec Code, Code
- One, Data Matrix, DotCode, Grid Matrix, MaxiCode, MicroPDF417, PDF417,
- QR Code and Ultracode.</p>
- </dd>
- <dt><code>-t</code>, <code>--types</code></dt>
- <dd>
- <p>Display the table of barcode types (symbologies). The numbers or
- names can be used with <code>-b</code> | <code>--barcode</code>.</p>
- </dd>
- <dt><code>--textgap=NUMBER</code></dt>
- <dd>
- <p>Adjust the gap between the barcode and the Human Readable Text (HRT).
- <em>NUMBER</em> is in X-dimensions, and may be floating-point. Maximum
- is 10 and minimum is -5. The default is 1.</p>
- </dd>
- <dt><code>--vers=INTEGER</code></dt>
- <dd>
- <p>Set the symbol version (size, check digits, other options) to
- <em>INTEGER</em>. The meaning is symbol-specific.</p>
- <p>For most matrix symbols, it specifies size:</p>
- <pre><code>Aztec Code 1 to 36 (1 to 4 compact)
- 1 15x15 13 53x53 25 105x105
- 2 19x19 14 57x57 26 109x109
- 3 23x23 15 61x61 27 113x113
- 4 27x27 16 67x67 28 117x117
- 5 19x19 17 71x71 29 121x121
- 6 23x23 18 75x75 30 125x125
- 7 27x27 19 79x79 31 131x131
- 8 31x31 20 83x83 32 135x135
- 9 37x37 21 87x87 33 139x139
- 10 41x41 22 91x91 34 143x143
- 11 45x45 23 95x95 35 147x147
- 12 49x49 24 101x101 36 151x151
- Code One 1 to 10 (9 and 10 variable width) (WxH)
- 1 16x18 6 70x76
- 2 22x22 7 104x98
- 3 28x28 8 148x134
- 4 40x42 9 Wx8
- 5 52x54 10 Wx16
- Data Matrix 1 to 48 (31 to 48 DMRE) (HxW)
- 1 10x10 17 72x72 33 8x80
- 2 12x12 18 80x80 34 8x96
- 3 14x14 19 88x88 35 8x120
- 4 16x16 20 96x96 36 8x144
- 5 18x18 21 104x104 37 12x64
- 6 20x20 22 120x120 38 12x88
- 7 22x22 23 132x132 39 16x64
- 8 24x24 24 144x144 40 20x36
- 9 26x26 25 8x18 41 20x44
- 10 32x32 26 8x32 42 20x64
- 11 36x36 28 12x26 43 22x48
- 12 40x40 28 12x36 44 24x48
- 13 44x44 29 16x36 45 24x64
- 14 48x48 30 16x48 46 26x40
- 15 52x52 31 8x48 47 26x48
- 16 64x64 32 8x64 48 26x64
- Grid Matrix 1 to 13
- 1 18x18 6 78x78 11 138x138
- 2 30x30 7 90x90 12 150x150
- 3 42x42 8 102x102 13 162x162
- 4 54x54 9 114x114
- 5 66x66 10 126x126
- Han Xin 1 to 84
- 1 23x23 29 79x79 57 135x135
- 2 25x25 30 81x81 58 137x137
- 3 27x27 31 83x83 59 139x139
- 4 29x29 32 85x85 60 141x141
- 5 31x31 33 87x87 61 143x143
- 6 33x33 34 89x89 62 145x145
- 7 35x35 35 91x91 63 147x147
- 8 37x37 36 93x93 64 149x149
- 9 39x39 37 95x95 65 151x151
- 10 41x41 38 97x97 66 153x153
- 11 43x43 39 99x99 67 155x155
- 12 45x45 40 101x101 68 157x157
- 13 47x47 41 103x103 69 159x159
- 14 49x49 42 105x105 70 161x161
- 15 51x51 43 107x107 71 163x163
- 16 53x53 44 109x109 72 165x165
- 17 55x55 45 111x111 73 167x167
- 18 57x57 46 113x113 74 169x169
- 19 59x59 47 115x115 75 171x171
- 20 61x61 48 117x117 76 173x173
- 21 63x63 49 119x119 77 175x175
- 22 65x65 50 121x121 78 177x177
- 23 67x67 51 123x123 79 179x179
- 24 69x69 52 125x125 80 181x181
- 25 71x71 53 127x127 81 183x183
- 26 73x73 54 129x129 82 185x185
- 27 75x75 55 131x131 83 187x187
- 28 77x77 56 133x133 84 189x189
- Micro QR 1 to 4 (M1, M2, M3, M4)
- 1 11x11 3 15x15
- 2 13x13 4 17x17
- QR Code 1 to 40
- 1 21x21 15 77x77 29 133x133
- 2 25x25 16 81x81 30 137x137
- 3 29x29 17 85x85 31 141x141
- 4 33x33 18 89x89 32 145x145
- 5 37x37 19 93x93 33 149x149
- 6 41x41 20 97x97 34 153x153
- 7 45x45 21 101x101 35 157x157
- 8 49x49 22 105x105 36 161x161
- 9 53x53 23 109x109 37 165x165
- 10 57x57 24 113x113 38 169x169
- 11 61x61 25 117x117 39 173x173
- 12 65x65 26 121x121 40 177x177
- 13 69x69 27 125x125
- 14 73x73 28 129x129
- rMQR 1 to 38 (33 to 38 automatic width) (HxW)
- 1 7x43 14 11x77 27 15x139
- 2 7x59 15 11x99 28 17x43
- 3 7x77 16 11x139 29 17x59
- 4 7x99 17 13x27 30 17x77
- 5 7x139 18 13x43 31 17x99
- 6 9x43 19 13x59 32 17x139
- 7 9x59 20 13x77 33 7xW
- 8 9x77 21 13x99 34 9xW
- 9 9x99 22 13x139 35 11xW
- 10 9x139 23 15x43 36 13xW
- 11 11x27 24 15x59 37 15xW
- 12 11x43 25 15x77 38 17xW
- 13 11x59 26 15x99</code></pre>
- <p>For a number of linear symbols, it specifies check character options
- (“hide” or “hidden” means don’t show in HRT, “visible” means do display
- in HRT):</p>
- <pre><code>C25IATA 1 or 2 (add visible or hidden check digit)
- C25IND ditto
- C25INTER ditto
- C25LOGIC ditto
- C25STANDARD ditto
- Codabar 1 or 2 (add hidden or visible check digit)
- Code 11 0 to 2 (2 visible check digits to none)
- 0 (default 2 visible check digits)
- 1 (1 visible check digit)
- 2 (no check digits)
- Code 39 1 or 2 (add visible or hidden check digit)
- Code 93 1 (hide the default check characters)
- EXCODE39 1 or 2 (add visible or hidden check digit)
- LOGMARS 1 or 2 (add visible or hidden check digit)
- MSI Plessey 0 to 6 (none to various visible options)
- 1, 2 (mod-10, mod-10 + mod-10)
- 3, 4 (mod-11 IBM, mod-11 IBM + mod-10)
- 5, 6 (mod-11 NCR, mod-11 NCR + mod-10)
- +10 (hide)</code></pre>
- <p>For a few other symbologies, it specifies other characteristics:</p>
- <pre><code>Channel Code 3 to 8 (no. of channels)
- DAFT 50 to 900 (permille tracker ratio)
- DPD 1 (relabel)
- PZN 1 (PZN7 instead of default PZN8)
- Ultracode 2 (revision 2)
- VIN 1 (add international prefix)</code></pre>
- </dd>
- <dt><code>-v</code>, <code>--version</code></dt>
- <dd>
- <p>Display zint version.</p>
- </dd>
- <dt><code>--vwhitesp=INTEGER</code></dt>
- <dd>
- <p>Set the height of vertical whitespace above and below the barcode,
- where <em>INTEGER</em> is in integral multiples of the X-dimension.</p>
- </dd>
- <dt><code>-w</code>, <code>--whitesp=INTEGER</code></dt>
- <dd>
- <p>Set the width of horizontal whitespace either side of the barcode,
- where <em>INTEGER</em> is in integral multiples of the X-dimension.</p>
- </dd>
- <dt><code>--werror</code></dt>
- <dd>
- <p>Convert all warnings into errors.</p>
- </dd>
- </dl>
- <h2 id="exit-status">EXIT STATUS</h2>
- <dl>
- <dt><code>0</code></dt>
- <dd>
- Success (including when given informational options <code>-h</code> |
- <code>--help</code>, <code>-e</code> | <code>--ecinos</code>,
- <code>-t</code> | <code>--types</code>, <code>-v</code> |
- <code>--version</code>).
- </dd>
- <dt><code>1</code></dt>
- <dd>
- Human Readable Text was truncated (maximum 199 bytes)
- (<code>ZINT_WARN_HRT_TRUNCATED</code>)
- </dd>
- <dt><code>2</code></dt>
- <dd>
- Invalid option given but overridden by Zint
- (<code>ZINT_WARN_INVALID_OPTION</code>)
- </dd>
- <dt><code>3</code></dt>
- <dd>
- Automatic ECI inserted by Zint (<code>ZINT_WARN_USES_ECI</code>)
- </dd>
- <dt><code>4</code></dt>
- <dd>
- Symbol created not compliant with standards
- (<code>ZINT_WARN_NONCOMPLIANT</code>)
- </dd>
- <dt><code>5</code></dt>
- <dd>
- Input data wrong length (<code>ZINT_ERROR_TOO_LONG</code>)
- </dd>
- <dt><code>6</code></dt>
- <dd>
- Input data incorrect (<code>ZINT_ERROR_INVALID_DATA</code>)
- </dd>
- <dt><code>7</code></dt>
- <dd>
- Input check digit incorrect (<code>ZINT_ERROR_INVALID_CHECK</code>)
- </dd>
- <dt><code>8</code></dt>
- <dd>
- Incorrect option given (<code>ZINT_ERROR_INVALID_OPTION</code>)
- </dd>
- <dt><code>9</code></dt>
- <dd>
- Internal error (should not happen)
- (<code>ZINT_ERROR_ENCODING_PROBLEM</code>)
- </dd>
- <dt><code>10</code></dt>
- <dd>
- Error opening output file (<code>ZINT_ERROR_FILE_ACCESS</code>)
- </dd>
- <dt><code>11</code></dt>
- <dd>
- Memory allocation (malloc) failure (<code>ZINT_ERROR_MEMORY</code>)
- </dd>
- <dt><code>12</code></dt>
- <dd>
- Error writing to output file (<code>ZINT_ERROR_FILE_WRITE</code>)
- </dd>
- <dt><code>13</code></dt>
- <dd>
- Error counterpart of warning if <code>--werror</code> given
- (<code>ZINT_ERROR_USES_ECI</code>)
- </dd>
- <dt><code>14</code></dt>
- <dd>
- Error counterpart of warning if <code>--werror</code> given
- (<code>ZINT_ERROR_NONCOMPLIANT</code>)
- </dd>
- <dt><code>15</code></dt>
- <dd>
- Error counterpart of warning if <code>--werror</code> given
- (<code>ZINT_ERROR_HRT_TRUNCATED</code>)
- </dd>
- </dl>
- <h2 id="examples">EXAMPLES</h2>
- <p>Create “out.png” (or “out.gif” if zint built without PNG support) in
- the current directory, as a Code 128 symbol.</p>
- <div class="sourceCode" id="cb135"><pre
- class="sourceCode bash"><code class="sourceCode bash"><span id="cb135-1"><a href="#cb135-1" aria-hidden="true" tabindex="-1"></a><span class="ex">zint</span> <span class="at">-d</span> <span class="st">'This Text'</span></span></code></pre></div>
- <p>Create “qr.svg” in the current directory, as a QR Code symbol.</p>
- <div class="sourceCode" id="cb136"><pre
- class="sourceCode bash"><code class="sourceCode bash"><span id="cb136-1"><a href="#cb136-1" aria-hidden="true" tabindex="-1"></a><span class="ex">zint</span> <span class="at">-b</span> QRCode <span class="at">-d</span> <span class="st">'This Text'</span> <span class="at">-o</span> <span class="st">'qr.svg'</span></span></code></pre></div>
- <p>Use batch mode to read from an input file “ean13nos.txt” containing a
- list of 13-digit GTINs, each on a separate line, to create a series of
- EAN-13 barcodes, formatting the output filenames to “ean001.gif”,
- “ean002.gif” etc. using the special character “~”.</p>
- <div class="sourceCode" id="cb137"><pre
- class="sourceCode bash"><code class="sourceCode bash"><span id="cb137-1"><a href="#cb137-1" aria-hidden="true" tabindex="-1"></a><span class="ex">zint</span> <span class="at">-b</span> EANX <span class="at">--batch</span> <span class="at">-i</span> <span class="st">'ean13nos.txt'</span> <span class="at">-o</span> <span class="st">'ean~~~.gif'</span></span></code></pre></div>
- <h2 id="bugs">BUGS</h2>
- <p>Please send bug reports to
- https://sourceforge.net/p/zint/tickets/.</p>
- <h2 id="see-also">SEE ALSO</h2>
- <p>Full documention for <code>zint</code> (and the API
- <code>libzint</code> and the GUI <code>zint-qt</code>) is available
- from</p>
- <pre><code> https://zint.org.uk/manual/</code></pre>
- <p>and at</p>
- <pre><code> https://sourceforge.net/p/zint/docs/manual.txt</code></pre>
- <h2 id="conforming-to">CONFORMING TO</h2>
- <p>Zint is designed to be compliant with a number of international
- standards, including:</p>
- <p>ISO/IEC 24778:2008, ANSI/AIM BC12-1998, EN 798:1996, AIM ISS-X-24
- (1995), ISO/IEC 15417:2007, EN 12323:2005, ISO/IEC 16388:2007, ANSI/AIM
- BC6-2000, ANSI/AIM BC5-1995, AIM USS Code One (1994), ISO/IEC
- 16022:2006, ISO/IEC 21471:2019, ISO/IEC 15420:2009, AIMD014 (v 1.63)
- (2008), ISO/IEC 24723:2010, ISO/IEC 24724:2011, ISO/IEC 20830:2021,
- ISO/IEC 16390:2007, ISO/IEC 16023:2000, ISO/IEC 24728:2006, ISO/IEC
- 15438:2015, ISO/IEC 18004:2015, ISO/IEC 23941:2022, AIM ITS/04-023
- (2022)</p>
- <h2 id="copyright">COPYRIGHT</h2>
- <p>Copyright © 2024 Robin Stuart. Released under GNU GPL 3.0 or
- later.</p>
- <h2 id="author">AUTHOR</h2>
- <p>Robin Stuart <a href="mailto:robin@zint.org.uk"
- class="email">robin@zint.org.uk</a></p>
- <section id="footnotes" class="footnotes footnotes-end-of-document"
- role="doc-endnotes">
- <hr />
- <ol>
- <li id="fn1"><p>See the Homebrew website <a
- href="https://brew.sh">https://brew.sh</a>.<a href="#fnref1"
- class="footnote-back" role="doc-backlink">↩︎</a></p></li>
- <li id="fn2"><p>In Unicode contexts, BMP stands for Basic Multilingual
- Plane, the plane 0 codeset from U+0000 to U+D7FF and U+E000 to U+FFFF
- (i.e. excluding surrogates). Not to be confused with the Windows Bitmap
- file format BMP!<a href="#fnref2" class="footnote-back"
- role="doc-backlink">↩︎</a></p></li>
- <li id="fn3"><p>The symbologies marked with an asterisk (<code>*</code>)
- in Table <a href="#tbl:barcode_types">: Barcode Types (Symbologies)</a>
- above used different names in Zint before version 2.9.0. For example,
- symbology 29 used the name <code>BARCODE_RSS14</code>. These names are
- now deprecated but are still recognised by Zint and will continue to be
- supported in future versions.<a href="#fnref3" class="footnote-back"
- role="doc-backlink">↩︎</a></p></li>
- <li id="fn4"><p>The background is omitted for vector outputs EMF, EPS
- and SVG when <code>--nobackground</code> is given. For raster outputs
- GIF, PCX, PNG and TIF, the background’s alpha channel is set to zero
- (fully transparent).<a href="#fnref4" class="footnote-back"
- role="doc-backlink">↩︎</a></p></li>
- <li id="fn5"><p>Shift JIS (JIS X 0201 Roman) re-maps two ASCII
- characters: backslash (<code>\</code>) to the yen sign (¥), and tilde
- (<code>~</code>) to overline (U+203E).<a href="#fnref5"
- class="footnote-back" role="doc-backlink">↩︎</a></p></li>
- <li id="fn6"><p>ISO/IEC 646 Invariant is a subset of ASCII with 12
- characters undefined: <code>#</code>, <code>$</code>, <code>@</code>,
- <code>[</code>, <code>\</code>, <code>]</code>, <code>^</code>,
- <code>`</code>, <code>{</code>, <code>|</code>, <code>}</code>,
- <code>~</code>.<a href="#fnref6" class="footnote-back"
- role="doc-backlink">↩︎</a></p></li>
- <li id="fn7"><p>BARCODE_MEMORY_FILE textual formats EPS and SVG will
- have Unix newlines (LF) on both Windows and Unix, i.e. not CR+LF on
- Windows.<a href="#fnref7" class="footnote-back"
- role="doc-backlink">↩︎</a></p></li>
- <li id="fn8"><p>The <code>height</code> value is ignored for Aztec
- (including HIBC and Aztec Rune), Code One, Data Matrix (including HIBC),
- DotCode, Grid Matrix, Han Xin, MaxiCode, QR Code (including HIBC, Micro
- QR, rMQR and UPNQR), and Ultracode - all of which have a fixed
- width-to-height ratio (or, in the case of Code One, a fixed height).<a
- href="#fnref8" class="footnote-back" role="doc-backlink">↩︎</a></p></li>
- <li id="fn9"><p>For Windows, <code>outfile</code> is assumed to be UTF-8
- encoded.<a href="#fnref9" class="footnote-back"
- role="doc-backlink">↩︎</a></p></li>
- <li id="fn10"><p>The <code>BARCODE_BIND_TOP</code> flag is set by
- default for DPD - see <a href="#dpd-code">6.1.10.7 DPD Code</a>.<a
- href="#fnref10" class="footnote-back" role="doc-backlink">↩︎</a></p></li>
- <li id="fn11"><p>The <code>BARCODE_BIND</code> flag is always set for
- Codablock-F, Code 16K and Code 49. Special considerations apply to
- ITF-14 - see <a href="#itf-14">6.1.2.6 ITF-14</a>.<a href="#fnref11"
- class="footnote-back" role="doc-backlink">↩︎</a></p></li>
- <li id="fn12"><p>Codablock-F, Code 16K, Code 49, EAN-2 to EAN-13, ISBN,
- ITF-14, UPC-A and UPC-E have compliant quiet zones added by default.<a
- href="#fnref12" class="footnote-back" role="doc-backlink">↩︎</a></p></li>
- <li id="fn13"><p><code>ZINT_CAP_EANUPC</code> was previously named
- <code>ZINT_CAP_EXTENDABLE</code>, which is still recognised.<a
- href="#fnref13" class="footnote-back" role="doc-backlink">↩︎</a></p></li>
- <li id="fn14"><p><code>BARCODE_CODE128AB</code> previously used the name
- <code>BARCODE_CODE128B</code>, which is still recognised.<a
- href="#fnref14" class="footnote-back" role="doc-backlink">↩︎</a></p></li>
- <li id="fn15"><p>The DX Number may be looked up in The (Modified) Big
- Film Database at <a
- href="https://thebigfilmdatabase.merinorus.com">https://thebigfilmdatabase.merinorus.com</a>.<a
- href="#fnref15" class="footnote-back" role="doc-backlink">↩︎</a></p></li>
- </ol>
- </section>
- </body>
- </html>
|