C# ESC

具體內容大家自己看!如有好的解決方案大家共同研究! (1)自定義紙張設置 控制面板->打印機和傳真->右鍵->服務器屬性->創建新的格式 (2)自定義紙張使用 this.printDocument1.DefaultPageSettings.PaperSize = new System.Drawing.Printing.PaperSize("NewPrint", iWidth, iHeight); NewPrint:制定一紙張名稱。 iWidth:紙張使用寬度。 iHeight:紙張使用高度。 iWidth,iHeight 可以在使用過程中調整。 例如:iWidth=923,iHeight=480 (3)ESC/P指令使用 using System; using System.Runtime.InteropServices; using System.Data; using System.IO; using System.Windows.Forms; namespace PrintDome { class ClsPrintLPT { private IntPtr iHandle; private FileStream fs; private StreamWriter sw; private string prnPort = "LPT1"; //打印機端口 public ClsPrintLPT() { } private const uint GENERIC_READ = 0x80000000; private const uint GENERIC_WRITE = 0x40000000; private const int OPEN_EXISTING = 3; /// /// 打開一個vxd(設備) /// [DllImport("kernel32.dll", EntryPoint = "CreateFile", CharSet = CharSet.Auto)] private static extern IntPtr CreateFile(string lpFileName, uint dwDesiredAccess, int dwShareMode, int lpSecurityAttributes, int dwCreationDisposition, int dwFlagsAndAttributes, int hTemplateFile); /// /// 開始連接打印機 /// private bool PrintOpen() { iHandle = CreateFile(prnPort, GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0, 0); if (iHandle.ToInt32() == -1) { MessageBox.Show("沒有連接打印機或者打印機端口不是LPT1!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); return false; } else { fs = new FileStream(iHandle, FileAccess.ReadWrite); sw = new StreamWriter(fs, System.Text.Encoding.Default); //寫數據 return true; } } /// /// 打印字符串 /// /// 要打印的字符串 private void PrintLine(string str) { sw.WriteLine(str); ; } /// /// 關閉打印連接 /// private void PrintEnd() { sw.Close(); fs.Close(); } /// /// 打印票據 /// /// tb_Temp 全部字段數據集合 /// true:打印成功 false:打印失敗 public bool PrintDataSet(DataSet dsPrint) { try { if (PrintOpen()) { PrintLine(" "); PrintLine("[XXXXXXXXXXXXXXXXXX超市]"); PrintLine("NO : " + dsPrint.Tables[0].Rows[0][1].ToString()); PrintLine("XXXXXX: " + dsPrint.Tables[0].Rows[0][2].ToString()); PrintLine("XXXXXX: " + dsPrint.Tables[0].Rows[0][3].ToString()); PrintLine("XXXXXX: " + dsPrint.Tables[0].Rows[0][4].ToString()); PrintLine("XXXXXX: " + dsPrint.Tables[0].Rows[0][5].ToString()); PrintLine("操 作 員: " + dsPrint.Tables[0].Rows[0][6].ToString() + " " + dsPrint.Tables[0].Rows[0][7].ToString()); PrintLine("-------------------------------------------"); } PrintEnd(); return true; } catch { return false; } } /// /// ESC/P 指令 /// /// 0:退紙命令 1:進紙命令 2:換行命令 public void PrintESC(int iSelect) { string send; iHandle = CreateFile(prnPort, GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0, 0); if (iHandle.ToInt32() == -1) { MessageBox.Show("沒有連接打印機或者打印機端口不是LPT1!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); } else { fs = new FileStream(iHandle, FileAccess.ReadWrite); } byte[] buf = new byte[80]; switch (iSelect) { case 0: send = "" + (char)(27) + (char)(64) + (char)(27) + 'j' + (char)(255); //退紙1 255 爲半張紙長 send = send + (char)(27) + 'j' + (char)(125); //退紙2 break; case 1: send = "" + (char)(27) + (char)(64) + (char)(27) + 'J' + (char)(255); //進紙 break; case 2: send = "" + (char)(27) + (char)(64) + (char)(12); //換行 break; default: send = "" + (char)(27) + (char)(64) + (char)(12); //換行 break; } for (int i = 0; i < send.Length; i++) { buf[i] = (byte)send[i]; } fs.Write(buf, 0, buf.Length); fs.Close(); } } } --------------------------------------------------------------------------------------------------------------- 使用例1(LPT打印):  printLPT.PrintESC(0);  //打印前退紙  printLPT.PrintDataSet(dsPrint);  printLPT.PrintESC(1);  //打印後進紙 使用例2(水晶報表打印): this.reportDocument1.Load(Application.StartupPath + "//Temp.rpt"); PageMargins pMaargins; pMaargins = reportDocument1.PrintOptions.PageMargins; pMaargins.topMargin = 5; pMaargins.bottomMargin = 0; pMaargins.leftMargin = 5; pMaargins.rightMargin = 0; reportDocument1.PrintOptions.ApplyPageMargins(pMaargins); reportDocument1.Refresh(); reportDocument1.SetDataSource(dsPrint); //reportDocument1.PrintOptions.PrinterName = "Microsoft Office Document Image Writer"; printLPT.PrintESC(0);  //打印前退紙 reportDocument1.PrintToPrinter(1, false, 0, 0); timer1.Enabled = true; 使用例3(printDocument 打印): this.printDocument1.DefaultPageSettings.PaperSize = new System.Drawing.Printing.PaperSize("NewPrint", iWidth, iHeight); printLPT.PrintESC(0);  //打印前退紙 this.printDocument1.Print(); -----------------------------------PrintPage()---------------------------------------------------------- int iX; int iY; int iTopMargin = 35; //頂邊距 int iLeftMargin = 70;//左邊距 int iButtomMargin = 40;//底邊距 int iMarginX = 25; //文字間距 int iMarginY = 25; //文字行距 int icellTopMargin = 12; //單元格頂邊距 int icellLeftMargin = 12; //單元格左邊距 private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e) { Font titleFont = new Font("宋體", 16, FontStyle.Bold);//標題字體 Font fntTxt = new Font("宋體", 11, FontStyle.Regular); //正文文字 Brush brush = new SolidBrush(Color.Black);//畫刷 Pen pen = new Pen(Color.Black); //線條顏色 try { string sTitle = "<>"; //string sDataTitle = "No: " + dsPrint.Tables[0].Rows[0][1].ToString() + " " + // "XXXXX: " + dsPrint.Tables[0].Rows[0][17].ToString() + " " + // "XXXXX: " + dsPrint.Tables[0].Rows[0][19].ToString() + " " + dsPrint.Tables[0].Rows[0][18].ToString(); string sDataTitle = "No: " + dsPrint.Tables[0].Rows[0][1].ToString() + " " + "XXXXX: " + dsPrint.Tables[0].Rows[0][17].ToString() + " " + "XXXXX: " + dsPrint.Tables[0].Rows[0][19].ToString(); int width = e.PageBounds.Width; int height = e.PageBounds.Height; //int xoffset = (int)((width - e.Graphics.MeasureString(sTitle, titleFont).Width) / 2); //int xoffset2 = (int)((width - e.Graphics.MeasureString(sDataTitle, fntTxt).Width) / 2); //e.Graphics.DrawString(sTitle, titleFont, brush, xoffset, iTopMargin); //標題 //e.Graphics.DrawString(sDataTitle, fntTxt, brush, xoffset2, iTopMargin += iTopMargin + 5); //副標題數據 e.Graphics.DrawString(sTitle, titleFont, brush, iLeftMargin + 140, iTopMargin); //標題 e.Graphics.DrawString(sDataTitle, fntTxt, brush, iLeftMargin + 60, iTopMargin += 35); //副標題數據 iMarginX = iLeftMargin + icellLeftMargin; iMarginY = iTopMargin + 25 + icellTopMargin; iX = iLeftMargin; iY = iTopMargin + 25; e.Graphics.DrawLine(pen, new Point(iX, iY), new Point(iX, iY + 110)); //最左邊的豎線 e.Graphics.DrawLine(pen, new Point(iX, iY), new Point(iX + 670, iY)); //最上邊的豎線 string sCell = "XXXXX: "; int iCellWidth = (int)((e.Graphics.MeasureString(sCell, fntTxt).Width)); int iCellHeight = (int)((e.Graphics.MeasureString(sCell, fntTxt).Height)); e.Graphics.DrawString("XXXXX: ", fntTxt, brush, new Point(iMarginX, iMarginY)); e.Graphics.DrawLine(pen, new Point(iX += 2 * icellLeftMargin + iCellWidth, iY), new Point(iX, iY + 110)); //1 e.Graphics.DrawString(dsPrint.Tables[0].Rows[0][2].ToString(), fntTxt, brush, new Point(iMarginX += 2 * icellLeftMargin + iCellWidth, iMarginY)); e.Graphics.DrawLine(pen, new Point(iX += 2 * icellLeftMargin + 100, iY), new Point(iX, iY + 110)); //2 e.Graphics.DrawString("XXXXX: ", fntTxt, brush, new Point(iMarginX += 2 * icellLeftMargin + 100, iMarginY)); e.Graphics.DrawLine(pen, new Point(iX += 2 * icellLeftMargin + iCellWidth, iY), new Point(iX, iY + 110)); //3 e.Graphics.DrawString(dsPrint.Tables[0].Rows[0][3].ToString(), fntTxt, brush, new Point(iMarginX += 2 * icellLeftMargin + iCellWidth, iMarginY)); e.Graphics.DrawLine(pen, new Point(iX += 2 * icellLeftMargin + 100, iY), new Point(iX, iY + 110)); //4 e.Graphics.DrawString("XXXXX: ", fntTxt, brush, new Point(iMarginX += 2 * icellLeftMargin + 100, iMarginY)); e.Graphics.DrawLine(pen, new Point(iX += 2 * icellLeftMargin + iCellWidth, iY), new Point(iX, iY + 110)); //5 e.Graphics.DrawString(dsPrint.Tables[0].Rows[0][4].ToString() + " KG", fntTxt, brush, new Point(iMarginX += 2 * icellLeftMargin + iCellWidth, iMarginY)); e.Graphics.DrawLine(pen, new Point(iX += 2 * icellLeftMargin + 100, iY), new Point(iX, iY + 110)); //6 iMarginX = iLeftMargin + icellLeftMargin; iMarginY = iTopMargin + 20 + iCellHeight + 3 * icellTopMargin; iX = iLeftMargin; iY = iTopMargin + 20 + iCellHeight + 2 * icellTopMargin; e.Graphics.DrawLine(pen, new Point(iX, iY), new Point(iX + 670, iY)); //最下邊的豎線 e.Graphics.DrawString("XXXXX: ", fntTxt, brush, new Point(iMarginX, iMarginY)); e.Graphics.DrawString(dsPrint.Tables[0].Rows[0][13].ToString() + " KG", fntTxt, brush, new Point(iMarginX += 2 * icellLeftMargin + iCellWidth, iMarginY)); e.Graphics.DrawString("XXXXX: ", fntTxt, brush, new Point(iMarginX += 2 * icellLeftMargin + 100, iMarginY)); e.Graphics.DrawString(dsPrint.Tables[0].Rows[0][14].ToString() + " KG", fntTxt, brush, new Point(iMarginX += 2 * icellLeftMargin + iCellWidth, iMarginY)); e.Graphics.DrawString("XXXXX: ", fntTxt, brush, new Point(iMarginX += 2 * icellLeftMargin + 100, iMarginY)); e.Graphics.DrawString(dsPrint.Tables[0].Rows[0][15].ToString(), fntTxt, brush, new Point(iMarginX += 2 * icellLeftMargin + iCellWidth, iMarginY)); iMarginX = iLeftMargin + icellLeftMargin; iMarginY = iTopMargin + 20 + iCellHeight + 6 * icellTopMargin; iX = iLeftMargin; iY = iTopMargin + 20 + iCellHeight + 5 * icellTopMargin; e.Graphics.DrawLine(pen, new Point(iX, iY), new Point(iX + 670, iY)); //最下邊的豎線 e.Graphics.DrawString("XXXXX: ", fntTxt, brush, new Point(iMarginX, iMarginY)); e.Graphics.DrawString(dsPrint.Tables[0].Rows[0][8].ToString(), fntTxt, brush, new Point(iMarginX += 2 * icellLeftMargin + iCellWidth, iMarginY)); e.Graphics.DrawString("XXXXX: ", fntTxt, brush, new Point(iMarginX += 2 * icellLeftMargin + 100, iMarginY)); e.Graphics.DrawString(dsPrint.Tables[0].Rows[0][10].ToString(), fntTxt, brush, new Point(iMarginX += 2 * icellLeftMargin + iCellWidth, iMarginY)); e.Graphics.DrawString("XXXXX: ", fntTxt, brush, new Point(iMarginX += 2 * icellLeftMargin + 100, iMarginY)); e.Graphics.DrawString(dsPrint.Tables[0].Rows[0][12].ToString(), fntTxt, brush, new Point(iMarginX += 2 * icellLeftMargin + iCellWidth, iMarginY)); iX = iLeftMargin; iY = iTopMargin + 20 + iCellHeight + 8 * icellTopMargin; e.Graphics.DrawLine(pen, new Point(iX, iY), new Point(iX + 670, iY)); //最下邊的豎線 e.Graphics.DrawLine(pen, new Point(0, iY += iButtomMargin), new Point(e.PageBounds.Width, iY)); //最下邊的豎線 } catch { MessageBox.Show(this, "數據庫連接錯誤,打印失敗!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); } } ----------------------------------PrintPage()-------------------------------------- 附1: 代碼 功能 代碼 功能 LF 換行 ESC m 局部切割 CR 回車 ESC o 印章 ESC SP 設置右邊界 ESC q 釋放紙 ESC ! 設置打印方式 ESC r 選擇打印顏色 ESC * 設置位映射方式 ESC z 設置或取消兩頁並行打印 ESC @ 初始化打印機 ESC BEL 蜂鳴器ON/OFF ESC R 選擇國際字符子集 ESC c5 禁止/使能面板開關 ESC d 打印及N行進紙 ESC c6 禁止/使能ON-LINE開關 ESC t 選擇字符碼錶 ESC p 產生指定脈衝 ESC l 選擇或取消倒過來的字符ESC V 發送打印機狀態 ESC c0 選擇打印頁 ESC ~ LED ON/OFF FF 打印送出單頁 HT 水平TAB RS 流水TAB ESC % 選擇或取消用戶自定義字符集 ESC 2 選擇行間距爲1/6英寸 ESC & 定義用戶自定義字符集 ESC 3 設置行進爲最小間距 ESC D 設置TAB位置 ESC < 返回行首 ESC i 全切割 ESC C 設置單頁長度 ESC f 設單頁等待時間 ESC F 選擇或取消單頁退紙區 ESC e 打印病退回N行 ESC J 以最小間距進行打印和進紙 ESC c4 選擇打印紙及檢測器(終止打印) ESC K 以最小間距進行打印和退紙 ESC c3 選擇紙結束信號輸出 ESC U 選擇或取消單向打印 ESC c1 選擇行間距中文模式下的命令代碼 功能 代碼 功能 FS & 選擇中文字符模式 FS – n 設置中文字符下劃線模式開關 FS . 取消中文模式 FS ! n 選擇中文字體

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