我想在我的页面中放置一个条形码并可以预览它。条形码生成器是 google.zxing,我的报告工具是 iReport。
但我不知道如何在iReport中配置图像的Image Expression
和Expression 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();
}
}
}
这充满了硬编码的丑陋之处,但关键思想都显示出来了。然后你需要像这样定义报告:
- 示例查询:
选择“some text”作为 barcode_text
我包含这个只是为了强调我的 scriptlet 对字段名称barcode_text
进行硬编码这一点。 (这很糟糕。) - 变量:类型为
java.awt.image.BufferedImage
的BarCodeImage
,计算System
。 此名称也在 scriptlet 中进行了硬编码。 (这同样糟糕。) - 添加到 iReport 的类路径:
- 编译好的scriptlet .jar文件
- core.jar(来自ZXing)
- javase.jar(来自ZXing)
- 使用表达式
$V{BarCodeImage}
将图像元素添加到报表。
结果是您生成的 JasperReport 中的快乐二维码:
我记得我见过的一个示例,它可以更干净地处理事情。它实际上包括一个很好的插件,因此您可以轻松地将此功能安装到 iReport 中,而无需付出太多努力。如果我能找到它,那么我会更新这篇文章。但在此之前,这至少涵盖了所有关键点。
关于java - iReport 中的 google.zxing 条形码生成器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7626013/