简体   繁体   English

如何在c#中使用esc / pos命令?

[英]How to use esc/pos command with c#?

How to use ESC/POS command with C#? 如何在C#中使用ESC / POS命令? I need format like this 我需要这样的格式 在此输入图像描述

but I cannot achieve this format. 但我无法实现这种格式。 I tried some codes ,but no use. 我尝试了一些代码,但没用。

using (var ms = new MemoryStream())
    using (var bw = new BinaryWriter(ms))
    {
        // Reset the printer bws (NV images are not cleared)
        bw.Write(AsciiControlChars.Escape);
        bw.Write('@');
        bw.Write(AsciiControlChars.Newline);
        bw.Write(AsciiControlChars.Escape);
        bw.Write("_______________________________________________");
        bw.Write(AsciiControlChars.Newline);

        bw.Write("Service           Price         Qty       Total");
        bw.Write("------------------------------------------------");

        bw.Write(AsciiControlChars.GroupSeparator);
        bw.Write('V');
        bw.Write((byte)66);
        bw.Write((byte)3);
        bw.Flush();
        // Send the converted ANSI string to the printer.
    }

You can check this link. 你可以查看这个链接。 I now using that and It's Works!! 我现在使用它和它的工作!

http://www.codeproject.com/Tips/704989/Print-Direct-To-Windows-Printer-EPOS-Receipt Use with careful, you must know ESC/POS command for thermal printer. http://www.codeproject.com/Tips/704989/Print-Direct-To-Windows-Printer-EPOS-Receipt小心使用,您必须知道热敏打印机的ESC / POS命令。 If I'm not mistaken, the manual command must exit on the CD that came with the printer. 如果我没弄错,手动命令必须退出打印机附带的CD。

Kind Regards 亲切的问候

Bonus: http://www.developerfusion.com/tools/convert/vb-to-csharp/ 额外奖励: http//www.developerfusion.com/tools/convert/vb-to-csharp/

I know that this is not exactly an answer to the question of how to use escape codes, but it would be much better to create a PDF file (P for Portable ). 我知道这并不是解决如何使用转义码的问题的答案,但创建PDF文件(P for Portable )会好得多。 You'll have a better chance to have it rendered exactly as intended on most printers. 您将有更好的机会在大多数打印机上完全按照预期进行渲染。

You can generate a PDF with PDFsharp . 您可以使用PDFsharp生成PDF。 It's open source and free and it's quite simple to use. 它是开源的,免费的,使用起来非常简单。

        using System;
        using System.Collections.Generic;
        using System.Linq;
        using System.Text;
        using System.Threading.Tasks;
        using System.Runtime.InteropServices;

        namespace Apteka.Printer
        {
            public class RawPrinterHelper
            {
                [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
                public class DOCINFOA
                {
                    [MarshalAs(UnmanagedType.LPStr)]
                    public string pDocName;
                    [MarshalAs(UnmanagedType.LPStr)]
                    public string pOutputFile;
                    [MarshalAs(UnmanagedType.LPStr)]
                    public string pDataType;
                }

                [DllImport("winspool.Drv", EntryPoint = "OpenPrinterA", SetLastError = true, CharSet = CharSet.Ansi, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]
                public static extern bool OpenPrinter([MarshalAs(UnmanagedType.LPStr)] string szPrinter, ref IntPtr hPrinter, IntPtr pd);

                [DllImport("winspool.Drv", EntryPoint = "ClosePrinter", SetLastError = true, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]
                public static extern bool ClosePrinter(IntPtr hPrinter);

                [DllImport("winspool.Drv", EntryPoint = "StartDocPrinterA", SetLastError = true, CharSet = CharSet.Ansi, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]
                public static extern bool StartDocPrinter(IntPtr hPrinter, Int32 level, [In()][MarshalAs(UnmanagedType.LPStruct)] DOCINFOA di);

                [DllImport("winspool.Drv", EntryPoint = "EndDocPrinter", SetLastError = true, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]
                public static extern bool EndDocPrinter(IntPtr hPrinter);

                [DllImport("winspool.Drv", EntryPoint = "StartPagePrinter", SetLastError = true, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]
                public static extern bool StartPagePrinter(IntPtr hPrinter);

                [DllImport("winspool.Drv", EntryPoint = "EndPagePrinter", SetLastError = true, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]
                public static extern bool EndPagePrinter(IntPtr hPrinter);

                [DllImport("winspool.Drv", EntryPoint = "WritePrinter", SetLastError = true, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]
                public static extern bool WritePrinter(IntPtr hPrinter, IntPtr pBytes, Int32 dwCount, ref Int32 dwWritten);

                private IntPtr hPrinter = new IntPtr(0);
                private DOCINFOA di = new DOCINFOA();
                private bool PrinterOpen = false;

                public bool PrinterIsOpen
                {
                    get
                    {
                        return PrinterOpen;
                    }
                }

                public bool OpenPrint(string szPrinterName)
                {
                    if (PrinterOpen == false)
                    {
                        di.pDocName = ".NET RAW Document";
                        di.pDataType = "RAW";

                        if (OpenPrinter(szPrinterName.Normalize(), ref hPrinter, IntPtr.Zero))
                        {
                            if (StartDocPrinter(hPrinter, 1, di))
                            {
                                if (StartPagePrinter(hPrinter))
                                    PrinterOpen = true;
                            }
                        }
                    }

                   return PrinterOpen;
                }

                public void ClosePrint()
                {
                    if (PrinterOpen)
                    {
                        EndPagePrinter(hPrinter);
                        EndDocPrinter(hPrinter);
                        ClosePrinter(hPrinter);
                        PrinterOpen = false;
                    }
                }

                public bool SendStringToPrinter(string szPrinterName, string szString)
                {
                    if (PrinterOpen)
                    {
                        IntPtr pBytes;
                        Int32 dwCount;
                        Int32 dwWritten = 0;

                        dwCount = szString.Length;

                        pBytes = Marshal.StringToCoTaskMemAnsi(szString);

                        var res= WritePrinter(hPrinter, pBytes, dwCount, ref dwWritten);
                        Marshal.FreeCoTaskMem(pBytes);
                        return res;
                    }
                    else
                        return false;
                }
            }
        }

I was working on thermal printer and I came across to ESC/POS commands like you do.After Googling I found ThermalDotNet very useful for me.This class also supports image printing as well as letter printing. 我正在热敏打印机上,我碰到像你这样do.After谷歌搜索,我发现ESC / POS命令ThermalDotNet为me.This类非常有用还支持图像打印以及打印的信。 I hope this helps ;) 我希望这有帮助 ;)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM