使用的佳博GP-5890XIII

http://www.cnblogs.com/lovenan/p/3217448.html

  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Drawing.Drawing2D;
  7. using System.Drawing.Printing;
  8. using System.Linq;
  9. using System.Text;
  10. using System.Threading.Tasks;
  11. using System.Windows.Forms;
  12. namespace JBPrinter
  13. {
  14. public partial class Form1 : Form
  15. {
  16. private IntPtr Gp_IntPtr; //驱动打印句柄
  17. private libUsbContorl.UsbOperation NewUsb = new libUsbContorl.UsbOperation();
  18. private string iPaddress;
  19. private System.Windows.Forms.PrintPreviewDialog printv_pos = null;
  20. private System.Drawing.Printing.PrintDocument printd_pos = null;
  21. public Form1()
  22. {
  23. InitializeComponent();
  24. iPaddress = txt_Ip1.Text.Trim() + "." + txt_Ip2.Text.Trim() + "." + txt_Ip3.Text.Trim() + "." + txt_Ip4.Text.Trim();
  25. }
  26. private void btn_dk_Click(object sender, EventArgs e)
  27. {
  28. LoadPOSDll PosPrint = new LoadPOSDll();
  29. //POS_COM_DTR_DSR 0x00 流控制为DTR/DST
  30. //POS_COM_RTS_CTS 0x01 流控制为RTS/CTS
  31. //POS_COM_XON_XOFF 0x02 流控制为XON/OFF
  32. //POS_COM_NO_HANDSHAKE 0x03 无握手
  33. //POS_OPEN_PARALLEL_PORT 0x12 打开并口通讯端口
  34. //POS_OPEN_BYUSB_PORT 0x13 打开USB通讯端口
  35. //POS_OPEN_PRINTNAME 0X14 打开打印机驱动程序
  36. //POS_OPEN_NETPORT 0x15 打开网络接口
  37. if (PosPrint.OpenNetPort(iPaddress))//当参数nParam的值为POS_OPEN_NETPORT时,表示打开指定的网络接口,如“192.168.10.251”表示网络接口IP地址,打印时参考
  38. {
  39. Gp_IntPtr = PosPrint.POS_IntPtr;
  40. txt_OPenState.Text = "打开网口成功!";
  41. }
  42. else
  43. {
  44. txt_OPenState.Text = "失败!";
  45. }
  46. }
  47. #region 端口地址修改
  48. private void txt_Ip1_TextChanged(object sender, EventArgs e)
  49. {
  50. iPaddress = txt_Ip1.Text.Trim() + "." + txt_Ip2.Text.Trim() + "." + txt_Ip3.Text.Trim() + "." + txt_Ip4.Text.Trim();
  51. }
  52. private void txt_Ip2_TextChanged(object sender, EventArgs e)
  53. {
  54. iPaddress = txt_Ip1.Text.Trim() + "." + txt_Ip2.Text.Trim() + "." + txt_Ip3.Text.Trim() + "." + txt_Ip4.Text.Trim();
  55. }
  56. private void txt_Ip3_TextChanged(object sender, EventArgs e)
  57. {
  58. iPaddress = txt_Ip1.Text.Trim() + "." + txt_Ip2.Text.Trim() + "." + txt_Ip3.Text.Trim() + "." + txt_Ip4.Text.Trim();
  59. }
  60. private void txt_Ip4_TextChanged(object sender, EventArgs e)
  61. {
  62. iPaddress = txt_Ip1.Text.Trim() + "." + txt_Ip2.Text.Trim() + "." + txt_Ip3.Text.Trim() + "." + txt_Ip4.Text.Trim();
  63. }
  64. #endregion
  65. #region 打印机状态检测(请先检网关)
  66. private void btn_QueryStatus_Click(object sender, EventArgs e)
  67. {
  68. Byte res = new Byte();
  69. int ret = LoadPOSDll.POS_NETQueryStatus(iPaddress, out res);
  70. StringBuilder sb = new StringBuilder();
  71. if ((res & 0x10) == 0x10)
  72. sb.AppendLine("打印机出错!");
  73. if ((res & 0x02) == 0x02)
  74. sb.AppendLine("打印机脱机!");
  75. if ((res & 0x04) == 0x04)
  76. sb.AppendLine("上盖打开!");
  77. if ((res & 0x20) == 0x20)
  78. sb.AppendLine("切刀出错!");
  79. if ((res & 0x40) == 0x40)
  80. sb.AppendLine("纸将尽!");
  81. if ((res & 0x80) == 0x80)
  82. sb.AppendLine("缺纸!");
  83. if (sb.Length > 0)
  84. MessageBox.Show(sb.ToString());
  85. }
  86. #endregion
  87. #region 简单打印1
  88. private void btn_Print1_Click(object sender, EventArgs e)
  89. {
  90. //LoadPOSDll PosPrint = new LoadPOSDll();
  91. //POS_COM_DTR_DSR 0x00 流控制为DTR/DST
  92. //POS_COM_RTS_CTS 0x01 流控制为RTS/CTS
  93. //POS_COM_XON_XOFF 0x02 流控制为XON/OFF
  94. //POS_COM_NO_HANDSHAKE 0x03 无握手
  95. //POS_OPEN_PARALLEL_PORT 0x12 打开并口通讯端口
  96. //POS_OPEN_BYUSB_PORT 0x13 打开USB通讯端口
  97. //POS_OPEN_PRINTNAME 0X14 打开打印机驱动程序
  98. //POS_OPEN_NETPORT 0x15 打开网络接口
  99. // if (LoadPOSDll.POS_StartDoc())
  100. // {
  101. // byte[] by_SendData = System.Text.Encoding.Default.GetBytes("今天到此一游~~\r\n");
  102. // LoadPOSDll.POS_WriteFile(PosPrint.POS_IntPtr, by_SendData, (uint)by_SendData.Length);
  103. // LoadPOSDll.POS_WriteFile(PosPrint.POS_IntPtr, new byte[] { 0x0a }, 1);
  104. // LoadPOSDll.POS_EndDoc();
  105. // }
  106. print();
  107. }
  108. #endregion
  109. #region 先预览后打印
  110. private void button1_Click(object sender, EventArgs e)
  111. {
  112. //打印预览
  113. PrintPreviewDialog ppd = new PrintPreviewDialog();
  114. PrintDocument pd = new PrintDocument();
  115. //设置边距
  116. Margins margin = new Margins(15, 15, 15, 15);
  117. pd.DefaultPageSettings.Margins = margin;
  118. ////纸张设置默认
  119. PaperSize pageSize = new PaperSize("First custom size", getYc(70), 420);
  120. pd.DefaultPageSettings.PaperSize = pageSize;
  121. //打印事件设置
  122. pd.PrintPage += new PrintPageEventHandler(printDocument1_PrintPage);
  123. ppd.Document = pd;
  124. ppd.ShowDialog();
  125. try
  126. {
  127. //print();
  128. }
  129. catch (Exception ex)
  130. {
  131. MessageBox.Show(ex.Message, "打印出错", MessageBoxButtons.OK, MessageBoxIcon.Error);
  132. pd.PrintController.OnEndPrint(pd, new PrintEventArgs());
  133. }
  134. }
  135. #endregion
  136. private int getYc(double cm)
  137. {
  138. return (int)(cm / 25.4) * 100;
  139. }
  140. #region 打印的内容
  141. #region 标题
  142. public string GetPrintHead()
  143. {
  144. StringBuilder sb = new StringBuilder();
  145. string tou = "重庆洞子老火锅";
  146. sb.Append(" " + tou + " \n");
  147. return sb.ToString();
  148. }
  149. #endregion
  150. #region 内容
  151. public string GetPrintStr()
  152. {
  153. StringBuilder sb = new StringBuilder();
  154. string address = "重庆涪陵XXX号";
  155. string saleID = "2010930233330";
  156. string item = "商品";
  157. decimal price = 25.00M;
  158. int count = 1;
  159. decimal total = 0.00M;
  160. decimal fukuan = 500.00M;
  161. //sb.Append(" " + tou + " \n");
  162. sb.Append("--------------------------------------------------\n");
  163. sb.Append("日期:" + DateTime.Now.ToString("yyyy/MM/dd hh:mm:ss") + "\n" + "单号:" + saleID + "\n");
  164. sb.Append("--------------------------------------------------\n");
  165. sb.Append("项目" + "\t" + "数量" + "\t" + "单价" + "\t" + "小计" + "\n");
  166. for (int i = 0; i < count; i++)
  167. {
  168. decimal xiaoji = (i + 1) * price;
  169. sb.Append(item + (i + 1) + "\t" + (i + 1) + "\t" + price + "\t" + xiaoji);
  170. total += xiaoji;
  171. if (i != (count))
  172. sb.Append("\n");
  173. }
  174. sb.Append("--------------------------------------------------\n");
  175. sb.Append("数量: " + count + " 合计: " + total + "\n");
  176. sb.Append("付款: " + fukuan);
  177. sb.Append(" 现金找零: " + (fukuan - total) + "\n");
  178. sb.Append("--------------------------------------------------\n");
  179. sb.Append("地址:" + address + "\n");
  180. sb.Append("电话:123456789 123456789\n");
  181. sb.Append(" 谢谢惠顾欢迎下次光临 ");
  182. return sb.ToString();
  183. }
  184. #endregion
  185. #endregion
  186. /// POS打印
  187. /// </summary>
  188. public void print()
  189. {
  190. this.printv_pos = new System.Windows.Forms.PrintPreviewDialog();
  191. this.printd_pos = new System.Drawing.Printing.PrintDocument();
  192. this.printv_pos.AutoScrollMargin = new System.Drawing.Size(0, 0); //获取或设置自动滚动边距的大小
  193. this.printv_pos.AutoScrollMinSize = new System.Drawing.Size(0, 0); //获取或设置自动滚动条的最小大小
  194. this.printv_pos.ClientSize = new System.Drawing.Size(400, 300); //获取或设置窗体工作区的大小
  195. this.printv_pos.Document = this.printd_pos; //获取或设置要预览的文档
  196. this.printv_pos.Enabled = true;
  197. this.printv_pos.Name = "printPreviewDialog1";
  198. this.printv_pos.Visible = false;
  199. this.printd_pos.PrintController = new System.Drawing.Printing.StandardPrintController();
  200. this.printd_pos.PrintPage += new System.Drawing.Printing.PrintPageEventHandler(printDocument1_PrintPage);
  201. //设置边距
  202. System.Drawing.Printing.Margins margins = new System.Drawing.Printing.Margins(5, 5, 5, 5);
  203. this.printd_pos.DefaultPageSettings.Margins = margins;
  204. this.printd_pos.DefaultPageSettings.PaperSize = new System.Drawing.Printing.PaperSize("First custom size", getYc(70), 420);
  205. //this.printDocument1.PrinterSettings.PrinterName = "";
  206. //Margins margins = new Margins(
  207. //this.printv_pos.Document = this.printd_pos;
  208. printv_pos.PrintPreviewControl.AutoZoom = false;
  209. printv_pos.PrintPreviewControl.Zoom = 1;
  210. // this.printv_pos.ShowDialog(win);
  211. try
  212. {
  213. printd_pos.Print();
  214. }
  215. catch (Exception ex)
  216. {
  217. MessageBox.Show(ex.Message);
  218. printd_pos.PrintController.OnEndPrint(printd_pos, new PrintEventArgs());
  219. }
  220. }
  221. #region (页面设置事件)字体设置
  222. private void printDocument1_PrintPage(object sender, PrintPageEventArgs e)
  223. {
  224. Graphics g = e.Graphics;
  225. //头部
  226. string strHeader = GetPrintHead();
  227. Font ft = new Font("微软雅黑", 12.5F, FontStyle.Bold); //字体
  228. Point pt = new Point(0, 0); //顶部
  229. g.DrawString(strHeader, ft, new SolidBrush(Color.Black), pt);
  230. //Graphics.MeasureString 方法 (String, Font)
  231. //MeasureString测量用指定的 System.Drawing.Font 绘制的指定字符串
  232. Size headSize = Size.Round(g.MeasureString(strHeader, ft)); //头部的Size(宽和高)
  233. headSize.Width = 0; //设置宽为0,是因为只需要向y移动,不需要x移动
  234. //内容
  235. string strFile = GetPrintStr();
  236. ft = new Font("宋体", 8.5F, FontStyle.Regular);
  237. pt = new Point(headSize); //Point(Size size)
  238. g.DrawString(strFile, ft, new SolidBrush(Color.Black), pt);
  239. SizeF strSize = g.MeasureString(strHeader, ft);
  240. }
  241. #endregion
  242. }
  243. }

