2

以下是我的代码:

PosExplorer posExplorer = new PosExplorer();
DeviceCollection receiptPrinterDevices = posExplorer.GetDevices(DeviceType.PosPrinter);
DeviceInfo receiptPrinterDevice = posExplorer.GetDevice(DeviceType.PosPrinter,"SRP2");
PosPrinter printer = (PosPrinter)posExplorer.CreateInstance(receiptPrinterDevice);

printer.Open();
printer.Claim(10000);
printer.DeviceEnabled = true;
printer.PrintNormal(PrinterStation.Receipt, "test print 1");

我调试并且一切都毫无例外地进行了,已经确认目标打印机是正确的,但是打印机没有打印任何东西。有什么步骤我做错了吗?非常感谢任何指导。谢谢


如果有帮助,我的打印机接口通过以太网连接到特定 IP。

4

1 回答 1

4

问题似乎是您没有在字符串\n末尾发送换行符()PrintNormal,没有它,服务对象只会缓冲行数据,等到它看到\n之前将数据发送到设备。

printer.PrintNormal(PrinterStation.Receipt, "test print 1\n"); 

来自 .net 文档的 POSPrintNormal

换行/换行(10 进制)

打印行缓冲区中的任何数据,并馈送到下一个打印行。(打印该行不需要回车。)

这是因为打印机必须一次打印一个完整的行,所以它会等到你告诉它你已经完成了一行才开始打印,这允许你使用 2 次或更多PrintNormal调用来建立单行打印输出如果需要(例如在循环中),则提供行数据。

我在联网的 POS 打印机(Tysso PRP-250)上运行了以下代码,使用 \n 它打印行,没有它则不会。

PosExplorer posExplorer = new PosExplorer();
DeviceInfo receiptPrinterDevice = posExplorer.GetDevice(DeviceType.PosPrinter, "SRP2");
PosPrinter printer = posExplorer.CreateInstance(receiptPrinterDevice) as PosPrinter;

printer.Open();
printer.Claim(10000);
if (printer.Claimed) 
{
    printer.DeviceEnabled = true;
    printer.PrintNormal(PrinterStation.Receipt, "test print 1\n");
    printer.DeviceEnabled = false;   
}
printer.Release();
printer.Close();
于 2013-04-19T07:53:05.040 回答