rdlc報表顯示條碼 .

來源:互聯網
上載者:User

1.條碼的產生:

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;
        }

 

2.產生條碼圖片

MemoryStream oStream2 = new MemoryStream();
                        try
                        {
                            Bitmap oBmp2 = GetCode39(goodsNum);
                            oBmp2.Save(oStream2, System.Drawing.Imaging.ImageFormat.Png);
                            //圖片路徑
                            oBmp2.Save(url + goodsName + ".png",   System.Drawing.Imaging.ImageFormat.Png);
                            oBmp2.Dispose();
                        }
                        finally
                        {
                            oStream2.Dispose();
                        }

3.讀取條碼圖片轉化為二進位流


                        FileStream file = new FileStream(url + freightBill + ".png", FileMode.Open, FileAccess.Read);
                        Byte[] bytGoodsCode = new Byte;
                        file.Read(bytGoodsCode, 0, bytGoodsCode.Length);
                        file.Close();

 

4.將條碼圖片儲存進資料庫

5.將條碼圖片在報表上顯示出來:

  在報表上拖放一個image影像控制,Source設定為DataBase(External為內嵌圖片,Embedded為外部圖片),Value 選擇條碼欄位,設定MIMEType屬性。

 

這樣就能看見報表上面的圖片了。

註:本來資料庫存放條碼圖片的URL,但是在報表上用Embedded顯示圖片的時候,給image控制項綁定了條碼圖片的URL值,但是運行圖片顯示不出,image控制項的SRC="";還沒有找到問題。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.