簡體   English   中英

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

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

如何在C#中使用ESC / POS命令? 我需要這樣的格式 在此輸入圖像描述

但我無法實現這種格式。 我嘗試了一些代碼,但沒用。

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.
    }

你可以查看這個鏈接。 我現在使用它和它的工作!

http://www.codeproject.com/Tips/704989/Print-Direct-To-Windows-Printer-EPOS-Receipt小心使用,您必須知道熱敏打印機的ESC / POS命令。 如果我沒弄錯,手動命令必須退出打印機附帶的CD。

親切的問候

額外獎勵: http//www.developerfusion.com/tools/convert/vb-to-csharp/

我知道這並不是解決如何使用轉義碼的問題的答案,但創建PDF文件(P for Portable )會好得多。 您將有更好的機會在大多數打印機上完全按照預期進行渲染。

您可以使用PDFsharp生成PDF。 它是開源的,免費的,使用起來非常簡單。

        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;
                }
            }
        }

我正在熱敏打印機上,我碰到像你這樣do.After谷歌搜索,我發現ESC / POS命令ThermalDotNet為me.This類非常有用還支持圖像打印以及打印的信。 我希望這有幫助 ;)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM