iReport 中的 google.zxing 条码生成器

发布于 2024-12-07 12:17:27 字数 180 浏览 0 评论 0原文

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

但我不知道如何在iReport中配置图像的图像表达式表达式类

I want put a barcode in my page and can preview it. The barcode generator is google.zxing and my reporting tool is iReport.

But i dont know, how to configure Image Expression and Expression Class of an image in iReport.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

酷炫老祖宗 2024-12-14 12:17:27

两个关键思想是首先编写一些 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. 示例查询:选择“某些文本”作为条形码_文本
    我添加此内容只是为了强调我的脚本对字段名称 barcode_text 进行了硬编码。 (这很糟糕。)
  2. 变量:BarCodeImage,类型为java.awt.image.BufferedImage,具有计算System
    该名称也在脚本中被硬编码。 (这同样糟糕。)
  3. 添加到 iReport 的类路径:
    • 编译后的 scriptlet .jar 文件
    • core.jar(来自ZXing)
    • javase.jar(来自 ZXing)
  4. 使用表达式 $V{BarCodeImage} 将 Image 元素添加到报表中。

结果是在生成的 JasperReport 中生成一个快乐的 QR 代码:

Generate QR-Code

我记得我见过的一个示例这使事情变得更加干净。它实际上包含一个很好的插件,因此您可以轻松地将这个功能安装到 iReport 中,并且花费最少的精力。如果我能找到它,那么我会更新这篇文章。但在那之前,这至少涵盖了所有关键点。

The two key ideas are first to write a bit of Java code to create the relevant image and then to design the report to reference this code appropriately. Perhaps the simplest way to generate the image is in a scriptlet like this:

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();
        }
    }
}

That's full of hard-coded ugliness, but the key ideas are all shown. Then you need to define the report like this:

  1. Sample query: select 'some text' as barcode_text
    I included this only to reinforce the point that my scriptlet hard-codes the field name barcode_text. (This is bad.)
  2. Variable: BarCodeImage of type java.awt.image.BufferedImage with calculation System.
    This name is hard-coded in the scriptlet too. (This is equally bad.)
  3. Add to iReport's classpath:
    • The compiled scriptlet .jar file
    • core.jar (from ZXing)
    • javase.jar (from ZXing)
  4. Add an Image element to the report with Expression $V{BarCodeImage}.

The result is a happy happy QR-code in your generated JasperReport:

Generated QR-Code

I recall a sample that I have seen which does things much more cleanly. It actually included a nice plug-in so you could easily install this functionality into iReport with minimal effort. If I can track that down, then I'll update this post. But until then this at least covers all of the critical points.

随遇而安 2024-12-14 12:17:27

图像表达式应返回 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 中,您可以在“图像表达式”字段中使用它:

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

The image expression should return any subclass of java.awt.Image. The easiest way to achieve this is to use your own helper class to generate the Image. You can create a static method that generates a barcode from a Stringand call that method from IReport.

In the case of ZXing I don't know the method to use, but I can tell what I use as ImageExpression using the Barbecue library.

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

MyBarcodeGenerator class contains the method getFromString(...) that returns a net.sourceforge.barbecue.Barcode in my case a net.sourceforge.barbecue.linear.code39.Code39Barcode

The Expression Class is ignored.

--Edited:

To encode an Image in zxing you should use MatrixToImageWriter

The following code will encode a QRCode into a BufferedImage which you can use in the Image Expression field:

MatrixToImageWriter.toBufferedImage(new QRCodeWriter().encode("BARCODE CONTENT", BarcodeFormat.QR_CODE,     400 /*Width*/, 400/*Height*/));
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文