Vonalkódok és QR-kódok generálása Java-ban

1. Áttekintés

A vonalkódokat az információk vizuális továbbítására használják. Valószínűleg megfelelő vonalkódképet adunk meg egy weboldalon, e-mailben vagy nyomtatható dokumentumban.

Ebben az oktatóanyagban megvizsgáljuk, hogyan lehet generálni a Java leggyakoribb vonalkód-típusait.

Először megismerjük többféle vonalkód belső elemét. Ezután feltárjuk a vonalkódok előállításához szükséges legnépszerűbb Java könyvtárakat. Végül meglátjuk, hogyan lehet integrálni a vonalkódokat alkalmazásunkba úgy, hogy a Spring Boot használatával kiszolgáljuk őket egy webszolgáltatásból.

2. Vonalkódok típusai

A vonalkódok olyan információkat kódolnak, mint a termékszámok, a sorozatszámok és a kötegelt számok. Ezenkívül lehetővé teszik az olyan feleknek, mint a kiskereskedőknek, a gyártóknak és a szállítási szolgáltatóknak, hogy nyomon kövessék az eszközöket a teljes ellátási láncban.

Két különféle kategóriába sorolhatjuk a sokféle vonalkód-szimbológiát:

  • lineáris vonalkódok
  • 2D vonalkódok

2.1. UPC (Universal Product Code) kódok

A UPC kódok a leggyakrabban használt 1D vonalkódok, és leginkább az Egyesült Államokban találjuk őket.

Az UPC-A csak numerikus kód, amely 12 számjegyet tartalmaz: a gyártó azonosító száma (6 számjegy), a tétel száma (5 számjegy) és egy ellenőrző szám. Van egy UPC-E kód is, amely csak 8 számjegyből áll, és kis csomagokhoz használható.

2.2. EAN kódok

Az EAN kódok világszerte ismertek európai cikkszámként és nemzetközi cikkszámként is. Eladási pont szkennelésre tervezték. Az EAN-kódnak is van néhány különböző változata, beleértve az EAN-13, EAN-8, JAN-13 és az ISBN-t.

Az EAN-13 kód a leggyakrabban használt EAN szabvány, és hasonló a UPC kódhoz. 13 számjegyből áll - az első „0”, amelyet az UPC-A kód követ.

2.3. 128. kód

A Code 128 vonalkód kompakt, nagy sűrűségű lineáris kód a logisztikai és szállítási iparban használják megrendelésre és forgalmazásra. Az ASCII mind a 128 karakterét képes kódolni, és hossza változó.

2.4. PDF417

A PDF417 egy halmozott lineáris vonalkód, amely több egymásra rakott 1D vonalkódból áll. Ezért használhat hagyományos lineáris szkennert.

Számíthatunk rá, hogy számos alkalmazásban megtaláljuk, például utazás (beszállókártyák), azonosító kártyák és készletgazdálkodás.

A PDF417 Reed-Salamon hibajavítást használ ellenőrző számjegyek helyett. Ez a hibajavítás lehetővé teszi, hogy a szimbólum némi sérülést szenvedjen el anélkül, hogy adatvesztést okozna. Mérete azonban kiterjedhet - négyszer nagyobb, mint más 2D vonalkódok, például a Datamatrix és a QR kódok.

2.5. QR kódok

A QR kódok világszerte a legelterjedtebb 2D vonalkódokká válnak. A QR-kód nagy előnye az nagy mennyiségű adatot tárolhatunk korlátozott helyen.

Négy szabványos kódolási módot használnak az adatok hatékony tárolásához:

  • numerikus
  • alfanumerikus
  • bájt / bináris
  • kanji

Ráadásul rugalmas méretűek, és okostelefon segítségével könnyen beolvashatók. A PDF417-hez hasonlóan a QR-kód is képes ellenállni bizonyos károknak, anélkül, hogy adatvesztést okozna.

3. Vonalkód-könyvtárak

Több könyvtárat fogunk felfedezni:

  • Kerti sütés
  • Vonalkód4j
  • ZXing
  • QRGen

Kerti sütés egy nyílt forráskódú Java könyvtár, amely támogatja az 1D vonalkód formátumok széles körét. Ezenkívül a vonalkódok PNG, GIF, JPEG és SVG formátumba is kiadhatók.

Vonalkód4j szintén nyílt forráskódú könyvtár. Ezen felül 2D vonalkód formátumokat kínál - mint például a DataMatrix és a PDF417 - és még több kimeneti formátumot. A PDF417 formátum mindkét könyvtárban elérhető. De a Barcode4j-vel ellentétben a Barbecue lineáris vonalkódnak tekinti.

