Generering af stregkoder og QR-koder i Java

1. Oversigt

Stregkoder bruges til at formidle information visuelt. Vi giver sandsynligvis et passende stregkodebillede på en webside, e-mail eller et dokument, der kan udskrives.

I denne vejledning skal vi se på, hvordan man genererer de mest almindelige typer stregkoder i Java.

Først lærer vi om internerne i flere typer stregkoder. Derefter udforsker vi de mest populære Java-biblioteker til generering af stregkoder. Endelig ser vi, hvordan vi integrerer stregkoder i vores applikation ved at betjene dem fra en webservice ved hjælp af Spring Boot.

2. Typer af stregkoder

Stregkoder koder for oplysninger såsom produktnumre, serienumre og batchnumre. De giver også parter som detailhandlere, producenter og transportudbydere mulighed for at spore aktiver gennem hele forsyningskæden.

Vi kan gruppere de mange forskellige stregkodesymboler i to primære kategorier:

  • lineære stregkoder
  • 2D stregkoder

2.1. UPC (Universal Product Code) koder

UPC-koder er nogle af de mest almindelige 1D-stregkoder, og vi finder dem for det meste i USA.

UPC-A er en kun numerisk kode, der indeholder 12 cifre: et fabrikantidentifikationsnummer (6 cifre), et varenummer (5 cifre) og et kontrolciffer. Der er også en UPC-E-kode, der kun har 8 cifre og bruges til små pakker.

2.2. EAN-koder

EAN-koder er kendt over hele verden som både europæisk artikelnummer og internationalt artikelnummer. De er designet til scanning ved salgsstedet. Der er også et par forskellige variationer af EAN-koden, herunder EAN-13, EAN-8, JAN-13 og ISBN.

EAN-13-koden er den mest anvendte EAN-standard og svarer til UPC-koden. Den er lavet af 13 cifre - en førende “0” efterfulgt af UPC-A-koden.

2.3. Kode 128

Kode 128-stregkoden er en kompakt lineær kode med høj densitet brugt i logistik- og transportindustrien til bestilling og distribution. Det kan kode alle 128 tegn i ASCII, og dens længde er variabel.

2.4. PDF417

PDF417 er en stablet lineær stregkode, der består af flere 1D-stregkoder stablet oven på hinanden. Derfor kan den bruge en traditionel lineær scanner.

Vi kan forvente at finde det på en række applikationer såsom rejser (boardingkort), identifikationskort og lagerstyring.

PDF417 bruger fejlkorrektion af Reed-Solomon i stedet for kontrolcifre. Denne fejlkorrektion gør det muligt for symbolet at udholde en vis skade uden at medføre tab af data. Det kan dog være ekspansivt i størrelse - 4 gange større end andre 2D-stregkoder som Datamatrix og QR-koder.

2.5. QR-koder

QR-koder bliver de mest anerkendte 2D-stregkoder over hele verden. Den store fordel ved QR-koden er, at vi kan gemme store mængder data i et begrænset rum.

De bruger fire standardiserede kodningstilstande til at gemme data effektivt:

  • numerisk
  • alfanumerisk
  • byte / binær
  • kanji

Desuden er de fleksible i størrelse og scannes let ved hjælp af en smartphone. Svarende til PDF417 kan en QR-kode modstå nogle skader uden at medføre tab af data.

3. Stregkodebiblioteker

Vi skal udforske flere biblioteker:

  • Grill
  • Stregkode4j
  • ZXing
  • QRGen

Grill er et open source Java-bibliotek, der understøtter et omfattende sæt 1D-stregkodeformater. Stregkoderne kan også sendes til PNG, GIF, JPEG og SVG.

Stregkode4j er også et open source-bibliotek. Derudover tilbyder den 2D stregkodeformater - som DataMatrix og PDF417 - og flere outputformater. PDF417-formatet er tilgængeligt i begge biblioteker. Men i modsætning til Barcode4j betragter Barbecue det som en lineær stregkode.

