Generiranje crtičnih kodova i QR kodova u Javi

1. Pregled

Barkodovi se koriste za vizualno prenošenje informacija. Najvjerojatnije ćemo pružiti odgovarajuću sliku crtičnog koda na web stranici, e-pošti ili dokumentu za ispis.

U ovom ćemo uputstvu pogledati kako generirati najčešće tipove crtičnih kodova u Javi.

Prvo ćemo naučiti o unutrašnjosti nekoliko vrsta crtičnih kodova. Dalje ćemo istražiti najpopularnije Java knjižnice za generiranje crtičnih kodova. Napokon, vidjet ćemo kako integrirati barkodove u našu aplikaciju tako da ih poslužujemo s web usluge pomoću Spring Boot-a.

2. Vrste barkodova

Crtični kodovi kodiraju informacije poput brojeva proizvoda, serijskih brojeva i brojeva serija. Također, omogućuju strankama poput maloprodaje, proizvođača i pružatelja usluga prijevoza da prate imovinu kroz čitav opskrbni lanac.

Mnogo različitih simbolika crtičnog koda možemo grupirati u dvije osnovne kategorije:

  • linearni crtični kodovi
  • 2D crtični kodovi

2.1. UPC (univerzalni kod proizvoda) kodovi

UPC kodovi su neki od najčešće korištenih 1D barkodova, a uglavnom ih nalazimo u Sjedinjenim Državama.

UPC-A je numerički kôd koji sadrži 12 znamenki: identifikacijski broj proizvođača (6 znamenki), broj predmeta (5 znamenki) i kontrolna znamenka. Postoji i UPC-E kôd koji ima samo 8 znamenki i koristi se za male pakete.

2.2. EAN kodovi

EAN kodovi su širom svijeta poznati i kao Europski broj članka i kao Međunarodni broj članka. Dizajnirani su za skeniranje na prodajnom mjestu. Postoji i nekoliko različitih varijacija EAN koda, uključujući EAN-13, EAN-8, JAN-13 i ISBN.

EAN-13 kôd najčešće se koristi EAN standard i sličan je UPC kodu. Sastoji se od 13 znamenki - vodećih 0, a slijedi UPC-A kôd.

2.3. Šifra 128

Crtični kod Code 128 kompaktan je linearni kod visoke gustoće koristi se u logističkoj i transportnoj industriji za naručivanje i distribuciju. Može kodirati svih 128 znakova ASCII, a duljina mu je promjenjiva.

2.4. PDF417

PDF417 je naslagani linearni crtični kod koji se sastoji od više 1D crtičnih kodova složenih jedan na drugi. Stoga se može koristiti tradicionalnim linearnim skenerom.

Mogli bismo očekivati ​​da će ga pronaći u raznim aplikacijama, poput putovanja (ukrcajne karte), identifikacijskih kartica i upravljanja zalihama.

PDF417 koristi ispravljanje pogrešaka Reed-Solomon umjesto kontrolnih znamenki. Ova korekcija pogreške omogućuje simbolu da podnese određenu štetu bez gubitka podataka. Međutim, može biti velike veličine - 4 puta veći od ostalih 2D crtičnih kodova kao što su Datamatrix i QR kodovi.

2.5. QR kodovi

QR kodovi postaju najpriznatiji 2D barkodovi u svijetu. Velika prednost QR koda je u tome velike količine podataka možemo pohraniti u ograničenom prostoru.

Za učinkovito pohranjivanje podataka koriste četiri standardizirana načina kodiranja:

  • brojčani
  • alfanumerički
  • bajt / binarni
  • kanji

Štoviše, fleksibilne su veličine i lako se skeniraju pomoću pametnog telefona. Slično PDF417, QR kôd može podnijeti određenu štetu bez gubitka podataka.

3. Knjižnice s crtičnim kodom

Istražit ćemo nekoliko knjižnica:

  • Roštilj
  • Barkod4j
  • ZXing
  • QRGen

Roštilj je biblioteka Java otvorenog koda koja podržava opsežni skup 1D formata crtičnog koda. Također, crtični kodovi mogu se izlaziti u PNG, GIF, JPEG i SVG.

Barkod4j je također biblioteka otvorenog koda. Uz to, nudi 2D formate crtičnih kodova - poput DataMatrix i PDF417 - i više izlaznih formata. Format PDF417 dostupan je u obje knjižnice. No, za razliku od Barcode4j, Barbecue ga smatra linearnim crtičnim kodom.

