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#

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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, "网口打印成功");
}
}
}