答案 0 :(得分:3)
可以使用ZXing库创建QRCode本身,例如使用this tutorial。
在this example中,开发了一个使用zxing的小型生成器,以使脚本尽可能简单,但这是兼容性的,您可以将所有Java内容直接放入BIRT脚本中。这基本上是这个脚本的样子:
importPackage(Packages.java.awt);
importPackage(Packages.org.my.package.using.zxing);
var url="Generate a URL or a message with data bindings, report parameters etc.";
try{
vars["QRCode"]=QRcodeGenerator.getImage64QR(url, Color(params["QRColor"].value), Color.WHITE,params["QRSize"].value);
}catch(e){
vars["QRexception"]=e.message;
}
在您的情况下,类似的脚本可以放在动态图像的数据绑定中,也可以放在onCreate事件中。此时有两个选项:
该示例使用第二种方法,使用HTML文本元素和表达式:
<img alt="This QRCode can't be displayed" src='<VALUE-OF>vars["QRCode"]</VALUE-OF>'/>
答案 1 :(得分:1)
针对像我这样的初学者,请完成Dominique帖子。
在ZXing Maven repository上下载 core 和 javase jars并将其添加为依赖项(或创建maven项目...)。
package your.package.path;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.WriterException;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.QRCodeWriter;
public class QRCodeGenerator {
/**
* Method that generate a qrcode as byte array which could be consumed by a birt image item
* @param text
* @param width (pixels)
* @param height (pixels)
* @return
* @throws WriterException
* @throws IOException
*/
public static byte[] getQRCodeImage(String text, int width, int height) throws WriterException, IOException {
// No margin around the code
Map<EncodeHintType, Integer> hints = new HashMap<>();
hints.put(EncodeHintType.MARGIN, 0);
// Use the code you want, here QR_CODE
QRCodeWriter qrCodeWriter = new QRCodeWriter();
BitMatrix bitMatrix = qrCodeWriter.encode(text, BarcodeFormat.QR_CODE, width, height, hints);
// Generate the PNG which include the code
ByteArrayOutputStream pngOutputStream = new ByteArrayOutputStream();
MatrixToImageWriter.writeToStream(bitMatrix, "PNG", pngOutputStream);
// Return the PNG as byte array
return pngOutputStream.toByteArray();
}
}
右键单击birt项目->属性->报表设计->类路径->添加外部JAR(或根据需要添加项目)
Birt项目:创建变量参数“ qrCode”
Birt项目:在onCreate事件上添加以下脚本(在加载文本之后并生成图像之前)
使用您的Java项目路径(因此请更改您的.package.path)。
importPackage(Packages.your.package.path);
// We call the Java method and get PNG bytes that we put inside qdCode variable and that will be consumed by the dynamic image
vars["qrCode"] = QRCodeGenerator.getQRCodeImage(this.getRowData().getColumnValue("YourTextVariableName"), 220, 220);
右键单击它->编辑,选中动态图像单选按钮,然后在文本框中添加vars [“ qrCode”] 。
如果要测试有关Birt Viewer战争的报告,请不要忘记将Java Project jar和ZXing jar添加到 WEB-INF / lib 文件夹中。