

Take a look at this thread: Print ZPL codes to ZEBRA printer using PrintDocument class. Return RawPrinterHelper.SendStringToPrinter(printerName, sb.ToString()) Using (var sr = new StreamReader(szFileName, Encoding.Default)) The file has to end with a new line characterĮncoding has to be set to Encoding.Default when reading ANSI txt files with special characters public static bool SendTextFileToPrinter(string szFileName, string printerName) There are 2 gotchas I've come across that happen when you're sending txt files with ZPL codes to the printer:

RawPrinterHelper.SendStringToPrinter(pd.PrinterSettings.PrinterName, s)

If(DialogResult.OK = pd.ShowDialog(this)) Pd.PrinterSettings = new PrinterSettings() SendBytesToPrinter(szPrinterName, pBytes, dwCount) Ĭall the print method: private void BtnPrint_Click(object sender, System.EventArgs e) Send the converted ANSI string to the printer. PBytes = Marshal.StringToCoTaskMemAnsi(szString) Assume that the printer is expecting ANSI text, and then convert How many characters are in the string? Public static bool SendStringToPrinter( string szPrinterName, string szString )
Impressora zebra z4m plus free#
Free the unmanaged memory that you allocated earlier. Send the unmanaged bytes to the printer.īSuccess = SendBytesToPrinter(szPrinterName, pUnmanagedBytes, nLength) Marshal.Copy(bytes, 0, pUnmanagedBytes, nLength) Copy the managed byte array into the unmanaged array. PUnmanagedBytes = Marshal.AllocCoTaskMem(nLength) Allocate some unmanaged memory for those bytes. Read the contents of the file into the array. Dim an array of bytes big enough to hold the file's contents. Public static bool SendFileToPrinter( string szPrinterName, string szFileName )įileStream fs = new FileStream(szFileName, FileMode.Open) If you did not succeed, GetLastError may give more information If( OpenPrinter( szPrinterName.Normalize(), out hPrinter, IntPtr.Zero ) )īSuccess = WritePrinter(hPrinter, pBytes, dwCount, out dwWritten)

Public static bool SendBytesToPrinter( string szPrinterName, IntPtr pBytes, Int32 dwCount)īool bSuccess = false // Assume failure unless you specifically succeed. Returns true on success, false on failure. of bytes, the function sends those bytes to the print queue. When the function is given a printer name and an unmanaged array Public static extern bool WritePrinter(IntPtr hPrinter, IntPtr pBytes, Int32 dwCount, out Int32 dwWritten ) Public static extern bool EndPagePrinter(IntPtr hPrinter) Public static extern bool StartPagePrinter(IntPtr hPrinter) Public static extern bool EndDocPrinter(IntPtr hPrinter) Public static extern bool StartDocPrinter( IntPtr hPrinter, Int32 level, DOCINFOA di) Public static extern bool ClosePrinter(IntPtr hPrinter) Public static extern bool OpenPrinter( string szPrinter, out IntPtr hPrinter, IntPtr pd)
Impressora zebra z4m plus how to#
This way you will be able to send ZPL to a printer no matter how it is connected ( LPT, USB, Network Share.)Ĭreate the RawPrinterHelper class (from the Microsoft article on How to send raw data to a printer by using Visual C#.
