Las dos ideas clave son primero escribir un poco de código Java para crear la imagen relevante y luego diseñar el informe para hacer referencia a este código adecuadamente. Tal vez la forma más sencilla de generar la imagen está en un scriptlet como esto:
package com.jaspersoft.alliances.mdahlman;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.WriterException;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.QRCodeWriter;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import net.sf.jasperreports.engine.JRDefaultScriptlet;
import net.sf.jasperreports.engine.JRScriptletException;
public class QRCodeScriptlet extends JRDefaultScriptlet {
public void afterDetailEval() throws JRScriptletException {
QRCodeWriter writer = new QRCodeWriter();
BitMatrix matrix = null;
try {
matrix = writer.encode(getFieldValue("barcode_text").toString(), BarcodeFormat.QR_CODE, 256, 256);
this.setVariableValue("BarCodeImage", MatrixToImageWriter.toBufferedImage(matrix));
} catch (WriterException e) {
e.printStackTrace();
}
}
}
que está lleno de fealdad no modificable, pero las ideas principales se muestran todas. Luego hay que definir el informe como este: consulta
- muestra:
select 'some text' as barcode_text
que incluía esto sólo para reforzar el punto de que mi scriptlet duros códigos barcode_text
el nombre del campo. (Esto es malo.)
- Variable:
BarCodeImage
del tipo java.awt.image.BufferedImage
con el cálculo System
. Este nombre también está codificado en el scriptlet. (Esto es igual de malo.)
- Añadir a la ruta de clase de iReport:
- El archivo .jar scriplet compilado
- core.jar (de ZXing)
- javase.jar (de ZXing)
- Agregue un elemento de imagen al informe con la expresión
$V{BarCodeImage}
.
El resultado es un código QR feliz feliz en su JasperReport generada:
Recuerdo una muestra que he visto, que hace las cosas mucho más limpia. De hecho, incluía un buen complemento para que pudiera instalar fácilmente esta funcionalidad en iReport con el mínimo esfuerzo. Si puedo rastrear eso, entonces actualizaré esta publicación. Pero hasta entonces esto al menos cubre todos los puntos críticos.
http://groups.google.com/group/zxing/browse_thread/thread/e8fbcde52f9efd80 –
@AlexK: He intentado que antes, pero no es claro – deepmax
Al menos debe decirnos qué tipo de código de barras que está intentando generar ... –