为什么“€”字符只在打印机初始化前打印,初始化后不打印?
Why is the "€" character only printed before printer initialization and not after the initialization?
我有一台 Epson TM-T88VI 打印机,使用 C# 中的 Microsoft.PointOfService.PosPrinter 进行打印。
使用下面的函数我打印了一个奇怪的输出:
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" + init + "C€C\nD€D\n\n\n\n\n\n\n" + totalCut;
printer.PrintNormal(PrinterStation.Receipt, cmd);
}
输出为:
A€A
B€B
氯氟烃
DFD
所以 € 符号被打印为一个奇怪的 "F" 符号(好像 F 比正常字符小)。
纸张裁剪正确。
我也测试过不同的星座。似乎“€”符号仅在打印至少一行后发送到打印机的第一个 init 命令之前打印。 (我可以在开始时发送多个 init 命令 - 打印了 €。如果我在打印了一些字符后发送 init,将出现 "F" 而不是“€”)。
如果我重新启动我的程序,“€”再次正确打印,但如果我发送 init 命令,它将再次打印为 "F"。
“€”符号只打印在第三个初始化命令之前是什么原因?
我的代码有什么问题还是我错过了设置?
之所以打印出F这样的字母,是因为打印机处于初始化状态,代码页437。
看下面material中的字母,十进制为213,十六进制为0xD5。
Page 0 [PC437: USA, Standard Europe]
POS for.NET 服务对象根据 CharacterSet 属性 的值在内部管理代码页设置。
如果应用程序随意向打印机发送初始化命令,可能会导致服务对象的管理信息不一致,导致打印机打印错误。
如果您正在使用 POS for.NET(包括 OPOS/JavaPOS),您不应使用初始化命令 (ESC@) 或类似命令来更改模式或设置。
从这个意义上说,不是直接发送切纸也直接ESC i({ 27, 105 })命令,调用CutPaper方法或者把UnifiedPOS中定义的POSPrinter切纸转义序列(ESC|P)放在打印请求字符串。
我有一台 Epson TM-T88VI 打印机,使用 C# 中的 Microsoft.PointOfService.PosPrinter 进行打印。
使用下面的函数我打印了一个奇怪的输出:
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" + init + "C€C\nD€D\n\n\n\n\n\n\n" + totalCut;
printer.PrintNormal(PrinterStation.Receipt, cmd);
}
输出为:
A€A
B€B
氯氟烃
DFD
所以 € 符号被打印为一个奇怪的 "F" 符号(好像 F 比正常字符小)。 纸张裁剪正确。
我也测试过不同的星座。似乎“€”符号仅在打印至少一行后发送到打印机的第一个 init 命令之前打印。 (我可以在开始时发送多个 init 命令 - 打印了 €。如果我在打印了一些字符后发送 init,将出现 "F" 而不是“€”)。 如果我重新启动我的程序,“€”再次正确打印,但如果我发送 init 命令,它将再次打印为 "F"。
“€”符号只打印在第三个初始化命令之前是什么原因? 我的代码有什么问题还是我错过了设置?
之所以打印出F这样的字母,是因为打印机处于初始化状态,代码页437。
看下面material中的字母,十进制为213,十六进制为0xD5。
Page 0 [PC437: USA, Standard Europe]
POS for.NET 服务对象根据 CharacterSet 属性 的值在内部管理代码页设置。
如果应用程序随意向打印机发送初始化命令,可能会导致服务对象的管理信息不一致,导致打印机打印错误。
如果您正在使用 POS for.NET(包括 OPOS/JavaPOS),您不应使用初始化命令 (ESC@) 或类似命令来更改模式或设置。
从这个意义上说,不是直接发送切纸也直接ESC i({ 27, 105 })命令,调用CutPaper方法或者把UnifiedPOS中定义的POSPrinter切纸转义序列(ESC|P)放在打印请求字符串。