Čiarový kód nie je obrázok, ktorým zdobíte dokument. Je to meranie a skener je nástroj, ktorý ho sníma. Toto preformulovanie rozhoduje takmer o všetkom, ako by ste ho mali nakresliť do PDF. Čiary nenesú žiadne informácie svojou čiernosťou; informácie žijú v pomere šírok čiar a medzier a čítačka ich obnovuje načasovaním prechodov, keď laser alebo senzor prechádza naprieč. Ak túto geometriu stlačíte, rozmažete alebo jej preplníte okraje, vyprodukujete niečo, čo vyzerá presne ako čiarový kód, no skenuje sa ako šmuha. HotPDF vám dáva dva spôsoby, ako ho umiestniť na stránku, a rozdiel medzi nimi je presne rozdiel medzi riadením tejto geometrie a vzdaním sa ho

Čo HotPDF dokáže zakódovať
HotPDF kreslí lineárne (jednorozmerné) symboliky a ich sada je širšia, ako potrebuje väčšina projektov. Enumerácia THPDFBarcodeType pokrýva rodinu Code 2 of 5 v prekladanej (interleaved), priemyselnej a maticovej forme; Code 39 a jej rozšírený variant; tri podmnožiny Code 128 (A, B a C); Code 93 (čistý a rozšírený); MSI; PostNet; Codabar; maloobchodnú skupinu UPC a EAN, a to EAN-8, EAN-13, UPC-A, komprimované UPC-E0 a UPC-E1 a 2- a 5-miestne doplnky UPC; ako aj podmnožiny GS1-128 (EAN-128). To stačí na pokrytie štítkov dodávateľského reťazca, maloobchodných pokladní a starších priemyselných kódov, ktoré sú stále živé v skladoch
Čo nekreslí, je dvojrozmerná rodina. Nie je tu žiadne QR, Data Matrix ani PDF417. Tieto kódujú bajty v mriežke so svojou vlastnou matematikou opráv chýb a ak požiadavka vymenúva jeden z nich, toto je nesprávny nástroj a mali by ste to vedieť skôr, ako na tom začnete stavať, nie až potom. Pre jednorozmerné kódy je praktická otázka užšia: ktorá symbolika prijme údaje, ktoré reálne máte, pretože kódovania nie sú zameniteľné
Dátové obmedzenia sú reálne a udrú pri generovaní. Varianty Code 2 of 5 a MSI berú iba číslice. Code 39 obsahuje veľké písmená, číslice a hŕstku interpunkčných znamienok; ak potrebujete malé písmená alebo celý rozsah ASCII, je to Code 39 Extended alebo podmnožina Code 128. Code 128C balí dve číslice do každého symbolu pre hustotu, takže chce číselný reťazec s párnou dĺžkou a nič iné. EAN-13 očakáva dvanásť číslic a počíta trinástu ako kontrolu; EAN-8 očakáva sedem a počíta ôsmu; UPC-A berie dvanásť. Dajte symbolike údaje, ktoré nedokáže reprezentovať, a nedostanete užitočnú výnimku, dostanete čiarový kód, ktorý kóduje odpad, čo je ešte horšie, pretože vyzerá v poriadku, kým ho niekto nenaskenuje na pokladni
Dve cesty kreslenia, dve úrovne kontroly
Metóda, po ktorej by ste mali siahnuť v produkcii, je DrawBarcode na objekte stránky. Prijíma symboliku, pozíciu, výšku a jeden parameter, na ktorom záleží viac ako na ostatných: MUnit, šírka modulu. Modul je šírka najužšej čiary, atóm, od ktorého sa odvíja každá iná miera v kóde ako jeho násobok, a tu je vyjadrená v bodoch (points). Všetko o tom, či sa vytlačený výsledok skenuje, sa dá vystopovať späť k tomuto jedinému celému číslu
var
Pdf: THotPDF;
begin
Pdf := THotPDF.Create(nil);
try
Pdf.FileName := 'label.pdf';
Pdf.BeginDoc;
// BCType, X, Y, Height, MUnit (module width in points), angle,
// data, UseCheckSum, bar color, background color.
Pdf.CurrentPage.DrawBarcode(
bcCodeEAN13, // symbology
72, 680, // X, Y in points from the bottom-left
60, // bar height
1, // MUnit: 1pt narrowest bar
0, // no rotation
'123456789012', // 12 digits; the 13th is the check
True, // append the modulo-10 check digit
clBlack, clWhite); // bars black, background white
Pdf.EndDoc;
finally
Pdf.Free;
end;
end;
Dva argumenty si zaslúžia bližší pohľad. UseCheckSum pridáva kontrolnú číslicu modulo-10, ktorú symbolika očakáva, a pre maloobchodné kódy ju takmer vždy chcete mať ako True; vypnite ju iba vtedy, keď vaše údaje už nesú vopred vypočítanú kontrolnú číslicu, inak dostanete zdvojenú číslicu. Farby čiar a pozadia sú posledné dva parametre a pokušenie byť tu kreatívny je pascou, o ktorej sa hovorí nižšie. Všimnite si tiež počiatok súradníc: ako každé iné volanie kreslenia v HotPDF, X a Y sa merajú od ľavého dolného rohu stránky v bodoch, pričom Y rastie nahor – to je konvencia, ktorou prechádza príklad Hello World
Druhou cestou je DirectDrawBarcode, ktorá prijíma údaje a ohraničujúci obdĺžnik X, Y, Width, Height a prispôsobuje vzor čiar tak, aby vyplnil túto šírku. Je to vhodné na rozloženie kódov do mriežky, pretože zadáte pôdorys a metóda do neho vloží čiary. Toto pohodlie je zároveň jej rizikom. Keď jej zadáte šírku, už nenastavujete veľkosť modulu; metóda rozdelí priestor, ktorý jej povolíte, medzi toľko čiar, koľko dáta potrebujú, a najužšou čiarou sa stane to, čo z tohto rozdelenia vypadne. Požiadajte o hustý reťazec Code 128 vnútri škatule, ktorá je príliš úzka, a moduly sa nepozorovane zmenšia pod to, čo dokáže akýkoľvek skener rozlíšiť. Pre čokoľvek, čo sa má spoľahlivo skenovať, uprednostnite DrawBarcode a úmyselne nastavte MUnit. DirectDrawBarcode si nechajte pre náhľady a pre usporiadania, pri ktorých ste merali a uistili ste sa, že výsledné čiary zostávajú čitateľné
Šírka modulu je rozhodnutie o rozlíšení
Tu je aritmetika, ktorá určuje, či váš štítok funguje. Laserový skener aj kamera majú najmenší detail, ktorý dokážu rozoznať, a úzka čiara musí po vytlačení pohodlne padnúť nad túto hranicu. Široko citovanou spodnou hranicou pre lineárne kódy na všeobecné použitie je úzka čiara veľkosti 13 míl (mil), asi 0,33 mm, a mnohé maloobchodné a priemyselné príručky s ňou zaobchádzajú skôr ako s minimom, než cieľom. Preložte to do jednotiek PDF: jeden bod (point) je 1/72 palca, zhruba 0,353 mm, takže jeden bod šírky modulu sedí presne na tejto spodnej hranici. To je dôvod, prečo je MUnit := 1 najmenšou hodnotou, ktorej by ste mali dôverovať pre kód určený skutočnému skeneru, a prečo jeho zdvojnásobenie na 2 kupuje priestor pre chybu, ktorý takmer nič nestojí na štítku s voľným priestorom
Teraz to spojte s výstupným rozlíšením, pretože modul musí tiež prežiť tlačiareň. Na laserovej tlačiarni s rozlíšením 300 DPI je jedna bodka (dot) zariadenia 1/300 palca, takže jednobodový modul (point) má šírku asi štyri bodky (dots). Štyri bodky sotva stačia na vykreslenie čistej hrany; roztekanie tonera a mierna chyba registrácie do toho zasiahnu a čiara, ktorá vo vašom PDF merala jeden bod, sa vytlačí hrubšia alebo tenšia, ako to dovoľuje špecifikácia. Zvýšte modul na 2 body a máte k dispozícii osem bodiek zariadenia, ktoré túto nepresnosť absorbujú. Pravidlo, ktoré stojí za to si osvojiť: šírka modulu, ktorú nastavíte v bodoch PDF, sa musí mapovať na celé a pohodlné množstvo bodiek zariadenia (dots) vo vašom skutočnom rozlíšení tlače, nie rozlíšení, aké by ste chceli mať. Kód, ktorý sa bezchybne naskenuje z obrazovky a zlyhá na tlačiarenskom výstupe v sklade, takmer vždy zlyhal v tomto teste
Tichá zóna je súčasťou symbolu
Najčastejším dôvodom, prečo sa správne zakódovaný čiarový kód nedá naskenovať, je tichá zóna – prázdny okraj na oboch stranách čiar. Skenery využívajú túto prázdnotu na to, aby zistili, kde kód začína a kde končí; bez nej čítačka nedokáže rozlíšiť prvú čiaru od toho, čo sa vedľa nej na stránke nachádza. Štandardy sú špecifické. Väčšina lineárnych symbolík vyžaduje tichú zónu s minimálne desaťnásobkom šírky modulu na každej strane a maloobchodné kódy UPC a EAN vyžadujú deväť modulov vľavo a sedem vpravo. Pri module veľkosti jedného bodu je to zhruba desať bodov, čo je asi sedmina palca, zaručeného prázdneho miesta lemujúceho čiary
HotPDF kreslí čiary a nič viac. Nevyhradzuje tichú zónu za vás, čo znamená, že je to vaša zodpovednosť a ľahko sa na ňu zabúda. Spôsob zlyhania je nenápadný: umiestnite čiarový kód zarovnane s okrajom bunky tabuľky alebo necháte rozloženie stránky natlačiť k nemu logo a kód, ktorý prešiel každým testom na prázdnej stránke, sa prestane skenovať v momente, keď je odoslaný v skutočnom dokumente. Tento okraj si vyhraďte výslovne. Predtým, ako zavoláte DrawBarcode, nechajte na oboch stranách aspoň desaťnásobok šírky modulu čistého priestoru a s každou grafikou, čiarou alebo textom, ktorý do tohto pásu zasahuje, zaobchádzajte ako s chybou, nie ako s kozmetickou voľbou
Farba, kontrast a riadok čitateľný pre človeka
Farby čiar a pozadia existujú, aby ste mohli prispôsobiť paletu značky, a sú najrýchlejším spôsobom, ako rozbiť inak funkčný kód. Skenery čítajú kontrast, klasicky pomocou červeného svetla, a očakávajú tmavé čiary na svetlom podklade. Čierna na bielej je jediná kombinácia, po ktorej by ste mali siahnuť bez testovania. Tmavomodrá alebo tmavozelená na bielej môže prejsť; čokoľvek s nízkym jasovým kontrastom a najmä červené čiary, ktoré snímač červeného svetla vidí ako pozadie, nebudú fungovať. Ak návrhár žiada farebné čiarové kódy, úprimná odpoveď znie, že čiary zostanú čierne a farba pôjde na štítku niekde inde
Cesta DrawBarcode dokáže vykresliť aj text čitateľný pre človeka, ktorý sa nachádza pod čiarami – sú to číslice, ktoré predavač vyťuká, keď zlyhá skenovanie. Tento text slúži ako záchrana, nie ako dekorácia, takže keď umiestňujete svoj vlastný popisok, držte ho mimo tichej zóny; nálepka symboliky natlačená do bočného okraja popiera ten istý prázdny priestor, od ktorého závisí skener. Polia v tomto príklade vrátane TextOut pre akékoľvek okolité štítky, sú rovnaké volania na kreslenie opísané v príručke pre výstup zostáv, na ktorú sa oplatí obrátiť, keď je čiarový kód jedným prvkom vo väčšej kompozičnej stránke
Krátky návyk na overovanie
Vektorové čiary sú výhodou, ktorú sa oplatí spomenúť. Pretože DrawBarcode zapisuje kód pomocou operátorov kreslenia PDF a nie ako rastrovaný obrázok, čiary zostávajú ostré pri akomkoľvek priblížení a súbor nemá žiadne vlastné rozlíšenie; jediné rozlíšenie, na ktorom záleží, je to v tlačiarni. To vás neospravedlňuje od testovania, to len znamená, že test sa musí vykonať na papieri. Vygenerujte vzorku, vytlačte ju na zariadení s najnižším rozlíšením, s akým sa vaše kódy skutočne stretnú, a naskenujte ju pomocou rovnakej triedy čítačiek, akú držia vaši používatelia, a nie špičkovým snímačom na vašom stole. Skontrolujte tiché zóny na výtlačku pomocou pravítka, uistite sa, že šírka modulu prežila cestu z bodov na bodky a overte si, že dekódovaná hodnota súhlasí s tou, ktorú ste zakódovali, vrátane kontrolnej číslice. Päť minút so skutočným skenerom zachytí každé zlyhanie opísané vyššie a zachytí ich skôr, ako to urobí paleta nesprávne označeného tovaru
Metódy DrawBarcode a DirectDrawBarcode zobrazené tu sú súčasťou komponentu HotPDF pre Delphi a C++Builder