Generovanie čiarových kódov a QR kódov v Jave

1. Prehľad

Čiarové kódy sa používajú na vizuálny prenos informácií. S najväčšou pravdepodobnosťou poskytneme vhodný obrázok čiarového kódu na webovej stránke, v e-maile alebo v dokumente pre tlač.

V tomto výučbe sa pozrieme na to, ako generovať najbežnejšie typy čiarových kódov v Jave.

Najprv sa dozvieme o vnútorných priestoroch niekoľkých druhov čiarových kódov. Ďalej preskúmame najobľúbenejšie knižnice Java na generovanie čiarových kódov. Na záver uvidíme, ako integrovať čiarové kódy do našej aplikácie ich poskytovaním z webovej služby pomocou Spring Boot.

2. Druhy čiarových kódov

Čiarové kódy kódujú informácie, ako sú čísla produktov, sériové čísla a čísla šarží. Umožňujú tiež stranám ako maloobchodníci, výrobcovia a poskytovatelia dopravy sledovať aktíva v celom dodávateľskom reťazci.

Mnoho rôznych symbolík čiarových kódov môžeme zoskupiť do dvoch základných kategórií:

  • lineárne čiarové kódy
  • 2D čiarové kódy

2.1. Kódy UPC (Universal Product Code)

Kódy UPC sú jedny z najbežnejšie používaných 1D čiarových kódov a väčšinou ich nájdeme v Spojených štátoch.

UPC-A je iba číselný kód, ktorý obsahuje 12 číslic: identifikačné číslo výrobcu (6 číslic), číslo položky (5 číslic) a kontrolná číslica. K dispozícii je tiež kód UPC-E, ktorý má iba 8 číslic a používa sa pre malé balenia.

2.2. EAN kódy

Kódy EAN sú na celom svete známe ako európske číslo článku, aj ako medzinárodné číslo článku. Sú určené na skenovanie na mieste predaja. Existuje tiež niekoľko rôznych variácií kódu EAN, vrátane EAN-13, EAN-8, JAN-13 a ISBN.

Kód EAN-13 je najbežnejšie používaný štandard EAN a je podobný kódu UPC. Skladá sa z 13 číslic - predná „0“, za ktorou nasleduje kód UPC-A.

2.3. Kód 128

Čiarový kód Code 128 je kompaktný lineárny kód s vysokou hustotou používané v logistickom a dopravnom priemysle na objednávanie a distribúciu. Môže kódovať všetkých 128 znakov ASCIIa jeho dĺžka je variabilná.

2.4. PDF417

PDF417 je naskladaný lineárny čiarový kód pozostávajúci z viacerých 1D čiarových kódov naskladaných jeden na druhom. Môže teda používať tradičný lineárny skener.

Možno by sme očakávali, že ho nájdeme v rôznych aplikáciách, ako sú cestovanie (palubné lístky), identifikačné karty a správa zásob.

Súbor PDF417 používa opravu chýb podľa Reed-Solomonovej namiesto kontrolných číslic. Táto oprava chyby umožňuje symbolu vydržať určité poškodenie bez straty dát. Môže však byť expanzívna - 4-krát väčšia ako iné 2D čiarové kódy, ako sú Datamatrix a QR Codes.

2.5. QR kódy

QR kódy sa stávajú najrozšírenejšími 2D čiarovými kódmi na svete. Veľkou výhodou QR kódu je to môžeme uložiť obmedzené množstvo dát na obmedzenom priestore.

Na efektívne ukladanie dát používajú štyri štandardizované režimy kódovania:

  • číselný
  • alfanumerický
  • bajt / binárne
  • kanji

Navyše majú flexibilnú veľkosť a dajú sa ľahko skenovať pomocou smartfónu. Podobne ako PDF417, aj QR kód vydrží určité poškodenie bez straty dát.

3. Knižnice čiarových kódov

Preskúmame niekoľko knižníc:

  • Opekačka
  • Čiarový kód4j
  • ZXing
  • QRGen

Opekačka je open-source knižnica Java, ktorá podporuje rozsiahlu sadu formátov 1D čiarových kódov. Čiarové kódy je tiež možné odosielať do formátu PNG, GIF, JPEG a SVG.

Čiarový kód4j je tiež knižnica otvoreného zdroja. Okrem toho ponúka formáty 2D čiarových kódov - napríklad DataMatrix a PDF417 - a ďalšie výstupné formáty. Formát PDF417 je k dispozícii v oboch knižniciach. Ale na rozdiel od Barcode4j to Barbecue považuje za lineárny čiarový kód.

