ThermalPrintClass.h 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  1. /////////////////////////////////////////////////////////////////////////////////
  2. /// Copyright (c) 2013 China Merchants Bank, all rights reserved ///
  3. /// Adapter Interface for Printer. ///
  4. /// ///
  5. /// ///
  6. /////////////////////////////////////////////////////////////////////////////////
  7. #ifndef __THERMAL_PRINT_CLASS_H
  8. #define __THERMAL_PRINT_CLASS_H
  9. #pragma once
  10. #include "DeviceBaseClass.h"
  11. //the paper state of printer
  12. enum ThermalPaperState
  13. {
  14. PAPER_FULL=0, //纸量充足
  15. PAPER_LOW, //少纸,纸将尽
  16. PAPER_EMPTY, //缺纸
  17. PAPER_JAMMED //卡纸
  18. };
  19. enum ThermalHardwareState
  20. {
  21. STATE_OK=0, //状态正常
  22. STATE_OTHER_ERROR //其他硬件错误(如切刀错,上盖打开) 具体原因写入DevErrorInfo
  23. //to be added
  24. };
  25. //state of printer
  26. struct ThermalState
  27. {
  28. ThermalPaperState paperState;
  29. ThermalHardwareState hardwareState;
  30. //to be added
  31. };
  32. enum PrintAction
  33. {
  34. ACTION_PRINT_ONE_LINE =0,//打印走纸一行
  35. ACTION_PRINT_MOVEFORWRAD_LINES,//打印并走纸n行(单位:字符行)
  36. ACTION_PRINT_MOVEBACKWRAD_LINES,//回纸n行(单位:字符行)不实现
  37. ACTION_CUT_ALL,//全切纸
  38. ACTION_CUT_HALF,//半切纸
  39. ACTION_MOVE_TO_POSITION_RELATIVE,//把打印光标移动相对当前位置一段距离(横向),单位mm
  40. ACTION_MOVE_TO_FORWRAD_LENGTH,//移动向前走纸一段距离(距离包括本行高度在内) 单位:mm
  41. ACTION_MOVE_TO_BLACKMARK,//移动到黑标位置,把打印位置设置在行首(标记纸有效)
  42. ACTION_PRINT_MOVEBACK_TO_LINE//设置起始位置在行首,取值(0:打印内容返回行首,1:清空要打印的内容返回行首) 不需要实现
  43. //to be added
  44. };
  45. enum CommandType{
  46. COMMON_ROW_SPACE=0,//行高 单位mm(修改为行高,默认行高是4.23mm,当字体超过行高,一行高度为最高的字体高度)
  47. COMMON_ALIGN, //字符对齐模式 单位是"AlignStyle"的值
  48. COMMON_REVERSE,//颠倒打印(注意需要设置退出或者切纸才行,并在行首) 取值(0:正常打印 1:颠倒打印)
  49. COMMON_LEFT_MARGIN,//左边距 单位mm
  50. COMMON_PRINTABLE_AREA//可打印区域 单位mm
  51. //to be added
  52. };
  53. enum FontStyle
  54. {
  55. FONT_UNDERLINE = 0,//下划线 取值(0:否 1:是)
  56. FONT_BOLD,//粗体 取值(0:否 1:是)
  57. FONT_INVERSE, //反白 取值(0:否 1:是)
  58. FONT_DOUBLEHEIGHT,//纵翻倍放大 取值(0:否 1:是)
  59. FONT_DOUBLEWIDE,//横翻倍向放大 取值(0:否 1:是)
  60. FONT_CUSTOM_SIZE,//字体宽高自定义,取值(宽 {1..6} ,长 {1..6})
  61. FONT_ROTATE,//字体旋转 取值(0,90,180,270) 只实现90
  62. FONT_LEFT_RIGHT_SPACE//字符左右边距设置 单位mm 取值(左边距 {0..36},右边距 {0..36}) 只设置右边距,左边距设置为0
  63. //to be added
  64. };
  65. enum AlignStyle
  66. {
  67. ALIGN_LEFT=0,
  68. ALIGN_MIDDLE,
  69. ALIGN_RIGHT
  70. };
  71. enum BarCodeType{
  72. CONTENT_BARCODE_UPC_A =0,
  73. CONTENT_BARCODE_UPC_E,
  74. CONTENT_BARCODE_EAN8,
  75. CONTENT_BARCODE_EAN13,
  76. CONTENT_BARCODE_39,
  77. CONTENT_BARCODE_128
  78. //to be added...
  79. };
  80. enum QRCodeType{
  81. CONTENT_TWODIM_QRCODE=0,
  82. CONTENT_TWODIM_PDF417
  83. //to be added...
  84. };
  85. enum HriPosition{
  86. HRI_POSITION_NONE =0,
  87. HRI_POSITION_ABOVE,
  88. HRI_POSITION_BELOW,
  89. HRI_POSITION_BOTH
  90. };
  91. enum ThermalPaperType{
  92. PAPER_CONTINUOUS=0,//连续纸
  93. PAPER_LABEL //标记纸
  94. };
  95. class ThermalPrintClass : public DeviceBaseClass
  96. {
  97. public:
  98. // 打开打印机
  99. virtual ErrorCodeEnum DevOpen(BYTE btPort,DWORD dwBaudRate) = 0;
  100. // 获取打印机实时状态
  101. virtual ErrorCodeEnum GetDevState(ThermalState &devState) = 0;
  102. //开始打印初始设置:paperWidth一般为80mm和57mm
  103. virtual ErrorCodeEnum BeginPrint(ThermalPaperType eType,int paperWidth)=0;
  104. //打印控制指令函数:主要是打印,切纸和控制打印光标指令函数
  105. //第三个参数是预留参数 暂时无用到
  106. virtual ErrorCodeEnum ControlAction(PrintAction eAction,DWORD dwValue1,DWORD dwValue2=0) = 0;
  107. //打印参数指令函数:
  108. //第三个参数是预留参数 暂时无用到
  109. virtual ErrorCodeEnum SetParam(CommandType eType,DWORD dwValue1,DWORD dwValue2=0) = 0;
  110. //打印字体指令函数:主要是字体相关饿指令函数
  111. //第三个参数是预留参数 设置FONT_CUSTOM_SIZE用到,dwValue1表示宽,dwValue2表示长
  112. // 设置FONT_LEFT_RIGHT_SPACE用到 dwValue1表示左边距 dwValue2表示右边距
  113. virtual ErrorCodeEnum SetFont(FontStyle eType,DWORD dwValue1,DWORD dwValue2=0) = 0;
  114. //打印文本数据函数
  115. virtual ErrorCodeEnum PrintText(BYTE *pData,DWORD dwDataLen)=0;
  116. //打印条形码函数
  117. //dwUnitWidth 条形码基本模块宽度 取值{2..6} 默认2
  118. //dwHeight 条形码高度 单位mm
  119. //iHRIPosition hri字符打印位置 见枚举类型HriPosition
  120. virtual ErrorCodeEnum PrintBarCode(BarCodeType eType, BYTE *pData,DWORD dwDataLen,DWORD dwUnitWidth,DWORD dwHeight,HriPosition eHRIPosition)=0;
  121. //打印二维码QRCode函数
  122. //dwUnitWidth 二维码基本元素宽度 取值{1..255} 默认3
  123. virtual ErrorCodeEnum PrintQRCode(BYTE *pData,DWORD dwDataLen,DWORD dwUnitWidth)=0;
  124. //打印二维码QRCode函数
  125. //dwWidth 二维码长度 ,单位mm
  126. virtual ErrorCodeEnum PrintQRCodeByArea(BYTE *pData,DWORD dwDataLen,DWORD dwUnitWidth,DWORD dwWidth)=0;
  127. //打印二维码PDF417函数
  128. //errorLevel pdf417纠错级别 取值{0..8}
  129. //dwUnitWidth 基本元素宽度 取值{3..90}
  130. //dwUnitHeight 基本元素长度 取值{1..30}
  131. //row pdf417 行数 取值{1..7}
  132. //lines pdf417 列数 取值{2..25}
  133. virtual ErrorCodeEnum PrintPDF417code(BYTE *pData,DWORD dwDataLen,int errorLevel,DWORD dwUnitWidth,DWORD dwUnitHeight,int rows,int lines)=0;
  134. //打印二维码PDF417函数
  135. //errorLevel pdf417纠错级别 取值{0..8}
  136. //dwWidth pdf417宽度 单位mm
  137. //dwHeight pdf417长度 单位mm
  138. virtual ErrorCodeEnum PrintPDF417codeByArea(BYTE *pData,DWORD dwDataLen,int errorLevel,DWORD dwWidth,DWORD dwHeight)=0;
  139. //打印图像函数:pData是base64编码的数据
  140. virtual ErrorCodeEnum PrintImage(BYTE *pData,DWORD dwDataLen)=0;
  141. //获取打印失败后错误信息和错误状态
  142. virtual ErrorCodeEnum GetLastErrState(ThermalState &devState , DevErrorInfo &devErrInfo) = 0;
  143. };
  144. #endif //__THERMAL_PRINT_CLASS_H