У меня есть принтер Epson TM-T88VI, и я использую Microsoft.PointOfService.PosPrinter в C# для печати.
У меня есть две следующие тестовые функции:
public static void printerTestFunction(string printerName)
{
PosExplorer explorer = new PosExplorer();
DeviceInfo di = explorer.GetDevice("PosPrinter", printerName);
PosPrinter printer = (PosPrinter)explorer.CreateInstance(di);
printer.Open();
printer.Claim(10000);
printer.DeviceEnabled = true;
printer.AsyncMode = false;
string init = System.Text.ASCIIEncoding.ASCII.GetString(new byte[] { 27, 64 });
string totalCut = System.Text.ASCIIEncoding.ASCII.GetString(new byte[] { 27, 105 });
string cmd = init + "A€A\nB€B\n\n\n\n\n\n\n\n" + totalCut;
printer.PrintNormal(PrinterStation.Receipt, cmd);
}
public static void printerTestFunction2(string printerName)
{
PosExplorer explorer = new PosExplorer();
DeviceInfo di = explorer.GetDevice("PosPrinter", printerName);
PosPrinter printer = (PosPrinter)explorer.CreateInstance(di);
printer.Open();
printer.Claim(10000);
printer.DeviceEnabled = true;
printer.AsyncMode = false;
string init = System.Text.ASCIIEncoding.ASCII.GetString(new byte[] { 27, 64 });
string totalCut = System.Text.ASCIIEncoding.ASCII.GetString(new byte[] { 27, 105 });
string cmd = init + init + "A€A\nB€B\n\n\n\n\n\n\n\n" + totalCut;
printer.PrintNormal(PrinterStation.Receipt, cmd);
}
единственное различие между двумя функциями: в функции 2 я посылаю «двойной» init на принтер (см. string cmd =
инициализация). Обычно я ожидаю, что две функции приведут к одному и тому же результату. Но это не так.
После вызова «printerTestFunction2» я получаю вывод, как и ожидалось:
A € A
B € B
Когда я перезапускаю свою программу и вызываю «printerTestFunction», я получаю следующий вывод:
t@A € A
B € B
Я также тестировал другие функции. Первая команда инициализации всегда печатается как «t @», за исключением случаев, когда я запускаю принтер дважды.
Может кто-нибудь объяснить такое поведение?