Print QR code menggunakan iReport di Openbravo

Membuat label dengan QRCode memudahkan kita saat scanning (dari pada 1d barcode), dan tidak perlu hardware mahal, cukup menggunakan camera smartphone saja. Artikel ini membahas bagaimana kita bisa membuat report di Openbravo dari iReport yang bisa mencetak QR Code.Openbravo support iReport sampai dengan versi 4.0.1, dan dalam tutorial ini akan digunakan iReport 3.0.0. iReport sendiri tidak mendukung secara native penggunaan QR Code, hanya bardcode (1d barcode) saja yang didukung secara native. jadi, skenario ini yang akan kita pakai untuk membuat QR code di ireport:

  1. kita akan gunakan library zxing sebagai generator barcode.
  2. membuat 1 static method dari java, dengan input berupa String, dan output berupa BufferedImage, yang digunakan untuk mengkonversi String menjadi image QRCode.
  3. membuat report element berupa gambar persegi, dengan image expresson berupa static method yang sudah dibuat di langkah 2.

langkah 1: siapkan librari zxing

download zxing dan zxing client javase.

langkah 2: buat static method untuk mengkonversi string ke QRCode

package org.wirabumi.bprl.ad_process;

import java.awt.image.BufferedImage;
import java.io.UnsupportedEncodingException;

import com.google.zxing.WriterException;
import com.google.zxing.common.ByteMatrix;
import com.google.zxing.qrcode.QRCodeWriter;

public class Utility {
 
 public static BufferedImage GetQRCodeImage(String qrcode){
 byte[] b = qrcode.getBytes();
 //convert the byte array into a UTF-8 string 
 String data;
 try {
 data = new String(b, "UTF8");
 }
 catch (UnsupportedEncodingException e) {
 //the program shouldn't be able to get here
 return null;
 }

 //get a byte matrix for the data
 ByteMatrix matrix=null;;
 com.google.zxing.Writer writer = new QRCodeWriter();
 try {
 matrix = writer.encode(data, com.google.zxing.BarcodeFormat.QR_CODE, 256, 256);
 } catch (WriterException e) {
 // TODO Auto-generated catch block
 e.printStackTrace();
 return null;
 }
 

 //generate an image from the byte matrix
 int width = matrix.getWidth(); 
 int height = matrix.getHeight(); 

 byte[][] array = matrix.getArray();

 //create buffered image to draw to
 BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);

 //iterate through the matrix and draw the pixels to the image
 for (int y = 0; y < height; y++) { 
 for (int x = 0; x < width; x++) { 
 int grayValue = array[y][x] & 0xff; 
 image.setRGB(x, y, (grayValue == 0 ? 0 : 0xFFFFFF));
 }
 }
 
 return image;
 }

}

langkah 3: buat report element berupa gambar persegi untuk menampilkan barcode

hasilnya:

saya mensimulasikan dengan print asset barcode. 1 kertas sticker berisi 2 kolom dengan 8 kertas label.

hasil print pdf

hasil cetak dengan printer inkjet

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s