Ireport+JS處理掃描中文二維碼

來源:互聯網
上載者:User

標籤:二維碼 中文 ireport jasperreport

關於JasperReport的基礎應用參考:

IReport+JasperReport+Applet報表列印


應用IReport+JasperReport處理含中文二維碼的思路與過程。

  1. 在報表中展現二維條碼。

  2. 適應掃描器操作處理(中文轉義)。

  3. 結合JS使用條碼。


第一部分 在報表中展現二維條碼:

    參考:iReport中產生二維條碼(QR Code)

    思路:應用zxing工具包產生二維碼的圖形,並寫入在IReport報表的映像組件中。

    步驟1:下載core.jar和javase.jar。

    步驟2:引入IReport。

    開啟iReport,“工具”—“選項”—“classpath”,然後“Add JAR”,選擇上面提到的兩個jar檔案。

    圖片1:

  650) this.width=650;" src="http://s5.51cto.com/wyfs02/M01/8A/2B/wKiom1gpeA7ClTKEAAEF7vjEgxc192.png-wh_500x0-wm_3-wmp_4-s_2131346976.png" title="p1.png" style="float:none;" alt="wKiom1gpeA7ClTKEAAEF7vjEgxc192.png-wh_50" />  

    加入映像組件,並設定內容運算式,圖片2:

    650) this.width=650;" src="http://s2.51cto.com/wyfs02/M01/8A/2B/wKiom1gpeA-hdpvGAAEg7GcKMlQ824.png-wh_500x0-wm_3-wmp_4-s_3024377226.png" title="p2.png" style="float:none;" alt="wKiom1gpeA-hdpvGAAEg7GcKMlQ824.png-wh_50" />

    映像組件的運算式內容:

    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”

    650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/8A/27/wKioL1gpeBDSmz71AAC2-NVGW9I941.png-wh_500x0-wm_3-wmp_4-s_867612818.png" title="p3.png" style="float:none;" alt="wKioL1gpeBDSmz71AAC2-NVGW9I941.png-wh_50" />

    此時的二維碼在手機上進行掃描的話,可以識別的。圖片4:

    650) this.width=650;" src="http://s2.51cto.com/wyfs02/M01/8A/28/wKioL1gpeaXgRDqUAACPm2O__ZU998.png-wh_500x0-wm_3-wmp_4-s_2363191452.png" title="p4.png" alt="wKioL1gpeaXgRDqUAACPm2O__ZU998.png-wh_50" />

    若基於手機作為終端的話,這樣已經可以使用了,若使用掃描器進行讀取的話則存在新的問題。


第二部分 適應掃描器操作處理

    掃描器處理二維條碼一般會類比鍵盤輸入,而中文內容無法直接被鍵盤處理。在圖片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:

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/8A/2B/wKiom1gpeBHACjmoAAC2hll0TDA696.png-wh_500x0-wm_3-wmp_4-s_1174709067.png" title="p5.png" style="float:none;" alt="wKiom1gpeBHACjmoAAC2hll0TDA696.png-wh_50" />

其運行效果片6:

650) this.width=650;" src="http://s1.51cto.com/wyfs02/M02/8A/27/wKioL1gpeBHzvvW2AADjdhwnYBo235.png-wh_500x0-wm_3-wmp_4-s_1703504733.png" title="p6.png" style="float:none;" alt="wKioL1gpeBHzvvW2AADjdhwnYBo235.png-wh_50" />

至此中文內容以其UTF-8編碼串的內容出現在了二維碼中。



第三部分 結合JS使用條碼

    應用條碼掃描器類比鍵盤輸入後,網頁文字框內將會得到條碼值,本例中值為“%E6%B5%8B%E8%AF%95%E6%B1%89%E5%AD%971”

    應用javascript函數decodeURIComponent即可回複其中文內容,圖片7:

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M00/8A/2B/wKiom1gpeBKzT_x1AABcjXblRVk476.png-wh_500x0-wm_3-wmp_4-s_2658732427.png" style="float:none;" title="p7.png" alt="wKiom1gpeBKzT_x1AABcjXblRVk476.png-wh_50" />



Ireport+JS處理掃描中文二維碼

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.