生成条形码

<一>路由
     routes.MapRoute(
               name: "home",
               url: "home/GetBar/{id}",
               defaults: new { controller = "Home", action = "GetBar", id = UrlParameter.Optional }
           );
<二>HTML页
<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>条形码</title>
    <script src="~/Scripts/jquery-1.10.2.js"></script>
    <script>

        function wds_createbar() {
            var num = $("#codenum").val();
            $("#img-div").attr("src", "/home/GetBar?rom="+num);
        }

    </script>
</head>
<body>
    <div>
        <input type="text" value="" id="codenum"/>
        <input type="button" value="生成条形码" onclick="wds_createbar()"/><br>
        <div style="width: 200px;height: 200px" id="wds-bar-div">
            <img id="img-div" />
        </div>
    </div>
</body>
</html>
<三>控制器

    public void GetBar()
        {
            var strNum = Request.QueryString["rom"];
            if (!string.IsNullOrEmpty(strNum))
            {
                Bitmap b = GetCode39(strNum);           
                var stream = new MemoryStream();
                b.Save(stream, ImageFormat.Png);
                var imagebytes = stream.ToArray();
                Response.OutputStream.Write(imagebytes, 0, imagebytes.Length);

               //在电脑上形成图片
                //string filename1 = "d:\\22.jpg";=
                //b.Save(filename1, ImageFormat.Jpeg);


            }       
        }


//生成条形码的方法
        private Bitmap GetCode39(string strSource)
        {
            int x = 5; //左邊界
            int y = 0; //上邊界
            int WidLength = 4; //粗BarCode長度
            int NarrowLength =2; //細BarCode長度
            int BarCodeHeight =72; //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;
        } 

 

posted @ 2015-03-26 17:29  逍遥帝君  阅读(278)  评论(0编辑  收藏  举报