将ESC / POS命令发送到热敏打印机C#

问题描述 投票:0回答:1

我有一台POS-80C热敏打印机,使用NuGet的PrinterUtility Library对其进行打印。该库将字符串转换为ByteArray并将其直接发送到打印机,因此它是RAW打印。它对拉丁字符非常有效,但对希伯来语或阿拉伯语则无效。它打印“ ???”当字符不是英语时。我知道当我的文本为阿拉伯语时,我必须使用ESC / POS命令切换到例如阿拉伯字符集,但是我做了很多尝试并想出办法。

PrinterUtility.EscPosEpsonCommands.EscPosEpson obj = new PrinterUtility.EscPosEpsonCommands.EscPosEpson();
var BytesValue = Encoding.ASCII.GetBytes(string.Empty);

BytesValue = PrintExtensions.AddBytes(BytesValue, Encoding.ASCII.GetBytes("English Text")); //works fine
BytesValue = PrintExtensions.AddBytes(BytesValue, Encoding.ASCII.GetBytes(String.Format("{0,-25}", "تيست"))); //Arabic Charecter, prints as ????

我知道必须在英文和阿拉伯文本之间的某个地方切换到阿拉伯字符集

    BytesValue = PrintExtensions.AddBytes(BytesValue, Encoding.ASCII.GetBytes("English Text")); 

//Here i have to switch To Arabic Charecter set
    BytesValue = PrintExtensions.AddBytes(BytesValue, Encoding.Unicode.GetBytes(String.Format("{0,-25}", "تيست")));


//Here I have to switch back To English Character set

然后将包含字节数组的文件发送到打印机

 if (File.Exists("Receipt")
                File.Delete("Receipt");
            File.WriteAllBytes(txtPrinterName.Text, BytesValue);
            RawPrinterHelper.SendFileToPrinter("PrinterName", "Receipt");

我的打印机确实支持阿拉伯语,但这是发送命令以切换到阿拉伯语或其他任何语言的问题。

如果您能教我如何做,我将不胜感激。

c# epson pos escpos
1个回答
0
投票

我无法找到适合您的确切打印机型号的命令参考,因此,其中的一些将是经验的猜测。我能找到的最接近的是来自POS-X的command reference

您正确的是,特殊命令带有ESC前缀。在这种特殊情况下,您想要的命令是ESC t - Select character code table来更改代码页。您想要的代码页是PC864 - Arabic,即十进制的37(十六进制的25)。 PC437 - English的英文代码页仅为0。

我不完全确定PrinterUtility软件包的工作方式,也找不到任何文档。

基本上,您需要发送以下内容:

byte[] CodePageArabic = new byte[] { 0x1B, 0x74, 0x25 };
byte[] CodePageEnglish = new byte[] { 0x1B, 0x74, 0x00 };
© www.soinside.com 2019 - 2024. All rights reserved.