Java QR Code Generator

Generate QR codes with Java. ZXing library, Spring Boot integration, enterprise-grade reliability.

Java QR Code Libraries

Maven Dependency

pom.xml Setup

<dependency>
    <groupId>com.google.zxing</groupId>
    <artifactId>core</artifactId>
    <version>3.5.1</version>
</dependency>

<dependency>
    <groupId>com.google.zxing</groupId>
    <artifactId>javase</artifactId>
    <version>3.5.1</version>
</dependency>

Basic QR Code Generation

Simple Example

import com.google.zxing.BarcodeFormat;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.QRCodeWriter;

public class QRCodeGenerator {
    public static void generateQRCode(String text, String filePath) 
            throws Exception {
        
        QRCodeWriter writer = new QRCodeWriter();
        BitMatrix bitMatrix = writer.encode(text, BarcodeFormat.QR_CODE, 512, 512);
        
        MatrixToImageWriter.writeToPath(bitMatrix, "PNG", 
            Paths.get(filePath));
        
        System.out.println("QR Code generated: " + filePath);
    }
    
    public static void main(String[] args) throws Exception {
        generateQRCode("https://example.com", "qrcode.png");
    }
}

Advanced Configuration

Custom Size & Error Correction

import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;

Map<EncodeHintType, Object> hints = new HashMap<>();
hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);
hints.put(EncodeHintType.MARGIN, 2);
hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");

QRCodeWriter writer = new QRCodeWriter();
BitMatrix bitMatrix = writer.encode(
    "https://example.com", 
    BarcodeFormat.QR_CODE, 
    300,  // width
    300,  // height
    hints
);

Spring Boot Integration

REST Controller

import org.springframework.web.bind.annotation.*;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import java.io.ByteArrayOutputStream;

@RestController
@RequestMapping("/api/qr")
public class QRCodeController {
    
    @GetMapping("/generate")
    public ResponseEntity<byte[]> generateQR(
            @RequestParam String data,
            @RequestParam(defaultValue = "300") int size) 
            throws Exception {
        
        QRCodeWriter writer = new QRCodeWriter();
        BitMatrix bitMatrix = writer.encode(data, BarcodeFormat.QR_CODE, size, size);
        
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        MatrixToImageWriter.writeToStream(bitMatrix, "PNG", baos);
        
        return ResponseEntity
            .ok()
            .header("Content-Type", "image/png")
            .body(baos.toByteArray());
    }
}

Service Layer

@Service
public class QRCodeService {
    
    public byte[] generateQRCode(String data, int size) throws Exception {
        Map<EncodeHintType, Object> hints = new HashMap<>();
        hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);
        
        QRCodeWriter writer = new QRCodeWriter();
        BitMatrix bitMatrix = writer.encode(data, BarcodeFormat.QR_CODE, size, size, hints);
        
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        MatrixToImageWriter.writeToStream(bitMatrix, "PNG", baos);
        
        return baos.toByteArray();
    }
}

Batch Generation

public class BatchQRGenerator {
    
    public static void generateBatch(List<String> urls, String outputDir) 
            throws Exception {
        
        QRCodeWriter writer = new QRCodeWriter();
        int index = 1;
        
        for (String url : urls) {
            BitMatrix bitMatrix = writer.encode(url, BarcodeFormat.QR_CODE, 300, 300);
            String filename = outputDir + "/qrcode_" + index + ".png";
            MatrixToImageWriter.writeToPath(bitMatrix, "PNG", Paths.get(filename));
            index++;
        }
        
        System.out.println("Generated " + urls.size() + " QR codes");
    }
}

Reading QR Codes

import com.google.zxing.BinaryBitmap;
import com.google.zxing.client.j2se.BufferedImageLuminanceSource;
import com.google.zxing.common.HybridBinarizer;
import com.google.zxing.qrcode.QRCodeReader;

public class QRCodeReader {
    
    public static String readQRCode(String imagePath) throws Exception {
        BufferedImage image = ImageIO.read(new File(imagePath));
        LuminanceSource source = new BufferedImageLuminanceSource(image);
        BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source));
        
        Result result = new QRCodeReader().decode(bitmap);
        return result.getText();
    }
}

Error Correction Levels

ErrorCorrectionLevel.L  // ~7% recovery
ErrorCorrectionLevel.M  // ~15% recovery
ErrorCorrectionLevel.Q  // ~25% recovery
ErrorCorrectionLevel.H  // ~30% recovery (recommended for print)

Best Practices

Generate Your QR Codes

➜ Create QR Codes Now