WinForm条形码打印打印(转)

WinForm条形码打印打印

WinForm条形码打印打印(转)_第1张图片
                                                图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, 
180 90 );                 //
            path.AddArc(x  +  w  -  r, y, r, r,  270 90 );             //
            path.AddArc(x  +  w  -  r, y  +  h  -  r, r, r,  0 90 );         //
            path.AddArc(x, y  +  h  -  r, r, r,  90 90 );             //
            path.CloseFigure();
            
return  path;
        }

        
private  void  panelContaioner_Paint( object  sender, PaintEventArgs e)
        {
            Graphics g 
=  e.Graphics;
            Rectangle rc 
=  new  Rectangle( 0 + 2 0 + 2 this .Width  -  10 this .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()对象获取字节数组。

 

原文地址:http://www.cnblogs.com/liucfy/archive/2009/07/19/1526676.html 

转载于:https://www.cnblogs.com/Godblessyou/archive/2011/12/13/2286630.html

你可能感兴趣的:(WinForm条形码打印打印(转))