1

我有一个基于 c# Visual Studio 2012 构建的 POS 应用程序。

POS 解决方案基于从消费者到受益人的货币交易。我的 POS 解决方案为发生的每笔交易提供打印输出。我使用的是 EPSON TM-T81 热敏打印机。正在使用用于 c# 的 EPSON api。现在我将打印命令作为 RAW 数据直接发送到打印机。但我想使用 windows spooler 发送打印命令。

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

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

m_Printer.PrintNormal(PrinterStation.Receipt, "\u001b|N" + "userID     : " + cardId + "\n");
m_Printer.PrintNormal(PrinterStation.Receipt, "\u001b|N" + "Member     : " + user_name + "\n");

我早些时候初始化打印机:

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");
}

我想从直接 RAW 打印转变为在 c# 上使用 windows spooler。

我看了一下windows spooler api: Windows Spooler API 但不知道如何实现我的格式和使用相同的打印机。

我将不胜感激提供的任何帮助。

4

1 回答 1

4

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

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

于 2014-01-04T20:24:49.303 回答