using Microsoft.Extensions.Logging; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace JingGong.Abp.Print.GoDEX { public class GoDEXPrint : IDisposable { private static object printLock = new object(); /// /// 连接打印机 /// /// public bool Open(GoDEXCommunication goDEXCommunication) { return EzioInterop.Open(goDEXCommunication.Host, goDEXCommunication.Port); } /// /// 关闭打印机 /// /// public bool Close() { return EzioInterop.closeport() == 1; } /// /// 打印 /// /// public bool Print(IGoDEXPrintData goDEXPrintData) { bool printSuccess = false; //_logger.LogInformation("3.进入打印机方法,锁外"); try { // 打印任务执行,可能是阻塞的,因此考虑异步执行 Task.Run(() => { try { //GoDEX库因无法识别打印机,当前只适应用单任务打印 //lock (printLock) //{ if (Open(goDEXPrintData.Communication)) { LabelSetup(goDEXPrintData); //^L(標籤起始符號設定,^L 正常列印,^LI 反白列印,^LM 鏡像列印,^LRn 整張旋轉 n=0, 0°列印 ; n=1, 90°列印 ; n=2, 180°列印 ; n=3, 270°列印) EzioInterop.sendcommand($"^L"); // 尝试执行打印操作,成功返回 if (goDEXPrintData.Print()) { printSuccess = true; } else { throw new Exception("打印失败!"); } //结束,打印机收到后开始打印 EzioInterop.sendcommand("E"); } else { Console.WriteLine("6.打印机连接失败"); throw new Exception("打印机连接失败!"); } } catch (Exception ex) { // 记录异常日志 //_logger.LogInformation($"5.打印操作异常:{ex.Message}"); Console.WriteLine($"打印操作异常:{ex.Message}"); } finally { Close(); } }); } catch(Exception ex) { // 捕获整个过程中的异常 //_logger.LogInformation($"打印失败,异常:{ex.Message}"); Console.WriteLine($"打印失败:{ex.Message}"); } return printSuccess; } /// /// 设定参数 /// /// private void LabelSetup(IGoDEXPrintData goDEXPrintData) { //標籤長度設定 x长,y不指定,z每张间隔) EzioInterop.sendcommand($"^Q{goDEXPrintData.LabelSetup.Height},0,{goDEXPrintData.LabelSetup.Speed}"); //^W54(標籤寬度設定) EzioInterop.sendcommand($"^W{goDEXPrintData.LabelSetup.Width}"); //^H10(列印黑度設定x = 00 ~ 19) EzioInterop.sendcommand($"^H{goDEXPrintData.LabelSetup.Dark}"); //^S3(列印速度設定x = 2 ~ 10) EzioInterop.sendcommand($"^H{goDEXPrintData.LabelSetup.Speed}"); //^P1(連續列印) EzioInterop.sendcommand($"^P1"); //^C1(複製張數x = 1 ~ 32767) EzioInterop.sendcommand($"^C1"); } /// /// 关闭打印机 /// public void Dispose() { Close(); } } }