diff --git a/libraries-3/pom.xml b/libraries-3/pom.xml
index 6942aa736d..5a73e19b19 100644
--- a/libraries-3/pom.xml
+++ b/libraries-3/pom.xml
@@ -8,8 +8,9 @@
com.baeldung
- parent-modules
- 1.0.0-SNAPSHOT
+ parent-boot-2
+ 0.0.1-SNAPSHOT
+ ../parent-boot-2
@@ -23,16 +24,63 @@
lombok
${lombok.version}
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+
+ net.sourceforge.barbecue
+ barbecue
+ ${barbecue.version}
+
+
+
+ net.sf.barcode4j
+ barcode4j
+ ${barcode4j.version}
+
+
+
+ com.google.zxing
+ core
+ ${zxing.version}
+
+
+ com.google.zxing
+ javase
+ ${zxing.version}
+
+
+
+ com.github.kenglxn.qrgen
+ javase
+ ${qrgen.version}
+
org.cactoos
cactoos
${cactoos.version}
+
+
+
+ jitpack.io
+ https://jitpack.io
+
+
+
1.78
1.18.6
+ 1.5-beta1
+ 2.1
+ 3.3.0
+ 2.6.0
+
0.43
-
\ No newline at end of file
+
diff --git a/libraries-3/src/main/java/com/baeldung/barcodes/BarcodesController.java b/libraries-3/src/main/java/com/baeldung/barcodes/BarcodesController.java
new file mode 100644
index 0000000000..171d703621
--- /dev/null
+++ b/libraries-3/src/main/java/com/baeldung/barcodes/BarcodesController.java
@@ -0,0 +1,99 @@
+package com.baeldung.barcodes;
+
+import com.baeldung.barcodes.generators.BarbecueBarcodeGenerator;
+import com.baeldung.barcodes.generators.Barcode4jBarcodeGenerator;
+import com.baeldung.barcodes.generators.QRGenBarcodeGenerator;
+import com.baeldung.barcodes.generators.ZxingBarcodeGenerator;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.MediaType;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.*;
+
+import java.awt.image.BufferedImage;
+
+@RestController
+@RequestMapping("/barcodes")
+public class BarcodesController {
+
+ //Barbecue library
+
+ @GetMapping(value = "/barbecue/upca/{barcode}", produces = MediaType.IMAGE_PNG_VALUE)
+ public ResponseEntity barbecueUPCABarcode(@PathVariable("barcode") String barcode) throws Exception {
+ return okResponse(BarbecueBarcodeGenerator.generateUPCABarcodeImage(barcode));
+ }
+
+ @GetMapping(value = "/barbecue/ean13/{barcode}", produces = MediaType.IMAGE_PNG_VALUE)
+ public ResponseEntity barbecueEAN13Barcode(@PathVariable("barcode") String barcode) throws Exception {
+ return okResponse(BarbecueBarcodeGenerator.generateEAN13BarcodeImage(barcode));
+ }
+
+ @PostMapping(value = "/barbecue/code128", produces = MediaType.IMAGE_PNG_VALUE)
+ public ResponseEntity barbecueCode128Barcode(@RequestBody String barcode) throws Exception {
+ return okResponse(BarbecueBarcodeGenerator.generateCode128BarcodeImage(barcode));
+ }
+
+ @PostMapping(value = "/barbecue/pdf417", produces = MediaType.IMAGE_PNG_VALUE)
+ public ResponseEntity barbecuePDF417Barcode(@RequestBody String barcode) throws Exception {
+ return okResponse(BarbecueBarcodeGenerator.generatePDF417BarcodeImage(barcode));
+ }
+
+ //Barcode4j library
+
+ @GetMapping(value = "/barcode4j/upca/{barcode}", produces = MediaType.IMAGE_PNG_VALUE)
+ public ResponseEntity barcode4jUPCABarcode(@PathVariable("barcode") String barcode) {
+ return okResponse(Barcode4jBarcodeGenerator.generateUPCABarcodeImage(barcode));
+ }
+
+ @GetMapping(value = "/barcode4j/ean13/{barcode}", produces = MediaType.IMAGE_PNG_VALUE)
+ public ResponseEntity barcode4jEAN13Barcode(@PathVariable("barcode") String barcode) {
+ return okResponse(Barcode4jBarcodeGenerator.generateEAN13BarcodeImage(barcode));
+ }
+
+ @PostMapping(value = "/barcode4j/code128", produces = MediaType.IMAGE_PNG_VALUE)
+ public ResponseEntity barcode4jCode128Barcode(@RequestBody String barcode) {
+ return okResponse(Barcode4jBarcodeGenerator.generateCode128BarcodeImage(barcode));
+ }
+
+ @PostMapping(value = "/barcode4j/pdf417", produces = MediaType.IMAGE_PNG_VALUE)
+ public ResponseEntity barcode4jPDF417Barcode(@RequestBody String barcode) {
+ return okResponse(Barcode4jBarcodeGenerator.generatePDF417BarcodeImage(barcode));
+ }
+
+ //Zxing library
+
+ @GetMapping(value = "/zxing/upca/{barcode}", produces = MediaType.IMAGE_PNG_VALUE)
+ public ResponseEntity zxingUPCABarcode(@PathVariable("barcode") String barcode) throws Exception {
+ return okResponse(ZxingBarcodeGenerator.generateUPCABarcodeImage(barcode));
+ }
+
+ @GetMapping(value = "/zxing/ean13/{barcode}", produces = MediaType.IMAGE_PNG_VALUE)
+ public ResponseEntity zxingEAN13Barcode(@PathVariable("barcode") String barcode) throws Exception {
+ return okResponse(ZxingBarcodeGenerator.generateEAN13BarcodeImage(barcode));
+ }
+
+ @PostMapping(value = "/zxing/code128", produces = MediaType.IMAGE_PNG_VALUE)
+ public ResponseEntity zxingCode128Barcode(@RequestBody String barcode) throws Exception {
+ return okResponse(ZxingBarcodeGenerator.generateCode128BarcodeImage(barcode));
+ }
+
+ @PostMapping(value = "/zxing/pdf417", produces = MediaType.IMAGE_PNG_VALUE)
+ public ResponseEntity zxingPDF417Barcode(@RequestBody String barcode) throws Exception {
+ return okResponse(ZxingBarcodeGenerator.generatePDF417BarcodeImage(barcode));
+ }
+
+ @PostMapping(value = "/zxing/qrcode", produces = MediaType.IMAGE_PNG_VALUE)
+ public ResponseEntity zxingQRCode(@RequestBody String barcode) throws Exception {
+ return okResponse(ZxingBarcodeGenerator.generateQRCodeImage(barcode));
+ }
+
+ //QRGen
+
+ @PostMapping(value = "/qrgen/qrcode", produces = MediaType.IMAGE_PNG_VALUE)
+ public ResponseEntity qrgenQRCode(@RequestBody String barcode) throws Exception {
+ return okResponse(QRGenBarcodeGenerator.generateQRCodeImage(barcode));
+ }
+
+ private ResponseEntity okResponse(BufferedImage image) {
+ return new ResponseEntity<>(image, HttpStatus.OK);
+ }
+}
diff --git a/libraries-3/src/main/java/com/baeldung/barcodes/SpringBootApp.java b/libraries-3/src/main/java/com/baeldung/barcodes/SpringBootApp.java
new file mode 100644
index 0000000000..991b3b11ce
--- /dev/null
+++ b/libraries-3/src/main/java/com/baeldung/barcodes/SpringBootApp.java
@@ -0,0 +1,23 @@
+package com.baeldung.barcodes;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.context.annotation.Bean;
+import org.springframework.http.converter.BufferedImageHttpMessageConverter;
+import org.springframework.http.converter.HttpMessageConverter;
+
+import java.awt.image.BufferedImage;
+
+@SpringBootApplication
+public class SpringBootApp {
+
+ public static void main(String[] args) {
+ SpringApplication.run(SpringBootApp.class, args);
+ }
+
+ @Bean
+ public HttpMessageConverter createImageHttpMessageConverter() {
+ return new BufferedImageHttpMessageConverter();
+ }
+
+}
diff --git a/libraries-3/src/main/java/com/baeldung/barcodes/generators/BarbecueBarcodeGenerator.java b/libraries-3/src/main/java/com/baeldung/barcodes/generators/BarbecueBarcodeGenerator.java
new file mode 100644
index 0000000000..353f824d98
--- /dev/null
+++ b/libraries-3/src/main/java/com/baeldung/barcodes/generators/BarbecueBarcodeGenerator.java
@@ -0,0 +1,43 @@
+package com.baeldung.barcodes.generators;
+
+import net.sourceforge.barbecue.Barcode;
+import net.sourceforge.barbecue.BarcodeFactory;
+import net.sourceforge.barbecue.BarcodeImageHandler;
+
+import java.awt.*;
+import java.awt.image.BufferedImage;
+
+public class BarbecueBarcodeGenerator {
+
+ private static final Font BARCODE_TEXT_FONT = new Font(Font.SANS_SERIF, Font.PLAIN, 14);
+
+ public static BufferedImage generateUPCABarcodeImage(String barcodeText) throws Exception {
+ Barcode barcode = BarcodeFactory.createUPCA(barcodeText); //checksum is automatically added
+ barcode.setFont(BARCODE_TEXT_FONT);
+ barcode.setResolution(400);
+
+ return BarcodeImageHandler.getImage(barcode);
+ }
+
+ public static BufferedImage generateEAN13BarcodeImage(String barcodeText) throws Exception {
+ Barcode barcode = BarcodeFactory.createEAN13(barcodeText); //checksum is automatically added
+ barcode.setFont(BARCODE_TEXT_FONT);
+
+ return BarcodeImageHandler.getImage(barcode);
+ }
+
+ public static BufferedImage generateCode128BarcodeImage(String barcodeText) throws Exception {
+ Barcode barcode = BarcodeFactory.createCode128(barcodeText);
+ barcode.setFont(BARCODE_TEXT_FONT);
+
+ return BarcodeImageHandler.getImage(barcode);
+ }
+
+ public static BufferedImage generatePDF417BarcodeImage(String barcodeText) throws Exception {
+ Barcode barcode = BarcodeFactory.createPDF417(barcodeText);
+ barcode.setFont(BARCODE_TEXT_FONT);
+
+ return BarcodeImageHandler.getImage(barcode);
+ }
+
+}
diff --git a/libraries-3/src/main/java/com/baeldung/barcodes/generators/Barcode4jBarcodeGenerator.java b/libraries-3/src/main/java/com/baeldung/barcodes/generators/Barcode4jBarcodeGenerator.java
new file mode 100644
index 0000000000..a2fee044e5
--- /dev/null
+++ b/libraries-3/src/main/java/com/baeldung/barcodes/generators/Barcode4jBarcodeGenerator.java
@@ -0,0 +1,46 @@
+package com.baeldung.barcodes.generators;
+
+import org.krysalis.barcode4j.impl.code128.Code128Bean;
+import org.krysalis.barcode4j.impl.pdf417.PDF417Bean;
+import org.krysalis.barcode4j.impl.upcean.EAN13Bean;
+import org.krysalis.barcode4j.impl.upcean.UPCABean;
+import org.krysalis.barcode4j.output.bitmap.BitmapCanvasProvider;
+
+import java.awt.image.BufferedImage;
+
+public class Barcode4jBarcodeGenerator {
+
+ public static BufferedImage generateUPCABarcodeImage(String barcodeText) {
+ UPCABean barcodeGenerator = new UPCABean();
+ BitmapCanvasProvider canvas = new BitmapCanvasProvider(160, BufferedImage.TYPE_BYTE_BINARY, false, 0);
+
+ barcodeGenerator.generateBarcode(canvas, barcodeText);
+ return canvas.getBufferedImage();
+ }
+
+ 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);
+ return canvas.getBufferedImage();
+ }
+
+ public static BufferedImage generateCode128BarcodeImage(String barcodeText) {
+ Code128Bean barcodeGenerator = new Code128Bean();
+ BitmapCanvasProvider canvas = new BitmapCanvasProvider(160, BufferedImage.TYPE_BYTE_BINARY, false, 0);
+
+ barcodeGenerator.generateBarcode(canvas, barcodeText);
+ return canvas.getBufferedImage();
+ }
+
+ public static BufferedImage generatePDF417BarcodeImage(String barcodeText) {
+ PDF417Bean barcodeGenerator = new PDF417Bean();
+ BitmapCanvasProvider canvas = new BitmapCanvasProvider(160, BufferedImage.TYPE_BYTE_BINARY, false, 0);
+ barcodeGenerator.setColumns(10);
+
+ barcodeGenerator.generateBarcode(canvas, barcodeText);
+ return canvas.getBufferedImage();
+ }
+
+}
diff --git a/libraries-3/src/main/java/com/baeldung/barcodes/generators/QRGenBarcodeGenerator.java b/libraries-3/src/main/java/com/baeldung/barcodes/generators/QRGenBarcodeGenerator.java
new file mode 100644
index 0000000000..46d17ac500
--- /dev/null
+++ b/libraries-3/src/main/java/com/baeldung/barcodes/generators/QRGenBarcodeGenerator.java
@@ -0,0 +1,21 @@
+package com.baeldung.barcodes.generators;
+
+import net.glxn.qrgen.javase.QRCode;
+
+import javax.imageio.ImageIO;
+import java.awt.image.BufferedImage;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+
+public class QRGenBarcodeGenerator {
+
+ public static BufferedImage generateQRCodeImage(String barcodeText) throws Exception {
+ ByteArrayOutputStream stream = QRCode
+ .from(barcodeText)
+ .withSize(250, 250)
+ .stream();
+ ByteArrayInputStream bis = new ByteArrayInputStream(stream.toByteArray());
+
+ return ImageIO.read(bis);
+ }
+}
diff --git a/libraries-3/src/main/java/com/baeldung/barcodes/generators/ZxingBarcodeGenerator.java b/libraries-3/src/main/java/com/baeldung/barcodes/generators/ZxingBarcodeGenerator.java
new file mode 100644
index 0000000000..e9aa2975da
--- /dev/null
+++ b/libraries-3/src/main/java/com/baeldung/barcodes/generators/ZxingBarcodeGenerator.java
@@ -0,0 +1,51 @@
+package com.baeldung.barcodes.generators;
+
+import com.google.zxing.BarcodeFormat;
+import com.google.zxing.client.j2se.MatrixToImageWriter;
+import com.google.zxing.common.BitMatrix;
+import com.google.zxing.oned.Code128Writer;
+import com.google.zxing.oned.EAN13Writer;
+import com.google.zxing.oned.UPCAWriter;
+import com.google.zxing.pdf417.PDF417Writer;
+import com.google.zxing.qrcode.QRCodeWriter;
+
+import java.awt.image.BufferedImage;
+
+public class ZxingBarcodeGenerator {
+
+ public static BufferedImage generateUPCABarcodeImage(String barcodeText) throws Exception {
+ UPCAWriter barcodeWriter = new UPCAWriter();
+ BitMatrix bitMatrix = barcodeWriter.encode(barcodeText, BarcodeFormat.UPC_A, 300, 150);
+
+ return MatrixToImageWriter.toBufferedImage(bitMatrix);
+ }
+
+ public static BufferedImage generateEAN13BarcodeImage(String barcodeText) throws Exception {
+ EAN13Writer barcodeWriter = new EAN13Writer();
+ BitMatrix bitMatrix = barcodeWriter.encode(barcodeText, BarcodeFormat.EAN_13, 300, 150);
+
+ return MatrixToImageWriter.toBufferedImage(bitMatrix);
+ }
+
+ public static BufferedImage generateCode128BarcodeImage(String barcodeText) throws Exception {
+ Code128Writer barcodeWriter = new Code128Writer();
+ BitMatrix bitMatrix = barcodeWriter.encode(barcodeText, BarcodeFormat.CODE_128, 300, 150);
+
+ return MatrixToImageWriter.toBufferedImage(bitMatrix);
+ }
+
+ public static BufferedImage generatePDF417BarcodeImage(String barcodeText) throws Exception {
+ PDF417Writer barcodeWriter = new PDF417Writer();
+ BitMatrix bitMatrix = barcodeWriter.encode(barcodeText, BarcodeFormat.PDF_417, 700, 700);
+
+ return MatrixToImageWriter.toBufferedImage(bitMatrix);
+ }
+
+ public static BufferedImage generateQRCodeImage(String barcodeText) throws Exception {
+ QRCodeWriter barcodeWriter = new QRCodeWriter();
+ BitMatrix bitMatrix = barcodeWriter.encode(barcodeText, BarcodeFormat.QR_CODE, 200, 200);
+
+ return MatrixToImageWriter.toBufferedImage(bitMatrix);
+ }
+
+}
\ No newline at end of file