ZXing (“Zebra crossing”) er et open-source 1D / 2D stregkode billedbehandlingsbibliotek implementeret i Java med porte til andre sprog. Dette er hovedbibliotek, der understøtter QR-koder i Java.

QRGen biblioteket tilbyder en simpel QRCode generation API bygget oven på ZXing. Det giver separate moduler til Java og Android.

4. Generering af lineære stregkoder

Lad os oprette en stregkodebilledgenerator til hvert bibliotek og stregkodepar. Vi henter billedet i PNG-format, men vi kan også bruge andre formater som GIF eller JPEG.

4.1. Brug af grillbiblioteket

Som vi får se, leverer Barbecue den enkleste API til at generere stregkoder. Vi behøver kun at angive stregkodeteksten som minimal input. Men vi kunne valgfrit indstille en skrifttype og en opløsning (prikker pr. Tomme). Med hensyn til skrifttypen kan vi bruge den til at vise stregkodeteksten under billedet.

Først skal vi tilføje Barbecue Maven-afhængighed:

 net.sourceforge.barbecue 1,5-beta1 

Lad os oprette en generator til en EAN13-stregkode:

offentlig statisk BufferedImage generereEAN13BarcodeImage (String barcodeText) kaster Undtagelse {Barcode barcode = BarcodeFactory.createEAN13 (barcodeText); stregkode.setFont (BARCODE_TEXT_FONT); returner BarcodeImageHandler.getImage (stregkode); }

Vi kan generere billeder til resten af ​​de lineære stregkodetyper på en lignende måde.

Vi skal bemærke, at vi ikke behøver at angive kontrolsifret for EAN / UPC-stregkoder, da det automatisk tilføjes af biblioteket.

4.2. Brug af Barcode4j-biblioteket

Lad os starte med at tilføje Barcode4j Maven-afhængighed:

 net.sf.barcode4j stregkode4j 2.1 

Lad os ligeledes bygge en generator til en EAN13-stregkode:

offentlig statisk BufferedImage generereEAN13BarcodeImage (String barcodeText) {EAN13Bean stregkodeGenerator = ny EAN13Bean (); BitmapCanvasProvider lærred = ny BitmapCanvasProvider (160, BufferedImage.TYPE_BYTE_BINARY, false, 0); barcodeGenerator.generateBarcode (lærred, stregkodeTekst); returner canvas.getBufferedImage (); }

Det BitmapCanvasProvider konstruktøren tager flere parametre: opløsning, billedtype, om anti-aliasing skal aktiveres, og billedretning. Vi behøver heller ikke at indstille en skrifttype, fordi teksten under billedet vises som standard.

4.3. Brug af ZXing-biblioteket

Her skal vi tilføje to Maven-afhængigheder: kernebilledbiblioteket og Java-klienten:

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

Lad os oprette en EAN13-generator:

offentlig statisk BufferedImage generereEAN13BarcodeImage (String barcodeText) kaster Undtagelse {EAN13Writer stregkodeWriter = ny EAN13Writer (); BitMatrix bitMatrix = stregkodeWriter.encode (stregkodeText, StregkodeFormat.EAN_13, 300, 150); returnere MatrixToImageWriter.toBufferedImage (bitMatrix); }

Her skal vi angive flere parametre som input, såsom en stregkodetekst, et stregkodeformat og stregkodedimensioner. I modsætning til de to andre biblioteker, vi skal også tilføje kontrolsifret for EAN-stregkoder. Men for UPC-A-stregkoder er kontrolsummen valgfri.

Desuden viser dette bibliotek ikke stregkodetekst under billedet.

5. Generering af 2D-stregkoder

5.1. Brug af ZXing-biblioteket

Vi bruger dette bibliotek til at generere en QR-kode. API'et svarer til det for de lineære stregkoder:

offentlig statisk BufferedImage generereQRCodeImage (String barcodeText) kaster Undtagelse {QRCodeWriter barcodeWriter = ny QRCodeWriter (); BitMatrix bitMatrix = stregkodeWriter.encode (stregkodeText, StregkodeFormat.QR_CODE, 200, 200); returnere MatrixToImageWriter.toBufferedImage (bitMatrix); }

