【问题标题】:Printing UTF-8 Encoded Text in EPSON TM-T88IV Thermal Printer在 EPSON TM-T88IV 热敏打印机中打印 UTF-8 编码文本
【发布时间】:2014-03-17 19:01:09
【问题描述】:

我已使用以下说明通过 .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();
        }
    }

【问题讨论】:

  • 这个问题你解决了吗?
  • 不幸的是:(

标签: c# .net encoding thermal-printer epson


【解决方案1】:

我有一个 EPSON TM-T88V,从 here 我了解他们都不支持 UTF-8。

唯一的选项是这些 ASCII 编码: (取自here)

对于 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: Cyrillic #2]
  • 第 18 页 [PC852:拉丁语 2]
  • 第 19 页 [PC858:欧元]
    (第 255 页是空白页。)

【讨论】:

    猜你喜欢
    • 2016-12-01
    • 1970-01-01
    • 2022-10-17
    • 2012-01-21
    • 2012-06-05
    • 2020-04-01
    • 2012-10-05
    • 2016-11-03
    相关资源
    最近更新 更多