iReport中的google.zxing条形码生成器

mas*_*oud 14 java barcode jasper-reports ireport zxing

我想在我的页面中放一个条形码并可以预览它.条形码生成器是google.zxing,我的报告工具是iReport.

但我不知道,如何配置Image ExpressionExpression ClassiReport中的图像.

mda*_*man 8

这两个关键思想首先是编写一些Java代码来创建相关图像,然后设计报告以适当地引用此代码.也许最简单的生成图像的方法是在这样的scriptlet中:

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();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这充满了硬编码的丑陋,但关键的想法都显示出来了.然后你需要像这样定义报告:

  1. 示例查询:select 'some text' as barcode_text 我将其包括在内只是为了强调我的scriptlet对字段名称进行硬编码barcode_text.(这是不好的.)
  2. 变量:带计算BarCodeImage的类型.此名称在scriptlet中也是硬编码的.(这同样糟糕.)java.awt.image.BufferedImageSystem
  3. 添加到iReport的类路径:
    • 已编译的scriptlet .jar文件
    • core.jar(来自ZXing)
    • javase.jar(来自ZXing)
  4. 使用Expression将Image元素添加到报表中$V{BarCodeImage}.

结果是生成的JasperReport中的快乐QR码:

生成的QR码

我记得一个我见过的样本,它做得更干净.它实际上包含一个很好的插件,因此您可以轻松地将此功能轻松地安装到iReport中.如果我可以追踪到这一点,那么我将更新这篇文章.但在此之前,这至少涵盖了所有关键点.