There are many open-source and commercial barcode SDKs, but only a few of them can recognize multiple barcode and QR code simultaneously. When you search Google for barcode SDK or Java barcode SDK, Dynamsoft Barcode Reader SDK always appears in the top 5 of the search results. This article guides you through the process of creating a Java barcode and QR code scanning application for Windows (x86 and x64), Linux (AMD64 and ARM64), and macOS.
SDK Version
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.0.0</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, the steps can be simplified as follows:
-
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, we import the Java barcode SDK:
import com.dynamsoft.dbr.*;
Before instantiating the barcode reader object, you must get 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 developers. We can call one of them to scan multiple barcode and QR code:
-
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()), "");
Finally, we use the following code to extract the 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();
}
}
If you want to scan amounts of barcode and QR code images concurrently, you can use a thread pool to improve the 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, you may suffer from the out-of-memory error when reading image files to BufferedImage
in Java. Therefore, using BufferedImage
in multiple threads is not recommended.
How to Build and Run Java Barcode and QR Code Reader
To easily run the Java program with dependencies, we add a maven assembly plugin to pom.xml
:
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</plugin>
The plugin will build everything into a jar file:
mvn clean install assembly:assembly
Finally, we run the Java application by using the following command:
java -cp target/test-1.0-SNAPSHOT-jar-with-dependencies.jar com.dynamsoft.App images/AllSupportedBarcodeTypes.png
The Java program can work 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
Top comments (0)