自定义二维码



需要能在单元格内通过传入的字符串转化成二维码显示在单元格内。

通过自定义函数实现上述需求。

现方法

1. 接受字符串,生成BufferedImage对象

2. 通过润乾报表提供的ImageUtils.writePNG(bi),返回byte[]给单元格

3. 单元格类型设置为图片字段

实现代码

1. 设计报表

2. 实现代码

1) 接受字符串为参数,生成BufferedImage对象

public BufferedImage CreateQrcode(String testString){

 Qrcode qrcode=new Qrcode();

 BufferedImage bi = new BufferedImage(139, 139, BufferedImage.TYPE_INT_RGB);

 Graphics2D g = bi.createGraphics();

 try{

 qrcode.setQrcodeErrorCorrect('M');

 qrcode.setQrcodeEncodeMode('B');

 qrcode.setQrcodeVersion(7);

 byte[] d =testString.getBytes("GBK");

 g.setBackground(Color.WHITE);

 g.clearRect(0, 0, 139, 139);

 g.setColor(Color.BLACK);

 if (d.length>0 && d.length <123){

 boolean[][] b = qrcode.calQrcode(d);

 for (int i=0;i<b.length;i++){

 for (int j=0;j<b.length;j++){

 if (b[j][i]) {

 g.fillRect(j*3+2,i*3+2,3,3);

 }

 }

 }

 

 }

 }catch(Exception e){

 e.printStackTrace();

 }finally{

 g.dispose();

 bi.flush();

 }

 return bi;

 }

2) 通过润乾报表提供的ImageUtils.writePNG(bi),返回byte[]给单元格

public Object calculate(Context arg0, boolean arg1) {

 //报表中调用该函数传递过来的参数列表

byte[] want=null;

if this.paramList.size() == 0 ) {

throw new ReportError( "二维码自定义函数参数列表为空" );

}

//取得计算表达式(得到传递给报表的参数)

Expression param1 = ( Expression )this.paramList.get( 0 );

if ( param1 == null ) {

throw new ReportError( "二维码自定义函数出现无效参数" );

}

//运算表达式,并取得运算结果(Object)

Object result1 = Variant2.getValue( param1.calculate(arg0,arg1),false,arg1 );

 if( result1==null return null;

 if(result1 instanceof String){

 String str=result1.toString();

 System.out.println(str);

 BufferedImage bi=CreateQrcode(str);

 try {

   want=ImageUtils.writePNG(bi);

catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

 }

return want ;

 

}

实现效果


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值