How to Read Multiple Barcode and QR Code with Dynamsoft Java Barcode SDK

There are many open-source and commercial barcode SDKs, but only a few can recognize multiple barcodes and QR codes simultaneously. When you search for “barcode SDK” or “Java barcode SDK” on Google, the Dynamsoft Barcode Reader SDK consistently appears in the top 5 search results. This article guides you through creating a Java barcode and QR code scanning application for Windows (x86 and x64), Linux (AMD64 and ARM64), and macOS.

Supported Platforms

  • Windows (x86 and x64)
  • Linux (x64 and ARM64): PC, Raspberry Pi, Jetson Nano
  • macOS (x64)

Steps to Configure Java Barcode SDK with Maven

  1. Install Maven.
  2. Create a new Maven project via the command line:

     mvn archetype:generate -DgroupId=com.dynamsoft -DartifactId=test -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.4 -DinteractiveMode=false
    
  3. Open the pom.xml file in the new project folder to add the dependency:

     <dependencies>
         <dependency>
             <groupId>com.dynamsoft</groupId>
             <artifactId>dbr</artifactId>
             <version>9.6.40.1</version>
         </dependency>
     </dependencies>
     <repositories>
         <repository>
             <id>dbr</id>
             <url>https://download2.dynamsoft.com/maven/dbr/jar</url>
         </repository>
     </repositories>
    
  4. Build the project:

     mvn package
    
  5. Run the Java application:

     java -cp target/test-1.0-SNAPSHOT.jar com.dynamsoft.App
    

Maven Configuration in Visual Studio Code

If you are using Visual Studio Code, follow these steps:

  1. Install the Maven extension:

    Maven extension for visual studio code

  2. Select archetype-quickstart-jdk8 to create a new Maven project.

    vscode Maven project

  3. Add the dependency to pom.xml.
  4. Press F5 to run the app instantly.

    run Java in vscode

To run the app with an input image in Visual Studio Code, add args to the .vscode/launch.json file:

{
    "version": "0.2.0",
    "configurations": [
        {
            "type": "java",
            "name": "Debug (Launch) - Current File",
            "request": "launch",
            "mainClass": "${file}",
            "args": "images/AllSupportedBarcodeTypes.png"
        },
        {
            "type": "java",
            "name": "Debug (Launch)-App<test>",
            "request": "launch",
            "mainClass": "com.dynamsoft.App",
            "projectName": "test",
            "args": "images/AllSupportedBarcodeTypes.png"
        }
    ]
}

Implementing Multiple Barcode and QR Code Scanning in Java

First, import the Java barcode SDK:

import com.dynamsoft.dbr.*;

Before instantiating the barcode reader object, obtain a valid license key and set it globally:

BarcodeReader br = null;
try {
    BarcodeReader.initLicense("LICENSE-KEY");
    br = new BarcodeReader();
} catch (Exception e) {
    System.out.println(e);
    return;
}

There are three optional decoding functions available for scanning multiple barcodes and QR codes:

  • decodeBufferedImage

      BufferedImage img = null;
      try {
          img = ImageIO.read(new File(pszImageFile));
          TextResult[] results = br.decodeBufferedImage(img, "");
        
      } catch (IOException e) {
          System.out.println(e);
      }
    
  • decodeFile

      TextResult[] results = br.decodeFile(pszImageFile, "");
    
  • decodeFileInMemory

      TextResult[] results = br.decodeFileInMemory(Files.readAllBytes(new File(pszImageFile).toPath()), "");
    

Extract information from the recognition results:

if (results != null && results.length > 0) {
    String pszTemp = null;
    iIndex = 0;
    for (TextResult result : results) {
        iIndex++;
        pszTemp = String.format("  Barcode %d:", iIndex);
        System.out.println(pszTemp);
        pszTemp = String.format("    Page: %d", result.localizationResult.pageNumber + 1);
        System.out.println(pszTemp);
        if (result.barcodeFormat != 0) {
            pszTemp = "    Type: " + result.barcodeFormatString;
        } else {
            pszTemp = "    Type: " + result.barcodeFormatString_2;
        }
        System.out.println(pszTemp);
        pszTemp = "    Value: " + result.barcodeText;
        System.out.println(pszTemp);

        pszTemp = String.format("    Region points: {(%d,%d),(%d,%d),(%d,%d),(%d,%d)}",
                result.localizationResult.resultPoints[0].x, result.localizationResult.resultPoints[0].y,
                result.localizationResult.resultPoints[1].x, result.localizationResult.resultPoints[1].y,
                result.localizationResult.resultPoints[2].x, result.localizationResult.resultPoints[2].y,
                result.localizationResult.resultPoints[3].x, result.localizationResult.resultPoints[3].y);

        System.out.println(pszTemp);
        System.out.println();
    }
}

To scan multiple barcode and QR code images concurrently, use a thread pool to improve performance:

ThreadPoolExecutor executor = (ThreadPoolExecutor) Executors.newFixedThreadPool(10);
    
for (int i = 1; i <= 1000; i++) 
{
    executor.execute(new Runnable(){
    
        @Override
        public void run() {
            App test = new App();
            test.decodefile(filename);
            try {
                Thread.sleep(200);
            } catch (InterruptedException e) {
                System.out.println(e);
            }
        }
    });
}
executor.shutdown();

Note: Due to the limitation of JVM heap memory, using BufferedImage in multiple threads may cause out-of-memory errors. Therefore, avoid using BufferedImage in multiple threads.

How to Build and Run Java Barcode and QR Code Reader

To run the Java program with dependencies easily, add a Maven assembly plugin to pom.xml:

<plugin>
    <artifactId>maven-assembly-plugin</artifactId>
    <configuration>
        <descriptorRefs>
            <descriptorRef>jar-with-dependencies</descriptorRef>
        </descriptorRefs>
        <archive>
            <manifest>
                <mainClass>com.dynamsoft.App</mainClass>
            </manifest>
        </archive>
    </configuration>
    <executions>
        <execution>
            <id>make-assembly</id>
            <phase>package</phase>
            <goals>
                <goal>single</goal>
            </goals>
        </execution>
    </executions>
</plugin>

The plugin will build everything into a JAR file:

mvn clean package

Finally, run the Java application using the following command:

java -jar target/test-1.0-SNAPSHOT-jar-with-dependencies.jar <image-file>

read multiple barcodes by using Java barcode reader

Java barcode and QR code reader

The Java program works on Windows, Linux, macOS, Raspberry Pi, and Jetson Nano.

How to Deploy and Run Java Application Using Docker

  1. Create a Dockerfile:

     FROM openjdk:11-stretch
     COPY images/AllSupportedBarcodeTypes.png AllSupportedBarcodeTypes.png
     COPY target/test-1.0-SNAPSHOT-jar-with-dependencies.jar test-1.0-SNAPSHOT-jar-with-dependencies.jar
     CMD java -cp test-1.0-SNAPSHOT-jar-with-dependencies.jar com.dynamsoft.App AllSupportedBarcodeTypes.png
    
  2. Build the Docker image and run the Java program in a Docker Linux container:

     docker rmi dynamsoft/barcode-reader -f
     docker build -t dynamsoft/barcode-reader -f Dockerfile .
     docker run -it dynamsoft/barcode-reader
    

    Java barcode reader in Docker Linux container

Source Code

https://github.com/yushulx/java-jni-barcode-qrcode-reader/tree/main/examples/9.x/command_line