在Web上動態建立條碼
這篇文章討論的是如何根據資料庫的欄位在web上動態地建立條碼的問題,這在如下的情況下非常有用:使用者輸入資訊到系統中,然後顯示一個總結頁面“這就是你所輸入的”,這個頁面可以被列印,並在日後可以用條碼進行跟蹤。
實現這個功能的關鍵在於如何將數值比如“ABC”翻譯為條碼。這裡我們使用“代碼39”,關於它的詳細情況,請參閱有關定義。我想將產生的條碼顯示在web頁面上,這樣使用者就能列印包含條碼的這個頁面,然後,再在圖形系統的處理中使用它。許多使用者都在系統中安裝了“代碼39”字型,所以我就能夠在頁面中改變它,但是我不想依賴它們。我想在頁面中建立,並且獨立於瀏覽器和電腦。
我的解決方案是:為Code39中每一個支援的字元建立GIF圖形檔案。我使用Microsoft Paint軟體建立Code39字型大小的文字框,然後為每一個字元建立一個圖形。接著,使用Microsoft Image Composer將它們轉換為GIF格式。最後,使用掃描軟體檢查這些字元,看看是否能正確地解釋。下面,你將看到A、B、C以及星號(*)的條碼:
Code for A
Code for B
Code for C
Code for Asterisk
然後,為了在ASP頁面中描繪資料庫中數值的條碼,僅僅簡單地遍曆BarCodeText變數字串中的每一個字元,然後建立< IMG SRC=“...” >標記以替換字元為相應條碼圖形檔案。這非常簡單,不需要在用戶端安裝字型檔。相關代碼如下:
’Code 39 barcodes require an asterisk as the start and stop characters
Response.write "< IMG SRC=""http://edu.cnzz.cn/NewsInfo/http://edu.cnzz.cn/NewsInfo/asterisk.gif"" WIDTH=""30"" HEIGHT=""36"">"
For x = 1 to Len(Trim(rst("BarCodeText")))
Response.Write "< IMG SRC=""" & mid(rst("BarCodeText"),x,1) & _
".gif"" WIDTH=""30"" HEIGHT=""36"">"
Next
’Code 39 barcodes require an asterisk as the start and stop characters
Response.write "< IMG SRC=""http://edu.cnzz.cn/NewsInfo/http://edu.cnzz.cn/NewsInfo/asterisk.gif"" WIDTH=""30"" HEIGHT=""36"">"
如果在記錄集目前記錄中BarCodeText的數值是“ABC”,那麼執行上述代碼後,HTML的結果是:
< IMG SRC="http://edu.cnzz.cn/NewsInfo/http://edu.cnzz.cn/NewsInfo/asterisk.gif" WIDTH="30" HEIGHT="36">
< IMG SRC="http://edu.cnzz.cn/NewsInfo/A.gif" WIDTH="30" HEIGHT="36">
< IMG SRC="http://edu.cnzz.cn/NewsInfo/B.gif" WIDTH="30" HEIGHT="36">
< IMG SRC="http://edu.cnzz.cn/NewsInfo/C.gif" WIDTH="30" HEIGHT="36">
< IMG SRC="http://edu.cnzz.cn/NewsInfo/http://edu.cnzz.cn/NewsInfo/asterisk.gif" WIDTH="30" HEIGHT="36">
然後,將顯示如下圖形:
現在,將該頁面列印後,就可以被條碼掃描器所跟蹤了。
有2點關於條碼的注意事項:不是所有的條碼都能支援所有的字元集。Code39是很好而且很簡單的一種。它具備可變長度,支援所有的大寫字元、數字、星號以及7個特殊字元。對於每個字元,它使用風格一致的5線(2寬3窄)4空(指間隙,1寬3窄)形式。另外的字元集支援更多的,使用不同的解碼方案。確認對每個字元都建立了GIF圖形檔案,同時,你可以修改圖形的寬度和高度屬性,從而在頁面上顯示稍大的或者稍小的條碼。
另外,如果遇到特殊的字元,上面的遍曆迴圈代碼將不會工作,因為,不能將GIF檔案命名為+.gif。這時,就要編寫一個接受字元Ascii數值的函數,然後使用CASE語句返回等價於檔案名稱的字串。如果資料庫欄位的數值是整型或者僅僅包含字元或者數字,上面的遍曆代碼就已經很好了!
以上介紹的方法不是很複雜,但是在某些方面卻是很簡單,而且很好用。