4

我已使用以下说明通过 .net 为 EPSON TM-T88IV 热敏打印机打印。

http://nicholas.piasecki.name/blog/2009/12/sending-a-bit-image-to-an-epson-tm-t88iii-receipt-printer-using-c-and-escpos/

我正在使用下面的代码,我已将编码更改为 UTF-8,但仍然无法打印 Unicode。
打印了一些垃圾字符。

private void frmMain_Load(object sender, EventArgs e)
    {
        Print(PrinterName, GetDocument());
    }

    private const string PrinterName = "EPSON TM-T88IV ReceiptE4";

    private static byte[] GetDocument()
    {
        UTF8Encoding utf8 = new UTF8Encoding();
        using (var ms = new MemoryStream())
        using (var bw = new BinaryWriter(ms,Encoding.UTF8))
        {
            // Reset the printer bws (NV images are not cleared)
            bw.Write(AsciiControlChars.Escape);
            bw.Write("سلام دنیا");
            bw.Write(AsciiControlChars.Newline);
            // Feed 3 vertical motion units and cut the paper with a 1 point cut
            bw.Write(AsciiControlChars.GroupSeparator);
            bw.Write('V');
            bw.Write((byte)66);
            bw.Write((byte)3);

            bw.Flush();

            return ms.ToArray();
        }
    }

    private static void Print(string printerName, byte[] document)
    {
        NativeMethods.DOC_INFO_1 documentInfo;
        IntPtr printerHandle;

        documentInfo = new NativeMethods.DOC_INFO_1();
        documentInfo.pDataType = "RAW";
        documentInfo.pDocName = "Bit Image Test";

        printerHandle = new IntPtr(0);

        if (NativeMethods.OpenPrinter(printerName.Normalize(), out printerHandle, IntPtr.Zero))
        {
            if (NativeMethods.StartDocPrinter(printerHandle, 1, documentInfo))
            {
                int bytesWritten;
                byte[] managedData;
                IntPtr unmanagedData;

                managedData = document;
                unmanagedData = Marshal.AllocCoTaskMem(managedData.Length);
                Marshal.Copy(managedData, 0, unmanagedData, managedData.Length);

                if (NativeMethods.StartPagePrinter(printerHandle))
                {
                    NativeMethods.WritePrinter(
                        printerHandle,
                        unmanagedData,
                        managedData.Length,
                        out bytesWritten);
                    NativeMethods.EndPagePrinter(printerHandle);
                }
                else
                {
                    throw new Win32Exception();
                }

                Marshal.FreeCoTaskMem(unmanagedData);

                NativeMethods.EndDocPrinter(printerHandle);
            }
            else
            {
                throw new Win32Exception();
            }

            NativeMethods.ClosePrinter(printerHandle);
        }
        else
        {
            throw new Win32Exception();
        }
    }
4

1 回答 1

0

我有一个 EPSON TM-T88V,从这里我知道它们都不支持UTF-8。

唯一的选择是这些 ASCII 编码:(取自这里

对于 TM-T88IV,我发现它们是:

【南亚款】

  • 第 0 页 [PC437:美国,标准欧洲]
  • 第 20 页 [泰文字符代码 42]
  • 第 21 页 [泰文字符代码 11]
  • 第 26 页 [泰文字符代码 18]
  • 第 30 页 [TCVN-3:越南语]
  • 第 31 页 [TCVN-3:越南语]

[其他型号]

  • 第 0 页 [PC437:美国,标准欧洲]
  • 第 1 页 [片假名]
  • 第 2 页 [PC850:多语言]
  • 第 3 页 [PC860:葡萄牙语]
  • 第 4 页 [PC863:加拿大法语]
  • 第 5 页 [PC865:北欧]
  • 第 16 页 [WPC1252]
  • 第 17 页 [PC866:西里尔字母 #2]
  • 第 18 页 [PC852:拉丁语 2]
  • 第 19 页 [PC858: Euro]
    (第 255 页是空白页。)
于 2022-02-13T22:53:16.640 回答