關於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: