C#调用局域网中POS打印机

    对于我来说,真正的编程现在算是刚刚开始,因为以前做得一些东西也都是练习,没有成为真正的用到项目中的的。

   我写这篇文章也就是为了加强一下练习,因为我还是一个菜鸟,所以有好多东西写得不是很明白,因为我自己本身都不是很明白,但是我还是要写出来,也许可以帮助一些像我一样刚开始的人吧,并且希望大侠们能多多的指教!我这个程序只是简单的调用调用打印机,实现最基本的功能!我主要用到是PrintDocument类,PrinterSettings类,然后就是调用PrintDocument实例的Print()方法打印。具体如下:

   首先我们要定义一个字符串类型的字段,用来接收要打印的内容,string stringToPrint = string.Empty;

   然后我们我们需要实例一个PrintDocument实例,实际上PrintDocument就像我们实际的纸张一样,可以进行设置打印的样式,PrintDocument printDocument1= new PrintDocument();下边的这些代码就是对打印的一些基本设置:

            this.printDocument1.DefaultPageSettings.Margins.Bottom = 0;
            this.printDocument1.DefaultPageSettings.Margins.Top = 0;
            this.printDocument1.DefaultPageSettings.Margins.Left = 0;
            this.printDocument1.DefaultPageSettings.Margins.Right = 0;

   接下来,我们需要获取要调用局域网中的打印机的名字,由于一个局域网里有可能安装了好多个打印机,所以我们要指出或获取局域网中所有安装打印机的名字,在这里用到了PrinterSettings.InstalledPrinters,作用是获取所有安装的打印机,我们可以声明一个数组,用来存储这些打印机的信息,string[] printerName=new string[PrinterSettings.InstalledPrinters.Count];大小为打印机的数量,然后可以用PrinterSettings.InstalledPrinters.CopyTo(printerName, 0);来拷贝到数组中,
这样我们就可以指定我们需要的打印机的名字了,this.printDocument1.PrinterSettings.PrinterName =printerName[0]; 

   还有一点,就是我们需要写printDocument1_PrintPage 事件,用来设计打印的逻辑,这个事件是由调用Print()方法激发的。

   具体代码如下: 

public partial class FrmPrintLook : Form
   {
       string stringToPrint = string.Empty;
       PrintDocument printDocument1= new PrintDocument();
       string[] printerName=new string[PrinterSettings.InstalledPrinters.Count];
       public FrmPrintLook()
       {
           InitializeComponent();
           PrinterSettings.InstalledPrinters.CopyTo(printerName, 0);
           this.printDocument1.PrinterSettings.PrinterName =printerName[0];
           this.printDocument1.PrintPage += new PrintPageEventHandler(printDocument1_PrintPage);
       }
       void printDocument1_PrintPage(object sender, PrintPageEventArgs e)
       {
           int charactersOnPage = 0;
           int linesPerPage = 0;
           //e.MarginBounds.Width=42;
           e.Graphics.MeasureString(stringToPrint, this.Font, e.MarginBounds.Size, StringFormat.GenericTypographic, out charactersOnPage, out linesPerPage);
           e.Graphics.DrawString(stringToPrint, this.Font, Brushes.Black, e.MarginBounds, StringFormat.GenericTypographic);
           stringToPrint = stringToPrint.Substring(charactersOnPage);
           e.HasMorePages =(stringToPrint.Length>0);
       }
       private void btnPrint_Click(object sender, EventArgs e)
       {
           string fileName = "ToPrint.txt";
           string filePath = @"E:\";
           printDocument1.DocumentName = fileName;
           if (this.richTextBox1.Text=="")
           {
               return;
           }

           byte[] cuff = System.Text.Encoding.Default.GetBytes(this.richTextBox1.Text);

           foreach (byte item in cuff)
           {
               stringToPrint += item.ToString();
           }
           this.printDocument1.DefaultPageSettings.Margins.Bottom = 0;
           this.printDocument1.DefaultPageSettings.Margins.Top = 0;
           this.printDocument1.DefaultPageSettings.Margins.Left = 0;
           this.printDocument1.DefaultPageSettings.Margins.Right = 0;
           this.printDocument1.Print();
       }
   }

由于自己也是刚开始接触这个打印机的代码,理解的不是很好,在网上有好多比这好的多得代码,但是呢,我还是要写的,因为每个人只要不放弃,时时刻刻的都在成长中,也相信,将来一定能写出好的代码,我这写得比较乱,还望看到的各位多多包涵,人毕竟有第一次,以后会好的,同时也希望各位大侠或者像我一样的菜鸟,可以为我提更多的建议,让自己能够成长的快一些,让我们一起努力吧!!

posted @ 2011-08-28 17:26  SunRain117  阅读(3351)  评论(2编辑  收藏  举报