ZXing („Prechod pre chodcov“) je otvorená, viacformátová 1D / 2D knižnica na spracovanie čiarových kódov, implementovaná v prostredí Java, s portami do ďalších jazykov. To je hlavná knižnica, ktorá podporuje QR kódy v Jave.

QRGen knižnica ponúka jednoduché API na generovanie QRCode postavené na vrchole ZXingu. Poskytuje samostatné moduly pre Java a Android.

4. Generovanie lineárnych čiarových kódov

Vytvorme generátor obrázkov čiarových kódov pre každú dvojicu knižníc a čiarových kódov. Obrázok načítame vo formáte PNG, ale môžeme použiť aj iné formáty, ako napríklad GIF alebo JPEG.

4.1. Používanie knižnice na grilovanie

Ako uvidíme, Barbecue poskytuje najjednoduchšie API na generovanie čiarových kódov. Musíme iba poskytnúť text čiarového kódu ako minimálne zadanie. Voliteľne sme ale mohli nastaviť písmo a rozlíšenie (bodov na palec). Čo sa týka písma, môžeme ho použiť na zobrazenie textu čiarového kódu pod obrázkom.

Najprv musíme pridať závislosť Barbecue Maven:

 net.sourceforge.gril barbecue 1.5-beta1 

Vytvorme generátor pre čiarový kód EAN13:

public static BufferedImage generateEAN13BarcodeImage (String barcodeText) throws Exception {Barcode barcode = BarcodeFactory.createEAN13 (barcodeText); barcode.setFont (BARCODE_TEXT_FONT); vrátiť BarcodeImageHandler.getImage (čiarový kód); }

Môžeme generovať obrázky pre ostatné typy lineárnych čiarových kódov podobným spôsobom.

Mali by sme poznamenať, že nemusíme uvádzať číslicu kontrolného súčtu pre čiarové kódy EAN / UPC, pretože ju automaticky pridáva knižnica.

4.2. Používanie knižnice Barcode4j

Začnime pridaním závislosti Barcode4j Maven:

 net.sf.barcode4j čiarový kód4j 2.1 

Rovnako vytvorme generátor pre čiarový kód EAN13:

public static BufferedImage generateEAN13BarcodeImage (String barcodeText) {EAN13Bean barcodeGenerator = new EAN13Bean (); BitmapCanvasProvider canvas = new BitmapCanvasProvider (160, BufferedImage.TYPE_BYTE_BINARY, false, 0); barcodeGenerator.generateBarcode (canvas, barcodeText); vrátiť canvas.getBufferedImage (); }

The BitmapCanvasProvider konštruktor má niekoľko parametrov: rozlíšenie, typ obrázka, či má povoliť vyhladzovanie a orientácia obrázka. Tiež nemusíme nastavovať písmo, pretože text pod obrázkom sa štandardne zobrazuje.

4.3. Používanie knižnice ZXing

Tu musíme pridať dve závislosti Maven: knižnicu základných obrazov a klienta Java:

 com.google.zxing jadro 3.3.0 com.google.zxing javase 3.3.0 

Vytvorme generátor EAN13:

public static BufferedImage generateEAN13BarcodeImage (String barcodeText) vyvolá výnimku {EAN13Writer barcodeWriter = nový EAN13Writer (); BitMatrix bitMatrix = barcodeWriter.encode (barcodeText, BarcodeFormat.EAN_13, 300, 150); return MatrixToImageWriter.toBufferedImage (bitMatrix); }

Tu musíme zadať niekoľko parametrov ako vstup, napríklad text čiarového kódu, formát čiarového kódu a rozmery čiarového kódu. Na rozdiel od ďalších dvoch knižníc musíme tiež pridať číslicu kontrolného súčtu pre čiarové kódy EAN. Pre čiarové kódy UPC-A je však kontrolný súčet voliteľný.

Táto knižnica navyše nebude pod obrázkom zobrazovať text čiarového kódu.

5. Generovanie 2D čiarových kódov

5.1. Používanie knižnice ZXing

Túto knižnicu použijeme na vygenerovanie QR kódu. API je podobné lineárnym čiarovým kódom:

