Ireport+JS处理扫描中文二维码
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Ireport+JS处理扫描中文二维码相关的知识,希望对你有一定的参考价值。
关于JasperReport的基础应用参考:
IReport+JasperReport+Applet报表打印
应用IReport+JasperReport处理含中文二维码的思路与过程。
在报表中展现二维条码。
适应扫描器操作处理(中文转义)。
结合JS使用条码。
第一部分 在报表中展现二维条码:
思路:应用zxing工具包生成二维码的图形,并写入在IReport报表的图像组件中。
步骤1:下载core.jar和javase.jar。
步骤2:引入IReport。
打开iReport,“工具”—“选项”—“classpath”,然后“Add JAR”,选择上面提到的两个jar文件。
图片1:
加入图像组件,并设定内容表达式,图片2:
图像组件的表达式内容:
com.google.zxing.client.j2se.MatrixToImageWriter.toBufferedImage(
new com.google.zxing.qrcode.QRCodeWriter().encode(
new String($P{Code}.getBytes("UTF-8"), "ISO-8859-1")
,com.google.zxing.BarcodeFormat.QR_CODE,100,100))
即:将报表参数Code进行转码(处理中文乱码问题)后进行QRCode编码并写入缓存的图像对象中。
同时,为了便于在运行时分析,我们建立1个文本框,表达式输入为:
new String($P{Code}.getBytes("UTF-8"), "ISO-8859-1")
即:将报表参数Code进行转码结果输入至文本框。
运行效果,图片3:参数Code输入“测试汉字1”
此时的二维码在手机上微信进行扫描的话,可以识别的。图片4:
若基于手机作为终端的话,这样已经可以使用了,若使用扫描器进行读取的话则存在新的问题。
第二部分 适应扫描器操作处理
扫描器处理二维条码一般会模拟键盘输入,而中文内容无法直接被键盘处理。在图片3的运行效果图中,文本框内显示的乱码内容,就是扫描器接收反馈的内容,即基于键盘输入模拟的扫描器是无法正确处理二维码中文内容的。
考虑一个曲线救国的办法,将中文内容的“UTF-8编码串”转为字符形式的“ISO-8859-1”编码,将二维码的编码内容修改为,同时加入新的文本框显示响应内容:
java.net.URLEncoder.encode(
new String($P{Code}.getBytes("UTF-8"), "ISO-8859-1")
,"ISO8859-1")
同时为了便于调试,增加回显文本框,表达式为:
java.net.URLDecoder.decode(
java.net.URLEncoder.encode(
new String($P{Code}.getBytes("UTF-8"), "ISO-8859-1")
,"ISO8859-1")
, "utf-8")
如图片5:
其运行效果如图片6:
至此中文内容以其UTF-8编码串的内容出现在了二维码中。
第三部分 结合JS使用条码
应用条码扫描器模拟键盘输入后,网页文本框内将会得到条码值,本例中值为“%E6%B5%8B%E8%AF%95%E6%B1%89%E5%AD%971”
应用javascript函数decodeURIComponent即可回复其中文内容,图片7:
以上是关于Ireport+JS处理扫描中文二维码的主要内容,如果未能解决你的问题,请参考以下文章
js + html5 + java 实现二维码和条形码扫描.怎么用js调用摄像头