【问题标题】:google.zxing barcode generator in iReportiReport 中的 google.zxing 条码生成器
【发布时间】:2011-11-29 08:57:54
【问题描述】:

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

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

【问题讨论】:

  • @AlexK:我之前试过,但不清楚
  • 您至少应该告诉我们您要生成什么样的条形码...
  • @MarcNuri:没有区别,但至少对于二维条码
  • @MasoudM.:我意识到最初的问题是几个月前发布的,所以您可能已经继续前进了……但是我发布的示例应该包含您需要的所有关键想法。你还有机会生成二维码吗?

标签: java jasper-reports ireport barcode zxing


【解决方案1】:

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

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. 示例查询:select 'some text' as barcode_text 我包含这个只是为了强调我的 scriptlet 对字段名称 barcode_text 进行了硬编码。 (这很糟糕。)
  2. 变量:BarCodeImage 类型为java.awt.image.BufferedImage,计算为System。 此名称也在 scriptlet 中硬编码。 (这同样糟糕。)
  3. 添加到 iReport 的类路径:
    • 编译后的 scriptlet .jar 文件
    • core.jar(来自 ZXing)
    • javase.jar(来自 ZXing)
  4. 使用表达式$V{BarCodeImage} 将图像元素添加到报表中。

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

我记得我见过的一个样本,它做事更干净。它实际上包含一个不错的插件,因此您可以轻松地将这个功能安装到 iReport 中,而无需付出任何努力。如果我能追踪到这一点,那么我会更新这篇文章。但在那之前,这至少涵盖了所有关键点。

【讨论】:

【解决方案2】:

图像表达式应返回java.awt.Image 的任何子类。实现这一点的最简单方法是使用您自己的帮助程序类来生成图像。您可以创建一个从String 生成条形码的静态方法,然后从 IReport 调用该方法。

在 ZXing 的情况下,我不知道要使用的方法,但我可以通过 Barbecue 库告诉我使用什么作为 ImageExpression。

        net.sourceforge.barbecue.BarcodeImageHandler.getImage(
MyBarcodeGenerator.getFromString($F{field})

MyBarcodeGenerator 类包含方法 getFromString(...),在我的例子中返回 net.sourceforge.barbecue.Barcode net.sourceforge.barbecue.linear.code39.Code39Barcode

Expression Class 被忽略。

--已编辑:

要在 zxing 中编码图像,您应该使用 MatrixToImageWriter

以下代码会将 QRCode 编码为 BufferedImage,您可以在 Image Expression 字段中使用它:

MatrixToImageWriter.toBufferedImage(new QRCodeWriter().encode("BARCODE CONTENT", BarcodeFormat.QR_CODE,     400 /*Width*/, 400/*Height*/));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-06
    • 1970-01-01
    • 2015-02-27
    • 2011-01-24
    • 2010-12-14
    • 1970-01-01
    相关资源
    最近更新 更多