zoukankan      html  css  js  c++  java
  • rdlc报表显示条码 .

    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.Length];
                            file.Read(bytGoodsCode, 0, bytGoodsCode.Length);
                            file.Close();

    4.将条码图片保存进数据库

    5.将条码图片在报表上显示出来:

      在报表上拖放一个image图像控件,Source设置为DataBase(External为嵌入图片,Embedded为外部图片),Value 选择条码字段,设置MIMEType属性。

    这样就能看见报表上面的图片了。

    注:本来数据库存放条码图片的URL,但是在报表上用Embedded显示图片的时候,给image控件绑定了条码图片的URL值,但是运行图片显示不出,image控件的SRC="";还没有找到问题。

  • 相关阅读:
    JVM学习02:GC垃圾回收和内存分配
    JVM学习01:内存结构
    webservice学习01:wsdl文档结构
    项目总结21:项目总结21:input实现多图上传(FormData)(上传OSS并保存数据库)
    mysql学习3:mysql之my.cnf详解
    项目总结20:阿里云免费https证书申请
    5月9日——vue渲染过程中{{xxx}}显示
    5月8日——iOS中的3D Touch效果
    5月7日——采用第三方页面内容,但是顶部title使用自己的
    5月5日——更改手机状态栏的背景颜色
  • 原文地址:https://www.cnblogs.com/ewyb/p/2225081.html
Copyright © 2011-2022 走看看