利用C#產生Code39條碼BarCode並顯示在網頁上
- 2008-11-02
- 43666
- 0
利用C#產生Code39條碼並不難,網路上不少範例,但在demo今天使用的時候出了一點小問題,因為demo想應用在線上的會員卡製作,可是Bitmap不知道怎麼顯示在網頁上,找了Google絕大多數都是winform的,因此換個想法存到記憶體就好啦,有需要類似應用的可以參考看看。
二話不說,直接給code(本範例檔名為code39.ashx)
public void ProcessRequest(HttpContext context) { string sCode = string.Empty; //清除該頁輸出緩存,設置該頁無緩存 context.Response.Buffer = true; context.Response.ExpiresAbsolute = System.DateTime.Now.AddMilliseconds(0); context.Response.Expires = 0; context.Response.CacheControl = "no-cache"; context.Response.AppendHeader("Pragma", "No-Cache"); //將Code39條碼寫入記憶體流,並將其以 "image/Png" 格式輸出 MemoryStream oStream = new MemoryStream(); try { Bitmap oBmp = GetCode39(context.Request.QueryString["id"]); oBmp.Save(oStream, System.Drawing.Imaging.ImageFormat.Png); oBmp.Dispose(); context.Response.ClearContent(); context.Response.ContentType = "image/Png"; context.Response.BinaryWrite(oStream.ToArray()); } finally { //釋放資源 oStream.Dispose(); } } public bool IsReusable { get { return false; } } private Bitmap GetCode39(string strSource) { int x = 5; //左邊界 int y = 0; //上邊界 int WidLength = 2; //粗BarCode長度 int NarrowLength = 1; //細BarCode長度 int BarCodeHeight = 24; //BarCode高度 int intSourceLength = strSource.Length; string strEncode = "010010100"; //編碼字串 初值為 起始符號 * string AlphaBet = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%*"; //Code39的字母 string[] Code39 = //Code39的各字母對應碼 { /**//* 0 */ "000110100", /**//* 1 */ "100100001", /**//* 2 */ "001100001", /**//* 3 */ "101100000", /**//* 4 */ "000110001", /**//* 5 */ "100110000", /**//* 6 */ "001110000", /**//* 7 */ "000100101", /**//* 8 */ "100100100", /**//* 9 */ "001100100", /**//* A */ "100001001", /**//* B */ "001001001", /**//* C */ "101001000", /**//* D */ "000011001", /**//* E */ "100011000", /**//* F */ "001011000", /**//* G */ "000001101", /**//* H */ "100001100", /**//* I */ "001001100", /**//* J */ "000011100", /**//* K */ "100000011", /**//* L */ "001000011", /**//* M */ "101000010", /**//* N */ "000010011", /**//* O */ "100010010", /**//* P */ "001010010", /**//* Q */ "000000111", /**//* R */ "100000110", /**//* S */ "001000110", /**//* T */ "000010110", /**//* U */ "110000001", /**//* V */ "011000001", /**//* W */ "111000000", /**//* X */ "010010001", /**//* Y */ "110010000", /**//* Z */ "011010000", /**//* - */ "010000101", /**//* . */ "110000100", /**//*' '*/ "011000100", /**//* $ */ "010101000", /**//* / */ "010100010", /**//* + */ "010001010", /**//* % */ "000101010", /**//* * */ "010010100" }; strSource = strSource.ToUpper(); //實作圖片 Bitmap objBitmap = new Bitmap( ((WidLength * 3 + NarrowLength * 7) * (intSourceLength + 2)) + (x * 2), BarCodeHeight + (y * 2)); Graphics objGraphics = Graphics.FromImage(objBitmap); //宣告GDI+繪圖介面 //填上底色 objGraphics.FillRectangle(Brushes.White, 0, 0, objBitmap.Width, objBitmap.Height); for (int i = 0; i < intSourceLength; i++) { //檢查是否有非法字元 if (AlphaBet.IndexOf(strSource[i]) == -1 || strSource[i] == '*') { objGraphics.DrawString("含有非法字元", SystemFonts.DefaultFont, Brushes.Red, x, y); return objBitmap; } //查表編碼 strEncode = string.Format("{0}0{1}", strEncode, Code39[AlphaBet.IndexOf(strSource[i])]); } strEncode = string.Format("{0}0010010100", strEncode); //補上結束符號 * int intEncodeLength = strEncode.Length; //編碼後長度 int intBarWidth; for (int i = 0; i < intEncodeLength; i++) //依碼畫出Code39 BarCode { intBarWidth = strEncode[i] == '1' ? WidLength : NarrowLength; objGraphics.FillRectangle(i % 2 == 0 ? Brushes.Black : Brushes.White, x, y, intBarWidth, BarCodeHeight); x += intBarWidth; } return objBitmap; }
需要先using System.Drawing、System.IO
在頁面上的呼叫很簡單
<asp:Image ID="Image1" runat="server" ImageUrl="~/code39.ashx?id=12" /> id就是你要產生codebar的字串
- http://blog.blueshop.com.tw/timothychi/archive/2006/12/22/48835.aspx
- http://www.dotblogs.com.tw/jeff377/archive/2008/10/29/5818.aspx
回應討論