C#小票打印机的更多相关文章

  1. 小票打印机指令集封装(支持EPSON指令)

    最近写了一些关于小票打印机的程序,不难,但是记录下来,作为足迹吧. 现在市场上的小票机基本都支持EPSON指令.指令集文档 对指令集进行了自己的封装,方便以后调用: package aheiziUti ...

  2. 让 Odoo POS 支持廉价小票打印机

    为了测试 Odoo 在实际业务中的实施,我们开了一家(马上要开第二家分店)猪肉店.由于预算有限,在实施 Odoo PoS 的时候采购了一台价格为 85 元的爱宝热敏打印机,结果连上 Odoo Posb ...

  3. C#并口热敏小票打印机打印位图包括芯片的写入

    下面是打印所需要调用的代码: class LptControl { private string LptStr = "lpt1"; public LptControl(string ...

  4. C# Lpt 并口热敏小票打印机打印位图

    class LptControl { private string LptStr = "lpt1"; public LptControl(string l_LPT_Str) { L ...

  5. 转:C#并口热敏小票打印机打印位图

    最近一直在研究并口小票打印机打印图片问题,这也是第一次和硬件打交道,不过还好,最终成功了. 这是DEMO的窗体: 下面是打印所需要调用的代码: class LptControl { private s ...

  6. C# 热敏打印机 小票打印机 打印图片

    最近一直在研究并口小票打印机打印图片问题,这也是第一次和硬件打交道,不过还好,最终成功了. 这是DEMO的窗体: 下面是打印所需要调用的代码: 因为我们这里主要是打印条形码和二维码,所以以条形码和二维 ...

  7. C#并口热敏小票打印机打印位图

    原文:C#并口热敏小票打印机打印位图 最近一直在研究并口小票打印机打印图片问题,这也是第一次和硬件打交道,不过还好,最终成功了.   这是DEMO的窗体:   下面是打印所需要调用的代码: class ...

  8. c#调用刀片小票打印机

    public static bool Print(int orderId, string orderTime) { bool b = true; string cut = ((char)29).ToS ...

  9. C#调用小票打印机

    using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using Sy ...

随机推荐

  1. PowerExchange实时抽取架构介绍

    工作原理 准实时抽取架构图: 以上共有核心业务系统数据库服务器.ETL服务器.BI数据库服务器[目标数据库服务器],三台服务器和ETL客户端(PowerCenter客户端).其中核心业务系统上有核心系 ...

  2. 【设计模式】—— 策略模式Strategy

    前言:[模式总览]——————————by xingoo 模式意图 定义一系列的算法,把他们封装起来,使得算法独立于适用对象. 比如,一个系统有很多的排序算法,但是使用哪个排序算法是客户对象的自有.因 ...

  3. 洛谷P3380 【模板】二逼平衡树(树套树,树状数组,线段树)

    洛谷题目传送门 emm...题目名写了个平衡树,但是这道题的理论复杂度最优解应该还是树状数组套值域线段树吧. 就像dynamic ranking那样(蒟蒻的Sol,放一个link骗访问量233) 所有 ...

  4. 【拓扑 字符串还原 + 线段树维护】奇洛金卡达(father)

    奇洛金卡达(father) Description 阿良良木历将要迎来人生(不,是吸血鬼生涯)的第三次战斗——与身为人类的奇洛金卡达在直江津高中的操场solo,以取回Heartunderblade 的 ...

  5. C++并发编程实战---阅读笔记

    1. 当把函数对象传入到线程构造函数中时,需要避免“最令人头痛的语法解析”.如果传递了一个临时变量,而不是一个命名的变量:C++编译器会将其解析为函数声明,而不是类型对象的定义. 例如: class ...

  6. JS控制form表单action去向

    http://blog.csdn.net/w709854369/article/details/6261624 不知道大家遇没遇到这种情况,当我们提交一个表单的时候,可能因为相关的参数不同而需提交给不 ...

  7. Mask-RCNN数据集制作

    转自https://blog.csdn.net/pingushen2100/article/details/80513043 一.Mask-RCNN数据集 1.1 训练Mask-RCNN用的到的文件有 ...

  8. sql查询结果存入DataTable,然后从DataTable取数据

    public static DataTable SqlConnectionInformation() { string connstr = ConfigurationManager.Connectio ...

  9. Linux makefile讲解

    博客不会讲解的太细致深入,推荐先看视频再看博客 视频链接,推荐去B站观看,B站比较清晰... 土豆网:http://www.tudou.com/programs/view/19VZ0f3b_I0 B站 ...

  10. 给radio加自己的样式(图片)

    $('.choice').click(function() { var display1 = $("#check").prop("checked"); cons ...