5.2. Brug af QRGen-biblioteket

Biblioteket er ikke længere implementeret i Maven Central, men vi kan finde det på jitpack.io.

Først skal vi tilføje jitpack-arkivet og QRGen-afhængigheden til vores pom.xml:

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

Lad os oprette en metode, der genererer en QR-kode:

offentlig statisk BufferedImage generereQRCodeImage (String barcodeText) kaster Undtagelse {ByteArrayOutputStream stream = QRCode .from (barcodeText) .withSize (250, 250) .stream (); ByteArrayInputStream bis = ny ByteArrayInputStream (stream.toByteArray ()); returner ImageIO.read (bis); }

Som vi kan se, er API'en baseret på Builder-mønsteret, og det giver to typer output: Fil og OutputStream. Vi kan bruge ImageIO bibliotek for at konvertere det til en BufferedImage.

6. Opbygning af en REST-service

Nu har vi et valg af stregkodebibliotek, vi skal bruge, lad os se på, hvordan du serverer stregkoder fra en Spring Boot-webtjeneste.

Vi starter med en RestController:

@RestController @RequestMapping ("/ stregkoder") offentlig klasse BarcodesController {@GetMapping (værdi = "/ grill / ean13 / {stregkode}", producerer = MediaType.IMAGE_PNG_VALUE) offentlig ResponseEntity-grillEAN13Barcode (@PathVariable ("stregkode") Stregkode) kaster Undtagelse {returner okResponse (BarbecueBarcodeGenerator.generateEAN13BarcodeImage (stregkode)); } // ...}

Vi skal også manuelt registrer en meddelelsesomformer til BufferedImage HTTP-svar fordi der ikke er nogen standard:

@Bean public HttpMessageConverter createImageHttpMessageConverter () {returner ny BufferedImageHttpMessageConverter (); }

Endelig kan vi bruge Postman eller en browser til at se de genererede stregkoder.

6.1. Generering af en UPC-A stregkode

Lad os ringe til UPC-A-webservicen ved hjælp af Barbecue-biblioteket:

[GET] // / localhost: 8080 / stregkoder / grill / upca / 12345678901

Her er resultatet:

6.2. Generering af en EAN13-stregkode

På samme måde kalder vi EAN13-webservicen:

[GET] // / localhost: 8080 / stregkoder / grill / ean13 / 012345678901

Og her er vores stregkode:

6.3. Generering af en kode128-stregkode

I dette tilfælde skal vi bruge POST-metoden. Lad os kalde Code128-webservicen ved hjælp af Barbecue-biblioteket:

[POST] // localhost: 8080 / stregkoder / grill / code128

Vi leverer anmodningsorganet med dataene:

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

Lad os se resultatet:

6.4. Generering af en PDF417-stregkode

Her skal vi kalde PDF417-webservicen, der ligner Code128:

[POST] // localhost: 8080 / stregkoder / grill / pdf417

Vi leverer anmodningsorganet med dataene:

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

Og her er den resulterende stregkode:

6.5. Generering af en QR-kode stregkode

Lad os kalde QR-koden webtjeneste ved hjælp af ZXing-biblioteket:

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

Vi leverer anmodningsorganet med dataene:

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

Her er vores QR-kode:

Her kan vi se kraften i QR-koder til at gemme store mængder data i et begrænset rum.

7. Konklusion

I denne artikel lærte vi, hvordan man genererer de mest almindelige typer stregkoder i Java.

Først studerede vi formaterne for flere typer lineære og 2D stregkoder. Dernæst udforskede vi de mest populære Java-biblioteker til generering af dem. Selvom vi prøvede nogle enkle eksempler, kan vi studere bibliotekerne yderligere for mere tilpassede implementeringer.

Endelig så vi, hvordan vi kunne integrere stregkodegeneratorerne i en REST-tjeneste, og hvordan vi kunne teste dem.

Som altid er eksempelkoden fra denne vejledning tilgængelig på GitHub.


$config[zx-auto] not found$config[zx-overlay] not found