Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用爱普生热敏打印机将打印发送到windows后台处理程序_C#_Point Of Sale_Thermal Printer_Print Spooler Api - Fatal编程技术网

C# 使用爱普生热敏打印机将打印发送到windows后台处理程序

C# 使用爱普生热敏打印机将打印发送到windows后台处理程序,c#,point-of-sale,thermal-printer,print-spooler-api,C#,Point Of Sale,Thermal Printer,Print Spooler Api,我有一个基于c#visual studio 2012的POS应用程序 POS解决方案基于从消费者到受益人的货币交易。我的POS解决方案会为每次发生的交易提供打印输出。我使用的是爱普生TM-T81热敏打印机。爱普生c#api正在使用中。现在,我将用于打印的命令作为原始数据直接发送到打印机。但是我想使用windows后台处理程序发送打印命令 爱普生提供的api只提供原始打印的代码。有一个异步打印功能,但没有给出所需的结果。我的c#应用程序基于主服务器和两个执行货币交易的手持设备之间的套接字通信。为此

我有一个基于c#visual studio 2012的POS应用程序

POS解决方案基于从消费者到受益人的货币交易。我的POS解决方案会为每次发生的交易提供打印输出。我使用的是爱普生TM-T81热敏打印机。爱普生c#api正在使用中。现在,我将用于打印的命令作为原始数据直接发送到打印机。但是我想使用windows后台处理程序发送打印命令

爱普生提供的api只提供原始打印的代码。有一个异步打印功能,但没有给出所需的结果。我的c#应用程序基于主服务器和两个执行货币交易的手持设备之间的套接字通信。为此,我使用异步套接字服务器。到目前为止,没有问题,但如果同时发生两个事务,打印机只打印一张收据。我在两次打印之间放置了一个sleep()约2秒,但仍然不是这样,以后会导致问题

使用c#发送打印命令的代码:

我之前正在初始化打印机:

PosExplorer posExplorer = new PosExplorer();

DeviceInfo deviceInfo = null;

try
{
    deviceInfo = posExplorer.GetDevice(DeviceType.PosPrinter, strLogicalName);
    m_Printer = (PosPrinter)posExplorer.CreateInstance(deviceInfo);
}
catch (Exception)
{
}

//Register OutputCompleteEventHandler.
AddOutputComplete(m_Printer);

//Open the device
m_Printer.Open();

try
{
    //Get the exclusive control right for the opened device.
    //Then the device is disable from other application.
    m_Printer.Claim(1000);
    Console.WriteLine("Printer claimed");
}
catch (Exception e)
{
    Console.WriteLine("Printer Not claimed");
}
我想从直接原始打印转变为在c#上使用windows后台打印程序

我看了一下windows后台处理程序api: 但不知道如何实现我的格式和打印机使用相同

如果您能提供帮助,我将不胜感激。

使用原始数据类型并不意味着数据没有被假脱机。很可能是这样。要找到答案,请暂停打印机,打印一些内容,然后查看
\windows\system32\spool\printers
。如果您在那里发现两个扩展名为.SPL和.SHD的文件,则数据正在假脱机

但是,如果Epson API直接与打印机通信并绕过后台处理程序,我不知道该API做什么,因此无法告诉您如何复制它。为此,您需要打印机的技术手册。但是,假设打印机安装了打印驱动程序,您应该能够使用Win32 API或.NET对其进行打印,就像使用任何其他打印机一样。最简单的方法是打开记事本,键入一些内容,然后打印出来,这样就可以确定是否可以通过正常的Windows机制打印到这台打印机上。如果这样做有效,那么您可以放弃Espson API并使用Win32或.NET进行打印。

使用原始数据类型并不意味着数据没有被假脱机。很可能是这样。要找到答案,请暂停打印机,打印一些内容,然后查看
\windows\system32\spool\printers
。如果您在那里发现两个扩展名为.SPL和.SHD的文件,则数据正在假脱机


但是,如果Epson API直接与打印机通信并绕过后台处理程序,我不知道该API做什么,因此无法告诉您如何复制它。为此,您需要打印机的技术手册。但是,假设打印机安装了打印驱动程序,您应该能够使用Win32 API或.NET对其进行打印,就像使用任何其他打印机一样。最简单的方法是打开记事本,键入一些内容,然后打印出来,这样就可以确定是否可以通过正常的Windows机制打印到这台打印机上。如果这样做有效,那么您可以放弃Espson API并使用Win32或.NET打印。

很抱歉我的回复太晚,我当时不在城里,正忙于其他工作。我试图连续发送两份打印作业,但其中只有一份得到了打印。此外,如果出于某种原因,在发送命令时打印机处于关闭状态,则即使我打开打印机并重新连接打印机,打印也不会发生。C代码使用位于“\program data\Microsoft\Point of Service\configuration”中的configuration.xml文件查找并发送打印。虽然打印机驱动程序已经安装,并且确实显示在用于在记事本甚至浏览器上打印的打印机列表上。我可以从控制面板中的“设备和打印机”向打印机发送测试打印。我想使用相同的print命令,但从我的c#code来看,这台打印机的行为似乎与其他打印机一样,因此您不需要Epson API。您可以像其他打印机一样使用.NET打印到它。您可以使用
WritePrinter
功能直接发送命令,但这不是我的建议。只要试着像任何随机打印机一样打印就可以了。可以在网上找到Win32和.net的示例。实际上,我没有任何使用.net打印的经验,除了使用epson aapi…无论如何,我会尝试搜索…可能需要有效地缩小搜索范围。很抱歉我的回复太晚,我不在城里做其他工作。我试图连续发送两份打印作业,但其中只有一份得到了打印。此外,如果出于某种原因,在发送命令时打印机处于关闭状态,则即使我打开打印机并重新连接打印机,打印也不会发生。C代码使用位于“\program data\Microsoft\Point of Service\configuration”中的configuration.xml文件查找并发送打印。虽然打印机驱动程序已经安装,并且确实显示在用于在记事本甚至浏览器上打印的打印机列表上。我可以从控制面板中的“设备和打印机”向打印机发送测试打印。我想使用相同的print命令,但从我的c#code来看,这台打印机的行为似乎与其他打印机一样,因此您不需要Epson API。您可以像其他打印机一样使用.NET打印到它。您可以使用
WritePrinter
功能直接发送命令,但这不是我的建议。只要试着像任何随机打印机一样打印就可以了。可以在网上找到Win32和.net的示例。我实际上没有任何使用.net打印的经验,除了使用epson aapi…无论如何,我会尝试搜索…可能需要有效地缩小搜索范围。
PosExplorer posExplorer = new PosExplorer();

DeviceInfo deviceInfo = null;

try
{
    deviceInfo = posExplorer.GetDevice(DeviceType.PosPrinter, strLogicalName);
    m_Printer = (PosPrinter)posExplorer.CreateInstance(deviceInfo);
}
catch (Exception)
{
}

//Register OutputCompleteEventHandler.
AddOutputComplete(m_Printer);

//Open the device
m_Printer.Open();

try
{
    //Get the exclusive control right for the opened device.
    //Then the device is disable from other application.
    m_Printer.Claim(1000);
    Console.WriteLine("Printer claimed");
}
catch (Exception e)
{
    Console.WriteLine("Printer Not claimed");
}