WinForm条形码打印打印


                                                图2009-07-19
对于条形码,微软VS2005自带的报表软件并没有此设计功能。虽然网上有比较多的关于在.NET下制作条形码的控件,担忧不少
功能不全,需要更多的功能的条形码控件就得付钱,最近做一个进销货存的软件就遇到了这个问题。需求就是能打印指定的条码。
如果全部自己画画出来比较费劲。所以我选择改造现有的条码控件。我就用的控件就是Cobainsoft的Barcode控件,这个控件能
够实现几种规格的条码,但是并不能实现像上图(2009-07-19这中效果),所以下面就是改造了。
       1.首先把要实现上图的条形码做成一个用户控件。
        该控件包含一个BarCode控件来实现条码,一个Panel来实现边框、加上几个Lable是存放商品名称、价格,并且通过封装
把需要的功能做进用户控件。要实现这个图形的边框就需要针对Panel的Paint方法编写代码。
      private GraphicsPath GetGraphicsPath(Rectangle rc, int r)
        {
            
int x = rc.X, y = rc.Y, w = rc.Width, h = rc.Height;
            GraphicsPath path 
= new GraphicsPath();
            path.AddArc(x, y, r, r, 
18090);                //
            path.AddArc(x + w - r, y, r, r, 27090);            //
            path.AddArc(x + w - r, y + h - r, r, r, 090);        //
            path.AddArc(x, y + h - r, r, r, 9090);            //
            path.CloseFigure();
            
return path;
        }

        
private void panelContaioner_Paint(object sender, PaintEventArgs e)
        {
            Graphics g 
= e.Graphics;
            Rectangle rc 
= new Rectangle(0+20+2this.Width - 10this.Height -5);
            SolidBrush brush 
= new SolidBrush(Color.Black);
            Pen pen 
= new Pen(brush, 1);
            g.DrawPath(pen, 
this.GetGraphicsPath(rc, 20));
        }

2.然后我们就可以实例化该用户控件,然后将制定的值赋给该控件生成不同的条码。由于微软自带的报表控件报表项
不支持此控件,但是它支持图片,那么我们就需要把该控件生成的条码转换成图片,网上有不少方法是通过截屏来取
的图片的,这种办法在多于一个条码的时候是不好现在,幸运的是继承UserControl类的控件有一个方法DrawToBitmap
该方法支持把该控件在显示器上呈现的外观呈现到指定的位图对象。
3.把生成的图片转换成字节数组(微软的Report中的图片,如果是从数据库中取得的就要有转换成字节数组)然后传递
给报表指定的数据源就可以了。
   首先实例化一个位图对象Btmp,通过DrawToBitmap方法呈现控件到该对象中,然后实例化一个内存流对象 
MemoryStream ms=new MemoryStream(),通过Btmp的Save方法吧位图对象保存到内存流里面,然后通过流对象
的GetBuffer()对象获取字节数组。
posted @ 2009-07-19 21:21  Justin Liu  阅读(8980)  评论(15编辑  收藏  举报