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

178 lines
6.4 KiB
C#

9 months ago
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Sockets;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading;
namespace POSV.Printer
{
public class LabelPrinterUtils
{
public static Tuple<bool, string> PrintContent(PrinterObject pobj, List<PrintContent> content)
{
lock (PrinterUtils._lock)
{
Tuple<bool , string> result = null;
try
{
IntPtr _IntPtr = IntPtr.Zero;
var dynamic = pobj.DynamicLibrary;
var portType = pobj.PortType;
string _portName = pobj.Data[PrinterObject.COM_PORT_NAME];
string _portBaud = pobj.Data[PrinterObject.COM_PORT_BAUD];
int baud = 0;
int.TryParse(_portBaud , out baud);
switch (portType)
{
case PortType.:
{
int iPort = 0;
switch (_portName)
{
case "COM1":
iPort = 1;
break;
case "COM2":
iPort = 2;
break;
case "COM3":
iPort = 3;
break;
case "COM4":
iPort = 4;
break;
default:
iPort = 0;
break;
}
Send2YKDLL(pobj , content , iPort , baud);
}
break;
case PortType.:
{
SendNetPort(pobj , content);
}
break;
case PortType.:
{
int iPort = 0;
switch (_portName)
{
case "LPT1":
iPort = 11;
break;
case "LPT2":
iPort = 12;
break;
default:
iPort = 0;
break;
}
Send2YKDLL(pobj , content , iPort , baud);
}
break;
case PortType.:
{
PrinterUtils.OpenDrivePort(pobj , content);
}
break;
case PortType.USB:
{
switch (dynamic)
{
case DynamicLibrary.:
{
PrinterUtils.OpenBeiyangUsbPort(pobj , content);
}
break;
case DynamicLibrary.:
default:
{
Send2YKDLL(pobj , content , 13 , baud);
}
break;
}
}
break;
case PortType.None:
{
}
break;
}
result = new Tuple<bool , string>(true , "打印成功");
}
catch (Exception ex)
{
result = new Tuple<bool , string>(false , "打印出现错误,请检查配置");
}
finally
{
ByPosDll.POS_Close();
Thread.Sleep(5);
YkPosDll.YkCloseDevice();
Thread.Sleep(5);
}
return result;
}
}
private static Tuple<bool, string> Send2YKDLL(PrinterObject pobj, List<PrintContent> content, int iPort, int baud)
{
try
{
YkPosDll.YkOpenDevice(iPort, baud);
foreach(var p in content)
{
YkPosDll.YkPrintStr(p.Content);
}
}
catch(Exception ex)
{
return new Tuple<bool, string>(false, "YKDLL打印异常");
}
finally
{
YkPosDll.YkCloseDevice();
}
return new Tuple<bool, string>(true, "YKDLL打印成功");
}
private static Tuple<bool, string> SendNetPort(PrinterObject pobj, List<PrintContent> content)
{
Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
try
{
string _ipAddress = pobj.Data[PrinterObject.NET_IP_ADDRESS];
socket.Connect(_ipAddress, 9100);
foreach(var p in content)
{
byte[] buffer = Encoding.Default.GetBytes(p.Content.ToString());
socket.Send(buffer);
}
socket.Shutdown(SocketShutdown.Both);
}
catch(Exception ex)
{
return new Tuple<bool, string>(false, "网口打印发生异常");
}
finally
{
socket.Close();
}
return new Tuple<bool, string>(true, "网口打印成功");
}
}
}