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.
This article is Part 4 in a 5-Part Series.
- Part 1 - How to Package JNI Shared Library into Jar File
- Part 2 - How to Develop a DotCode Reader in Java Using a Webcam and OpenCV
- Part 3 - How to Build Desktop Barcode Scanner in Java and Kotlin
- Part 4 - How to Read Multiple Barcode and QR Code with Dynamsoft Java Barcode SDK
- Part 5 - Building Java Barcode QR Code Reading Apps: Dynamsoft vs. ZXing
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
- Install Maven.
-
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
-
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>
-
Build the project:
mvn package
-
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:
-
Install the Maven extension:
-
Select archetype-quickstart-jdk8 to create a new Maven project.
- Add the dependency to
pom.xml
. -
Press F5 to run the app instantly.
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:
-
BufferedImage img = null; try { img = ImageIO.read(new File(pszImageFile)); TextResult[] results = br.decodeBufferedImage(img, ""); } catch (IOException e) { System.out.println(e); }
-
TextResult[] results = br.decodeFile(pszImageFile, "");
-
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>
The Java program works on Windows, Linux, macOS, Raspberry Pi, and Jetson Nano.
How to Deploy and Run Java Application Using Docker
-
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
-
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
Source Code
https://github.com/yushulx/java-jni-barcode-qrcode-reader/tree/main/examples/9.x/command_line