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 选择中文字体

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值