public static BufferedImage generateQRCodeImage (String barcodeText) vyvolá výnimku {QRCodeWriter barcodeWriter = nový QRCodeWriter (); BitMatrix bitMatrix = barcodeWriter.encode (barcodeText, BarcodeFormat.QR_CODE, 200, 200); return MatrixToImageWriter.toBufferedImage (bitMatrix); }

5.2. Pomocou knižnice QRGen

Knižnica už nie je nasadená v Maven Central, ale nájdeme ju na jitpack.io.

Najprv musíme do nášho pom.xml pridať úložisko jitpack a závislosť QRGen:

  jitpack.io //jitpack.io com.github.kenglxn.qrgen javase 2.6.0 

Vytvorme metódu, ktorá generuje QR kód:

public static BufferedImage generateQRCodeImage (String barcodeText) vyvolá výnimku {ByteArrayOutputStream stream = QRCode .from (barcodeText) .withSize (250, 250) .stream (); ByteArrayInputStream bis = nový ByteArrayInputStream (stream.toByteArray ()); vrátiť ImageIO.read (bis); }

Ako vidíme, API je založené na vzorci Builder a poskytuje dva typy výstupu: Súbor a OutputStream. Môžeme použiť ImageIO knižnica na jeho prevedenie do formátu a BufferedImage.

6. Budovanie služby REST

Teraz máme na výber knižnicu čiarových kódov, poďme sa pozrieť na to, ako poskytovať čiarové kódy z webovej služby Spring Boot.

Začneme s RestController:

@RestController @RequestMapping ("/ barcodes") verejná trieda BarcodesController {@GetMapping (value = "/ barbecue / ean13 / {barcode}", produce = MediaType.IMAGE_PNG_VALUE) public ResponseEntity barbecueEAN13Barcode (@PathVariable (čiarový kód)) hodí Exception {return okResponse (BarbecueBarcodeGenerator.generateEAN13BarcodeImage (barcode)); } // ...}

Musíme tiež manuálne zaregistrujte prevodník správ pre odpovede HTTP BufferedImage pretože neexistuje predvolené nastavenie:

@Bean public HttpMessageConverter createImageHttpMessageConverter () {vrátiť nový BufferedImageHttpMessageConverter (); }

Na záver môžeme na zobrazenie vygenerovaných čiarových kódov použiť program Postman alebo prehliadač.

6.1. Generuje sa čiarový kód UPC-A

Zavoláme webovú službu UPC-A pomocou knižnice Barbecue:

[GET] // localhost: 8080 / barcodes / barbecue / upca / 12345678901

Výsledok:

6.2. Generuje sa čiarový kód EAN13

Podobne zavoláme webovú službu EAN13:

[GET] // localhost: 8080 / barcodes / barbecue / ean13 / 012345678901

A tu je náš čiarový kód:

6.3. Generuje sa čiarový kód Code128

V takom prípade použijeme metódu POST. Zavoláme webovú službu Code128 pomocou knižnice Barbecue:

[POST] // localhost: 8080 / barcodes / barbecue / code128

Poskytneme telo žiadosti obsahujúce údaje:

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.

Pozrime sa na výsledok:

6.4. Generuje sa čiarový kód PDF417

Tu zavoláme webovú službu PDF417, ktorá je podobná kódu Code128:

[POST] // localhost: 8080 / barcodes / barbecue / pdf417

Poskytneme telo žiadosti, ktoré obsahuje údaje:

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.

A tu je výsledný čiarový kód:

6.5. Generovanie čiarového kódu QR kódu

Zavoláme webovú službu QR Code pomocou knižnice ZXing:

[POST] // localhost: 8080 / barcodes / zxing / qrcode

Poskytneme telo žiadosti, ktoré obsahuje údaje:

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo contraat.

Tu je náš QR kód:

Tu vidíme silu QR kódov na ukladanie veľkého množstva dát do obmedzeného priestoru.

7. Záver

V tomto článku sme sa naučili, ako generovať najbežnejšie typy čiarových kódov v Jave.

Najskôr sme študovali formáty niekoľkých typov lineárnych a 2D čiarových kódov. Ďalej sme preskúmali najobľúbenejšie knižnice Java na ich generovanie. Aj keď sme vyskúšali niekoľko jednoduchých príkladov, môžeme študovať knižnice, aby sme našli viac prispôsobených implementácií.

Nakoniec sme videli, ako integrovať generátory čiarových kódov do služby REST a ako ich otestovať.

Ako vždy, ukážkový kód z tohto tutoriálu je k dispozícii na GitHub.