You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

206 lines
5.3 KiB

namespace EC.AutoWeightServer.IfManager.Pos
{
public class PosManager
{
private int _portType { get; set; }//0 COM,1 LPT ,2 USB 3 ETH
private int _printer { get; set; }
private int _bitmapType { get; set; }
private int _paperType { get; set; } = 1; //0 88m 1 58m 2 76m
private int _result { get; set; }
public PosManager()
{
}
/// <summary>
/// 打开设备
/// </summary>
/// <param name="portType"></param>
/// <param name="bFile"></param>
/// <param name="path"></param>
/// <returns></returns>
public bool OpenDevice(int portType, bool bFile = false, string path = "")
{
string lpName;
_portType = portType;
switch (portType)
{
case PosSDK.POS_PT_COM:
lpName = "COM1:9600,N,8,1";
break;
case PosSDK.POS_PT_LPT:
lpName = "LPT1";
break;
case PosSDK.POS_PT_USB:
lpName = "SP-USB1";
break;
case PosSDK.POS_PT_NET:
lpName = "192.168.1.114";
break;
default:
lpName = "SP-USB1";
portType = PosSDK.POS_PT_USB;
break;
}
_printer = PosSDK.POS_Port_OpenA(lpName, portType, bFile, path);
SetResult(_printer);
return _printer >= 0;
}
/// <summary>
/// 关闭设备
/// </summary>
/// <returns></returns>
public bool CloseDevice()
{
int ret = PosSDK.POS_Port_Close(_printer);
SetResult(ret);
_printer = PosSDK.POS_ES_INVALIDPARA;
return ret == PosSDK.POS_ES_SUCCESS;
}
/// <summary>
/// 设备是否连接
/// </summary>
/// <returns></returns>
public bool IsConnected()
{
return _printer >= 0;
}
public int GetResult()
{
return _result;
}
private void SetResult(int ret)
{
_result = ret;
}
/// <summary>
/// 初始化打印机
/// </summary>
/// <returns></returns>
public bool InitPrinter()
{
int ret = PosSDK.POS_Control_ReSet(_printer);
SetResult(ret);
return ret == PosSDK.POS_ES_SUCCESS;
}
/// <summary>
/// 选择字符对齐(居左/居中/居右)方式
/// </summary>
/// <param name="alignType">0:左对齐,1:居中,2:右对齐</param>
/// <returns></returns>
public bool SetAlign(int alignType)
{
int ret = PosSDK.POS_Control_AlignType(_printer, alignType);
SetResult(ret);
return ret == PosSDK.POS_ES_SUCCESS;
}
/// <summary>
/// 设置打印左边距和打印区域
/// </summary>
/// <param name="iLeft">设置左边距,默认值为 0</param>
/// <param name="iWidth">设置打印区域,默认值为 0</param>
/// <returns></returns>
public bool SetLeftMargin(int iLeft, int iWidth)
{
int ret = PosSDK.POS_Control_SetPrintPosition(_printer, iLeft, iWidth);
SetResult(ret);
return ret == PosSDK.POS_ES_SUCCESS;
}
/// <summary>
/// 缓冲数据
/// </summary>
/// <param name="strBuff"></param>
/// <param name="ilen"></param>
/// <returns></returns>
public bool PrintData(byte[] strBuff, int ilen)
{
int ret = PosSDK.POS_Output_PrintData(_printer, strBuff, ilen);
SetResult(ret);
return ret == PosSDK.POS_ES_SUCCESS;
}
/// <summary>
/// 打印本地单色位图
/// </summary>
/// <param name="bmpPath">本地单色位图存储路径</param>
/// <returns></returns>
public bool PrintBmp(string bmpPath)
{
int ret = PosSDK.POS_Output_PrintBmpDirectA(_printer, bmpPath);
SetResult(ret);
return ret == PosSDK.POS_ES_SUCCESS;
}
/// <summary>
/// 打印格式化后的字符串
/// </summary>
/// <param name="iFont">0:选择标准 ASCII 字体A(12×24),1:选择压缩 ASCII 字体B(9×17)</param>
/// <param name="iThick">0:取消加粗模式,1:选择加粗模式</param>
/// <param name="iWidth">0:取消倍宽模式,1:选择倍宽模式</param>
/// <param name="iHeight">0:取消倍高模式,1:选择倍高模式</param>
/// <param name="iUnderLine">0:取消下划线模式,1:选择下划线模式</param>
/// <param name="lpstring">以空字符结尾的字符串</param>
/// <returns></returns>
public bool PrintStr(int iFont, int iThick, int iWidth, int iHeight, int iUnderLine, string lpstring)
{
int ret = PosSDK.POS_Output_PrintFontStringA(_printer, iFont, iThick, iWidth, iHeight, iUnderLine, lpstring);
SetResult(ret);
return ret == PosSDK.POS_ES_SUCCESS;
}
/// <summary>
/// 打印缓冲区内容,进纸由参数 iLines 设置的行数并切纸
/// </summary>
/// <param name="type">0:全切,1:半切</param>
/// <param name="len">进纸行数</param>
/// <returns></returns>
public bool CutPaper(int type = 0, int len = 1)
{
int ret = PosSDK.POS_Control_CutPaper(_printer, type, len);
SetResult(ret);
return ret == PosSDK.POS_ES_SUCCESS;
}
public bool Color24_GrayBW(string path1, string path2)
{
int ret = PosSDK.Color24_GrayBW(path1, path2);
SetResult(ret);
return ret == PosSDK.POS_ES_SUCCESS;
}
/// <summary>
/// 是否纸尽
/// </summary>
/// <returns></returns>
public bool IsPaperExhaust()
{
int ret = PosSDK.POS_Status_RTQueryTypeStatus(_printer, 4);
SetResult(ret);
return ret == PosSDK.POS_ES_PAPEROUT;
}
/// <summary>
/// 是否将纸尽
/// </summary>
/// <returns></returns>
public bool IsPaperWillExhaust()
{
int ret = PosSDK.POS_Status_RTQueryTypeStatus(_printer, 4);
SetResult(ret);
return ret == PosSDK.POS_ES_PAPERENDING;
}
}
}