C#小票打印(通用)

之前打印都是用串口,現在很多打印機都是USB接口的,換了USB接口的打印機後,USB接口的程序一直沒辦法打印,後來調用廠商的DLL, 但很麻煩,在網上找了很多,都沒有找到合適的,之後參考了PrintDocument類一些打印方法,測試成功,貼出代碼,如有不對的地方,和需要優化的,請指出。

首先:

//定義一個字符串流,用來接收所要打印的數據

 private StringReader sr;

//str要打印的數據

 public bool Print(string str)
        {
            bool result = true;
            try
            {

 sr = new StringReader(sb.ToString());

                PrintDocument pd = new PrintDocument();
                pd.PrintController = new System.Drawing.Printing.StandardPrintController();
                pd.DefaultPageSettings.Margins.Top = 2;
                pd.DefaultPageSettings.Margins.Left = 0;
                pd.DefaultPageSettings.PaperSize.Width = 320;
                pd.DefaultPageSettings.PaperSize.Height = 5150;
                pd.PrinterSettings.PrinterName = pd.DefaultPageSettings.PrinterSettings.PrinterName;//默認打印機
                pd.PrintPage += new PrintPageEventHandler(this.pd_PrintPage);
                pd.Print();

            }
            catch (Exception ex)
            {
                result = false;
            }
            finally
            {
                if (sr != null)
                    sr.Close();
            }
            return result;
        }

 

  private void pd_PrintPage(object sender, PrintPageEventArgs ev)
        {
        Font    printFont = new Font("Arial", 9);//打印字體

            float linesPerPage = 0;
            float yPos = 0;
            int count = 0;
            float leftMargin = ev.MarginBounds.Left;
            float topMargin = ev.MarginBounds.Top;
            String line = "";

              linesPerPage = ev.MarginBounds.Height / printFont.GetHeight(ev.Graphics);
            while (count < linesPerPage && ((line = sr.ReadLine()) != null))
            {
                yPos = topMargin + (count * printFont.GetHeight(ev.Graphics));
                ev.Graphics.DrawString(line, printFont, Brushes.Black,
                   leftMargin, yPos, new StringFormat());
                count++;
            }

            // If more lines exist, print another page.
            if (line != null)
                ev.HasMorePages = true;
            else
                ev.HasMorePages = false;
        }

調用Print(string str)方法就可以打印啦!
例:   StringBuilder sb = new StringBuilder();
            sb.Append("     益民停車場管理系統  \n");
            sb.Append("*************************************\n");
            sb.Append("進場時間:" + DateTime.Now.ToString() + "\n");
            sb.Append("出場時間:" + DateTime.Now.AddHours(2).ToString() + "\n");
            sb.Append("停車時長:   2   小時\n");
            sb.Append("停車收費:   5     元\n");
            sb.Append("*************************************\n");

            Print(string sb.toString());

另外:此方法不管是串口,並口,還是USB接口的打印機都可以調用,前提是一定要將打印機設爲默認打印機。如果要關閉打印機,可設一個BOOL變量,如果爲true則調用,否則不調用。

 

本文出自 “溫馨夢痕” 博客,請務必保留此出處http://317057112.blog.51cto.com/1361376/1351886


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章