ZXing („Zebra križanje“) je biblioteka za obradu slika s crtičnim kodom višestrukog formata 1D / 2D otvorenog koda implementirana u Javi s priključcima na druge jezike. Ovo je glavna knjižnica koja podržava QR kodove u Javi.

QRGen Biblioteka nudi jednostavan API za generiranje QRCodea izgrađen na vrhu ZXinga. Pruža zasebne module za Javu i Android.

4. Generiranje linearnih crtičnih kodova

Stvorimo generator slika crtičnog koda za svaku knjižnicu i par crtičnih kodova. Dohvatit ćemo sliku u PNG formatu, ali mogli bismo koristiti i druge formate kao što su GIF ili JPEG.

4.1. Korištenje knjižnice s roštiljem

Kao što ćemo vidjeti, Barbecue nudi najjednostavniji API za generiranje crtičnih kodova. Tekst crtičnog koda moramo pružiti samo kao minimalni unos. Ali po želji bismo mogli postaviti font i razlučivost (točkice po inču). Što se tiče fonta, pomoću njega možemo prikazati tekst crtičnog koda ispod slike.

Prvo, moramo dodati ovisnost Barbecue Maven:

 net.sourceforge.barbecue roštilj 1.5-beta1 

Stvorimo generator za EAN13 crtični kod:

javna statička BufferedImage generiraEAN13BarcodeImage (string barcodeText) baca iznimku {Barcode barcode = BarcodeFactory.createEAN13 (barcodeText); barcode.setFont (BARCODE_TEXT_FONT); vratiti BarcodeImageHandler.getImage (crtični kod); }

Na sličan način možemo generirati slike za ostale linearne crtične kodove.

Trebali bismo napomenuti da ne trebamo navesti znamenku kontrolne sume za EAN / UPC crtične kodove, jer je automatski dodaje knjižnica.

4.2. Korištenje knjižnice Barcode4j

Počnimo s dodavanjem ovisnosti Barcode4j Maven:

 net.sf.barcode4j barcode4j 2.1 

Isto tako, izradimo generator za EAN13 crtični kod:

javna statička BufferedImage generiraEAN13BarcodeImage (String barcodeText) {EAN13Bean barcodeGenerator = new EAN13Bean (); BitmapCanvasProvider platno = novo BitmapCanvasProvider (160, BufferedImage.TYPE_BYTE_BINARY, false, 0); barcodeGenerator.generateBarcode (platno, crtični tekst); vratiti canvas.getBufferedImage (); }

The BitmapCanvasProvider konstruktor uzima nekoliko parametara: razlučivost, vrstu slike, hoće li omogućiti antialiasing i orijentaciju slike. Također, ne trebamo postavljati font jer tekst ispod slike prikazan je prema zadanim postavkama.

4.3. Korištenje ZXing knjižnice

Ovdje trebamo dodati dvije Mavenove ovisnosti: osnovnu biblioteku slika i Java klijent:

 com.google.zxing jezgra 3.3.0 com.google.zxing javase 3.3.0 

Stvorimo EAN13 generator:

javna statička BufferedImage generiraEAN13BarcodeImage (String barcodeText) baca izuzetak {EAN13Writer barcodeWriter = novi EAN13Writer (); BitMatrix bitMatrix = barcodeWriter.encode (barcodeText, BarcodeFormat.EAN_13, 300, 150); vratiti MatrixToImageWriter.toBufferedImage (bitMatrix); }

Ovdje trebamo navesti nekoliko parametara kao ulaz, kao što su tekst crtičnog koda, format crtičnog koda i dimenzije crtičnog koda. Za razliku od druge dvije knjižnice, moramo dodati i znamenku kontrolne sume za EAN crtične kodove. Ali, za UPC-A crtične kodove, kontrolna suma nije obavezna.

Štoviše, ova knjižnica neće prikazati tekst crtičnog koda ispod slike.

5. Generiranje 2D crtičnih kodova

5.1. Korištenje ZXing knjižnice

Koristit ćemo ovu knjižnicu za generiranje QR koda. API je sličan onome kod linearnih crtičnih kodova:

