java web ireport 3.7 打印二维码

       前几天做项目的时候遇到一个需求,客户想在医院的诊间结算单上打印出二维码,供病人去扫描。由于现有的版本项目报表显示和打印都是用ireport 3.7来做的,还没转化成lodop打印(新版本是lodop 在那上面打印二维码轻而易举)。 原本以前打印过条形码,想着应该差不多。于是就着手做了,但是做的时候发现,ireport 的组件面板上根本没有 二维码的样式,只有条形码。

     这下懵逼了,总不能因为这样一个小需求还要把打印格式全部转化为lodop,而且还得去每个诊间医生的电脑上一个个去安装lodop吧。那只能在原有的方式上想办法了。

     看到组件模板上有image ,突然有个想法。能不能在后台生成好图片,把这个图片给给到ireport呢?由于用的是java,和报表之间是通过jasperReports 去实现,于是从网上搜索了一堆发现都是在ireport 中引入javase.jar 和core.jar  包 然后再

新建一个【Image】属性的文本,选择图片路径时选择“取消”,这时候在“image Expression”框中添加“com.google.zxing.client.j2se.MatrixToImageWriter.toBufferedImage(new com.google.zxing.qrcode.QRCodeWriter().encode($P{QrCode},com.google.zxing.BarcodeFormat.QR_CODE,1000,1000))”字段。 
其中:$P{QrCode}是二维码的内容,这个参数可以根据自己的实际情况来定 

 

       但是其实这种方法是有缺陷的!!!比如我现在遇到的情况:客户又要求在二维码中间加入自己医院的logo (没办法,需求一直变是经常有的事情。。。。在这里就不吐槽了)。本着客户是上帝的原则 咱必须得咬咬牙满足到底啊。

    下面,正式进入解决方法:

  1.   在ireport的Parameters里面新增一个参数,这里我们取名:QRCODEURL。(这一步很重要!!)·

 2.image 拖入要放二维码的地方

3.设置 image的 expression 属性,选中新加的QRCODEURL (这个一定要注意,不能在Image Expression里面直接设置$P{QRCODEURL},否则会报net.sf.jasperreports.engine.design.JRValidationException: Report design not valid : 
     1. Parameter not found QRCODEURL的错误
) ,并且在 is Lazy 打上勾(懒汉模式加载)

 

4.开始写后台。

如果是一张固定的二维码图片,建议直接引入生成好的二维码图片的路径就可以了,我这边是根目录下。

5.如果是动态的二维码,可以有两种方式去实现。

     5.1  先生成一张图片 保存到服务器上。然后传给前台地址去调用。 

             关于如何生成图片的代码我贴在下面。需要core-2.2.jar,javase-2.2.jar 这两个jar 包

package com.bsoft.bsphis.msxzz;


import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import jav
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值