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

标签 java jasper-reports ireport barcode zxing

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

但我不知道如何在iReport中配置图像的Image ExpressionExpression Class

最佳答案

两个关键的想法是首先编写一些 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();
        }
    }
}

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

  1. 示例查询:选择“some text”作为 barcode_text 我包含这个只是为了强调我的 scriptlet 对字段名称 barcode_text 进行硬编码这一点。 (这很糟糕。)
  2. 变量:类型为 java.awt.image.BufferedImageBarCodeImage,计算 System。 此名称也在 scriptlet 中进行了硬编码。 (这同样糟糕。)
  3. 添加到 iReport 的类路径:
    • 编译好的scriptlet .jar文件
    • core.jar(来自ZXing)
    • javase.jar(来自ZXing)
  4. 使用表达式 $V{BarCodeImage} 将图像元素添加到报表。

结果是您生成的 JasperReport 中的快乐二维码:

Generated QR-Code

我记得我见过的一个示例,它可以更干净地处理事情。它实际上包括一个很好的插件,因此您可以轻松地将此功能安装到 iReport 中,而无需付出太多努力。如果我能找到它,那么我会更新这篇文章。但在此之前,这至少涵盖了所有关键点。

关于java - iReport 中的 google.zxing 条形码生成器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7626013/

相关文章:

jasper-reports - 在 iReport 5.6 打开 JRXML : "Attribute ' hTextAlign' is not allowed to appear in element 'style' "时出错

java - UIViewRoot 为空 ADF_FACE-30179

java - JasperReports 错误 |尝试从Windows下的System32文件夹加载文件

java - Netbeans 类路径问题的 JaseperReports 插件

java - Jasper 创建空 PDF

jasper-reports - 在 JasperServer 中部署子报表

java - 在 iReport 中初始化 HashMap 变量

java - 在 Android 中使用 ORMLite 持久化 ArrayList<String>

java - Constructor.newInstance() 不知道参数顺序?

java - Logstash.bat 找不到主类错误