javna statička BufferedImage generiraQRCodeImage (String barcodeText) baca Iznimku {QRCodeWriter barcodeWriter = novi QRCodeWriter (); BitMatrix bitMatrix = barcodeWriter.encode (barcodeText, BarcodeFormat.QR_CODE, 200, 200); vratiti MatrixToImageWriter.toBufferedImage (bitMatrix); }

5.2. Korištenje knjižnice QRGen

Knjižnica više nije raspoređena u Maven Central, ali je možemo pronaći na jitpack.io.

Prvo, moramo dodati spremište jitpack i ovisnost QRGen u naš pom.xml:

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

Stvorimo metodu koja generira QR kod:

javna statička BufferedImage generiraQRCodeImage (String barcodeText) baca iznimku {ByteArrayOutputStream stream = QRCode .from (barcodeText) .withSize (250, 250) .stream (); ByteArrayInputStream bis = novi ByteArrayInputStream (stream.toByteArray ()); povratak ImageIO.read (bis); }

Kao što vidimo, API se temelji na obrascu Builder i pruža dvije vrste rezultata: Datoteka i Izlazni tok. Možemo koristiti ImageIO knjižnica za pretvaranje u Slika u baferu.

6. Izgradnja REST usluge

Sada imamo na raspolaganju biblioteku crtičnih kodova koju ćemo koristiti, pogledajmo kako se poslužuju crtični kodovi s web usluge Spring Boot.

Započet ćemo s RestController:

@RestController @RequestMapping ("/ crtični kodovi") BarcodeController javne klase {@GetMapping (value = "/ barbecue / ean13 / {barcode}", produce = MediaType.IMAGE_PNG_VALUE) public ResponseEntity barbecueEAN13Barcode (@PathVariable) " baca iznimku {return okResponse (BarbecueBarcodeGenerator.generateEAN13BarcodeImage (barcode)); } // ...}

Također, trebamo ručno registrirajte pretvarač poruka za BufferedImage HTTP odgovore jer nema zadanog:

@Bean public HttpMessageConverter createImageHttpMessageConverter () {return new BufferedImageHttpMessageConverter (); }

Napokon, možemo koristiti Poštar ili preglednik za pregled generiranih crtičnih kodova.

6.1. Generiranje UPC-A crtičnog koda

Nazovimo web uslugu UPC-A pomoću biblioteke Roštilj:

[GET] // localhost: 8080 / crtični kodovi / roštilj / upca / 12345678901

Evo rezultata:

6.2. Generiranje EAN13 crtičnog koda

Slično tome, nazvat ćemo web-uslugu EAN13:

[GET] // localhost: 8080 / crtični kodovi / roštilj / ean13 / 012345678901

I evo našeg crtičnog koda:

6.3. Generiranje crtičnog koda Code128

U ovom ćemo slučaju koristiti metodu POST. Nazovimo web uslugu Code128 pomoću knjižnice Roštilj:

[POST] // localhost: 8080 / crtični kodovi / roštilj / code128

Dostavit ćemo tijelo zahtjeva koje sadrži podatke:

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

Pogledajmo rezultat:

6.4. Generiranje PDF417 crtičnog koda

Ovdje ćemo nazvati web-uslugu PDF417, koja je slična Code128:

[POST] // localhost: 8080 / crtični kodovi / roštilj / pdf417

Dostavit ćemo tijelo zahtjeva koje sadrži podatke:

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

I evo rezultirajućeg crtičnog koda:

6.5. Generiranje crtičnog koda QR koda

Nazovimo web uslugu QR Code pomoću ZXing knjižnice:

[POST] // localhost: 8080 / crtični kodovi / zxing / qrcode

Dostavit ćemo tijelo zahtjeva koje sadrži podatke:

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 posleda.

Evo našeg QR koda:

Ovdje možemo vidjeti snagu QR kodova za pohranu velike količine podataka u ograničenom prostoru.

7. Zaključak

U ovom smo članku naučili kako generirati najčešće vrste crtičnih kodova u Javi.

Prvo smo proučavali formate nekoliko vrsta linearnih i 2D crtičnih kodova. Zatim smo istražili najpopularnije Java knjižnice za njihovo generiranje. Iako smo isprobali nekoliko jednostavnih primjera, knjižnice možemo dalje proučavati radi prilagođenijih implementacija.

Napokon smo vidjeli kako integrirati generatore crtičnog koda u REST uslugu i kako ih testirati.

Kao i uvijek, primjer koda iz ovog vodiča dostupan je na GitHubu.