ZXing („Zebrán való átkelés”) egy nyílt forráskódú, több formátumú 1D / 2D vonalkód képfeldolgozó könyvtár, amelyet Java-ban valósítottak meg, portokkal más nyelvekre. Ez a fő könyvtár, amely támogatja a QR-kódokat a Java-ban.

QRGen library egy egyszerű QRCode generáló API-t kínál, amely a ZXing tetejére épül. Külön modulokat biztosít a Java és az Android számára.

4. Lineáris vonalkódok generálása

Hozzunk létre vonalkód képgenerátort minden könyvtár és vonalkód pár számára. A képet PNG formátumban kapjuk meg, de használhatunk más formátumokat is, például GIF vagy JPEG.

4.1. A Barbecue könyvtár használata

Mint látni fogjuk, a Barbecue biztosítja a legegyszerűbb API-t vonalkódok előállításához. Csak minimális bevitellel kell megadnunk a vonalkód szövegét. De opcionálisan beállíthatunk betűtípust és felbontást (pont per hüvelyk). A betűtípust illetően használhatjuk a vonalkódos szöveg megjelenítésére a kép alatt.

Először hozzá kell adnunk a Barbecue Maven függőséget:

 net.sourceforge.barbecue barbecue 1.5-beta1 

Hozzunk létre egy generátort az EAN13 vonalkódhoz:

public static BufferedImage generálEAN13BarcodeImage (String barcodeText) dobja a Kivételt {Vonalkód vonalkód = VonalkódFactory.createEAN13 (vonalkódText); vonalkód.setFont (BARCODE_TEXT_FONT); return BarcodeImageHandler.getImage (vonalkód); }

Hasonló módon generálhatunk képeket a többi lineáris vonalkód-típushoz is.

Meg kell jegyeznünk, hogy nem kell megadnunk az EAN / UPC vonalkódok ellenőrző összegét, mivel azt a könyvtár automatikusan hozzáadja.

4.2. A Barcode4j könyvtár használata

Kezdjük a Barcode4j Maven függőség hozzáadásával:

 net.sf.barcode4j vonalkód4j 2.1 

Ehhez hasonlóan készítsünk generátort egy EAN13 vonalkódhoz:

public static BufferedImage generálEAN13BarcodeImage (String barcodeText) {EAN13Bean vonalkódGenerator = új EAN13Bean (); BitmapCanvasProvider vászon = new BitmapCanvasProvider (160, BufferedImage.TYPE_BYTE_BINARY, false, 0); vonalkódGenerator.generateBarcode (vászon, vonalkódText); return canvas.getBufferedImage (); }

A BitmapCanvasProvider A konstruktornak számos paramétere van: felbontás, képtípus, az aliasolás engedélyezéséhez és a kép tájolása. Emellett nem kell betűtípust beállítanunk, mert a kép alatti szöveg alapértelmezés szerint megjelenik.

4.3. A ZXing könyvtár használata

Itt két Maven-függőséget kell hozzáadnunk: az alap képtárat és a Java klienst:

 com.google.zxing core 3.3.0 com.google.zxing javase 3.3.0 

Hozzunk létre egy EAN13 generátort:

public static BufferedImage generálEAN13BarcodeImage (String barcodeText) dobja a Kivételt {EAN13Writer barcodeWriter = new EAN13Writer (); BitMatrix bitMatrix = vonalkódWriter.encode (vonalkódText, Vonalkódformátum.EAN_13, 300, 150); return MatrixToImageWriter.toBufferedImage (bitMatrix); }

Itt több paramétert kell megadnunk bemenetként, például vonalkód szöveget, vonalkód formátumot és vonalkód méreteket. A másik két könyvtárral ellentétben hozzá kell adnunk az EAN vonalkódok ellenőrző összegét is. De az UPC-A vonalkódok esetében az ellenőrző összeg opcionális.

Ezenkívül ez a könyvtár nem jeleníti meg a vonalkódos szöveget a kép alatt.

5. 2D vonalkódok generálása

5.1. A ZXing könyvtár használata

Ezt a könyvtárat fogjuk használni QR-kód előállítására. Az API hasonló a lineáris vonalkódokéhoz:

