如何使用套接字从.net中的POS打印机打印账单



我有一个ASP Web API和网络打印机(Epson TM-U220(。我需要按代码选择打印机并打印账单。我只是尽量按下面的样子。但工作不好。我想直接使用pos打印机打印这个

var server = "192.168.1.164";
var nome = "www.pdf";
Socket clientSocket = new Socket(AddressFamily.InterNetwork, 
SocketType.Stream, ProtocolType.Tcp);
clientSocket.NoDelay = true;
IPAddress ip = IPAddress.Parse(server);
IPEndPoint ipep = new IPEndPoint(ip, 9100);
clientSocket.Connect(ipep);
clientSocket.Send(File.ReadAllBytes(nome));
clientSocket.Close();

正如许多人所评论的,Epson TM-U220没有打印PDF的能力
在发送之前,您需要将打印内容转换为Epson TM-U220支持的ESC/POS控制序列。

例如,本文和其中介绍的库可能会有所帮助
将PDF文档打印到esc/pos热敏打印机
MoienTajik/EscPrinterSample

然而,Epson TM-U220是一种点式打印机,由于其低分辨率和低打印速度,用于热敏打印机的上述方法可能不会给出令人满意的结果
您介绍的打印示例是针对热敏打印机的,而点式打印机无法打印出如此美丽和详细的打印内容。

顺便说一下,注释的Epson OPOS ADK for .NET v1.14.20E是一种客户端打印方法,在服务器端操作它非常困难
此外,简单地嵌入它需要理解和处理概念和子系统,如POS for。NET/OPOS。


在上述情况下,收据是否需要是PDF?

如果可以在创建PDF时调用函数转换为ESC/POS控制序列,则可以使用以下库
lukevp/ESC-POS-.NET

ESCPOS.NET-易于使用,跨平台,快速高效。

即使使用此库,也无法直接指定打印PDF
打印pdf文件#13

如上一期所述,可以使用应用程序或其他库将PDF转换为PNG,然后调用上述库,但这需要时间,打印结果也会很差
如何在C#.NET中将PDF转换为PNG?

我尝试了一下,效果很好。但是,我仍然无法获得打印机状态。

//--printer script model
public class DirectPrintingScript
{
public string Value { get; set; }
public int PrintMethodID { get; set; }
public bool IsNeedPrint { get; set; }
}
//--print method
public void print(List<DirectPrintingScript> result, string IP, int Port)
{
var job = new DirectPrinterProcess();
Socket clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
clientSocket.NoDelay = true;
IPAddress ip = IPAddress.Parse(IP);
IPEndPoint ipep = new IPEndPoint(ip, Port);
clientSocket.Connect(ipep);
Encoding enc = Encoding.ASCII;
foreach (DirectPrintingScript item in result)
{
var command = job.SelectMethod(item.PrintMethodID);
byte[] commandBytes = Encoding.ASCII.GetBytes(command);
byte[] contentBytes = Encoding.ASCII.GetBytes(item.Value);
clientSocket.Send(commandBytes);
if (item.IsNeedPrint)
{
clientSocket.Send(contentBytes);
var n = job.NewLine();
byte[] nBytes = Encoding.ASCII.GetBytes(n);
clientSocket.Send(nBytes);
}
}
// Line feed hexadecimal values
byte[] bEsc = new byte[4];
bEsc[0] = 0x0A;
bEsc[1] = 0x0A;
bEsc[2] = 0x0A;
bEsc[3] = 0x0A;
// Send the bytes over 
clientSocket.Send(bEsc);
clientSocket.Close();
}
//--print method process
public class DirectPrinterProcess
{
public string SelectMethod(int MethodID)
{
switch (MethodID)
{
case 1:
return JustificationCenter();
case 2:
return JustificationLeft();
case 3:
return DoubleHeight();
case 4:
return DoubleWidth();
case 5:
return CancelDoubleHeightWidth();
case 6:
return SetColorRed();
case 7:
return SetColorBlack();
default:
return CancelDoubleHeightWidth();
}
}
private string JustificationCenter()
{
return "" + (char)27 + (char)97 + (char)1;
}
private string JustificationLeft()
{
return "" + (char)27 + (char)97 + (char)0;
}
private string DoubleHeight()
{
return "" + (char)27 + (char)33 + (char)16;
}
private string DoubleWidth()
{
return "" + (char)27 + (char)33 + (char)32;
}
private string CancelDoubleHeightWidth()
{
return "" + (char)27 + (char)33 + (char)0;
}
private string SetColorRed()
{
return "" + (char)27 + (char)114 + (char)1;
}
private string SetColorBlack()
{
return "" + (char)27 + (char)114 + (char)0;
}
public string NewLine()
{
return "" + "n";
}
}

最新更新