dimecres, 9 de maig de 2012

Creació de codis QR amb Java #itext #foss

iText és una biblioteca de classes Java per treballar amb documents PDF però, té una part interessantíssima dedicada a treballar amb codis de barres, 1D i 2D. És programari lliure amb llicència Affero GPL.

El següent tros de codi mostra una forma de generar una imatge d'un codi QR amb Java utilitzant iText. Se li passa la URL de la imatge i la mida en píxels del costat (és quadrada), i genera una imatge PNG quin nom és el temps en què es genera, en mil·lisegons. Perquè compili heu de tenir el fitxer JAR de l'iText al classpath.

import java.awt.Color;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Calendar;

import javax.imageio.ImageIO;

import com.itextpdf.text.pdf.BarcodeQRCode;


public class qrimg {

 /**
  * @param args
  */
 public static void main(String[] args) {
  
  try {   
   int iMida = Integer.parseInt(args[1]);
   BarcodeQRCode aQRCode = new BarcodeQRCode(args[0], iMida, iMida, null);
   // Gràcies a http://stackoverflow.com/questions/5749860/get-bytes-from-itexts-barcode39-image
   Image aImg = aQRCode.createAwtImage(Color.BLACK, Color.WHITE);
   BufferedImage aBuffImg = new BufferedImage(aImg.getWidth(null), aImg.getHeight(null), BufferedImage.TYPE_INT_RGB);
   aBuffImg.getGraphics().drawImage(aImg, 0, 0, null);
   ByteArrayOutputStream aOut = new ByteArrayOutputStream();
   ImageIO.write(aBuffImg, "png", aOut);
   aOut.flush();
   Calendar aCal = Calendar.getInstance();   
   FileOutputStream aFOut = new FileOutputStream(String.valueOf(aCal.getTimeInMillis())+".png");
   aFOut.write(aOut.toByteArray());
   aFOut.flush();
  } catch (FileNotFoundException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  
 }

}


Creative Commons License + GNU FDL