zoukankan      html  css  js  c++  java
  • WinForm条形码打印打印(转)

    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()对象获取字节数组。

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

  • 相关阅读:
    Java单例模式深入详解
    深入理解Java的接口和抽象类
    java中为什么要给类使用代理?它有哪些好处?
    Log4j--java日志
    Log4j rootLogger配置
    selenium之 下拉选择框Select
    关于弹框
    spring controller接口中,用pojo对象接收页面传递的参数,发现spring在对pojo对象赋值时,有一定顺序的问题
    navicat mysql报错误:2013 Lost connection to MySQL server during query
    记录一次mysql导入千万条测试数据过慢的问题!
  • 原文地址:https://www.cnblogs.com/Godblessyou/p/2286630.html
Copyright © 2011-2022 走看看