public static BufferedImage generálQRCodeImage (String vonalkódText) dobja a Kivételt {QRCodeWriter vonalkódWriter = új QRCodeWriter (); BitMatrix bitMatrix = vonalkódWriter.encode (vonalkódText, Vonalkódformátum.QR_CODE, 200, 200); return MatrixToImageWriter.toBufferedImage (bitMatrix); }

5.2. A QRGen könyvtár használata

A könyvtár már nincs telepítve a Maven Central-ba, de a jitpack.io oldalon megtalálhatjuk.

Először hozzá kell adnunk a jitpack adattárat és a QRGen függőséget a pom.xml fájlhoz:

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

Hozzunk létre egy módszert, amely QR-kódot generál:

public static BufferedImage generálQRCodeImage (String barcodeText) dobja a {ByteArrayOutputStream stream = QRCode .from (barcodeText) .wromSize (250, 250) .stream () kivételt; ByteArrayInputStream bis = új ByteArrayInputStream (stream.toByteArray ()); visszatérés ImageIO.read (bis); }

Mint láthatjuk, az API a Builder mintán alapul, és kétféle kimenetet biztosít: File és OutputStream. Használhatjuk a ImageIO könyvtár átalakítására a BufferedImage.

6. REST szolgáltatás kiépítése

Most már választhatunk vonalkód-könyvtárat, nézzük meg, hogyan kell kiszolgálni a Spring Boot webszolgáltatás vonalkódjait.

Kezdjük egy RestController:

@RestController @RequestMapping ("/ barcodes") public class BarcodesController {@GetMapping (value = "/ barbecue / ean13 / {barcode}", tuottaa = MediaType.IMAGE_PNG_VALUE) public ResponseEntity barbecueEAN13Barcode (@PathVariable String ("vonalkód) dobja a Kivételt {return okResponse (BarbecueBarcodeGenerator.generateEAN13BarcodeImage (vonalkód)); } // ...}

Emellett manuálisan is meg kell tennünk regisztráljon egy üzenetátalakítót a BufferedImage HTTP válaszokhoz mert nincs alapértelmezés:

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

Végül a Postman vagy egy böngésző segítségével megtekinthetjük a létrehozott vonalkódokat.

6.1. UPC-A vonalkód generálása

Hívjuk az UPC-A webszolgáltatást a Barbecue könyvtár segítségével:

[GET] // localhost: 8080 / vonalkódok / barbecue / upca / 12345678901

Itt az eredmény:

6.2. EAN13 vonalkód generálása

Hasonlóképpen felhívjuk az EAN13 webszolgáltatást:

[GET] // localhost: 8080 / vonalkódok / barbecue / ean13 / 012345678901

És itt van a vonalkódunk:

6.3. Code128 vonalkód generálása

Ebben az esetben a POST módszert fogjuk használni. Hívjuk a Code128 webszolgáltatást a Barbecue könyvtár segítségével:

[POST] // localhost: 8080 / vonalkódok / barbecue / code128

Megadjuk a kérelem törzsét, amely tartalmazza az adatokat:

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

Lássuk az eredményt:

6.4. PDF417 vonalkód létrehozása

Itt fogjuk felhívni a PDF417 webszolgáltatást, amely hasonló a Code128-hoz:

[POST] // localhost: 8080 / vonalkódok / barbecue / pdf417

Megadjuk a kérelem törzsét, amely tartalmazza az adatokat:

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

És íme a kapott vonalkód:

6.5. QR-kód vonalkód generálása

Hívjuk a QR Code webszolgáltatást a ZXing könyvtár segítségével:

[POST] // localhost: 8080 / vonalkódok / zxing / qrcode

Megadjuk a kérelem törzsét, amely tartalmazza az adatokat:

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 gyakorlás ullamco laboris nisi ut aliquip ex ea commodo következmény.

Itt van a QR-kódunk:

Itt láthatjuk a QR-kódok erejét, hogy nagy mennyiségű adatot tároljon korlátozott helyen.

7. Következtetés

Ebben a cikkben megtudtuk, hogyan lehet generálni a Java leggyakoribb vonalkód-típusait.

Először többféle lineáris és 2D vonalkód formátumát tanulmányoztuk. Ezután feltártuk a legnépszerűbb Java könyvtárakat azok létrehozásához. Bár kipróbáltunk néhány egyszerű példát, tovább tanulmányozhatjuk a könyvtárakat a testreszabottabb megvalósítások érdekében.

Végül láttuk, hogyan lehet a vonalkód-generátorokat integrálni a REST szolgáltatásba, és hogyan kell tesztelni őket.

Mint mindig, az oktatóanyag példakódja elérhető a GitHubon.