如何以ZPL(Barcode Label) 在Zebra打印机上打印?
Barcode & Print.zip
(1004.73 KB)
以附件直接打印出来的扫描枪无法识别,百度了一下需要转换为ZPL格式才能打印,请大家指点!对于这些我完全不懂!谢谢大家
Imports System.Drawing.Printing Public Class Form1 ' Click event handler for a button - designed to show how to use the ' SendFileToPrinter and SendBytesToPrinter functions. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click ' Allow the user to select a file. Dim ofd As New OpenFileDialog() If ofd.ShowDialog(Me) Then ' Allow the user to select a printer. Dim pd As New PrintDialog() pd.PrinterSettings = New PrinterSettings() If (pd.ShowDialog() = DialogResult.OK) Then ' Print the file to the printer. RawPrinterHelper.SendFileToPrinter(pd.PrinterSettings.PrinterName, ofd.FileName) End If End If End Sub ' Button1_Click() ' Click event handler for a button - designed to show how to use the ' SendBytesToPrinter function to send a string to the printer. Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Dim s As String Dim pd As New PrintDialog() ' You need a string to send. Dim ZPLString As String = _ "^XA" & _ "^PRB" & _ "^MD10" & _ "^MNY" & _ "^LH0,0^FS" & _ "^FO630,01^AIR,33,0^CI0^FR^FD@2^FS" & _ "^FO670,01^AIR,33,0^CI0^FR^FD@1^FS" & _ "^PQ1,0,0,N" & _ "^XZ" ' Open the printer dialog box, and then allow the user to select a printer. pd.PrinterSettings = New PrinterSettings() If (pd.ShowDialog() = DialogResult.OK) Then RawPrinterHelper.SendStringToPrinter(pd.PrinterSettings.PrinterName, ZPLString) End If End Sub End Class Imports Imports System.Drawing.Printing Imports System.Runtime.InteropServices Public Class RawPrinterHelper ' Structure and API declarions: <StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)> _ Structure DOCINFOW <MarshalAs(UnmanagedType.LPWStr)> Public pDocName As String <MarshalAs(UnmanagedType.LPWStr)> Public pOutputFile As String <MarshalAs(UnmanagedType.LPWStr)> Public pDataType As String End Structure <DllImport("winspool.Drv", EntryPoint:="OpenPrinterW", _ SetLastError:=True, CharSet:=CharSet.Unicode, _ ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)> _ Public Shared Function OpenPrinter(ByVal src As String, ByRef hPrinter As IntPtr, ByVal pd As Long) As Boolean End Function <DllImport("winspool.Drv", EntryPoint:="ClosePrinter", _ SetLastError:=True, CharSet:=CharSet.Unicode, _ ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)> _ Public Shared Function ClosePrinter(ByVal hPrinter As IntPtr) As Boolean End Function <DllImport("winspool.Drv", EntryPoint:="StartDocPrinterW", _ SetLastError:=True, CharSet:=CharSet.Unicode, _ ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)> _ Public Shared Function StartDocPrinter(ByVal hPrinter As IntPtr, ByVal level As Int32, ByRef pDI As DOCINFOW) As Boolean End Function <DllImport("winspool.Drv", EntryPoint:="EndDocPrinter", _ SetLastError:=True, CharSet:=CharSet.Unicode, _ ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)> _ Public Shared Function EndDocPrinter(ByVal hPrinter As IntPtr) As Boolean End Function <DllImport("winspool.Drv", EntryPoint:="StartPagePrinter", _ SetLastError:=True, CharSet:=CharSet.Unicode, _ ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)> _ Public Shared Function StartPagePrinter(ByVal hPrinter As IntPtr) As Boolean End Function <DllImport("winspool.Drv", EntryPoint:="EndPagePrinter", _ SetLastError:=True, CharSet:=CharSet.Unicode, _ ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)> _ Public Shared Function EndPagePrinter(ByVal hPrinter As IntPtr) As Boolean End Function <DllImport("winspool.Drv", EntryPoint:="WritePrinter", _ SetLastError:=True, CharSet:=CharSet.Unicode, _ ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)> _ Public Shared Function WritePrinter(ByVal hPrinter As IntPtr, ByVal pBytes As IntPtr, ByVal dwCount As Int32, ByRef dwWritten As Int32) As Boolean End Function ' SendBytesToPrinter() ' When the function is given a printer name and an unmanaged array of ' bytes, the function sends those bytes to the print queue. ' Returns True on success or False on failure. Public Shared Function SendBytesToPrinter(ByVal szPrinterName As String, ByVal pBytes As IntPtr, ByVal dwCount As Int32) As Boolean Dim hPrinter As IntPtr ' The printer handle. Dim dwError As Int32 ' Last error - in case there was trouble. Dim di As DOCINFOW ' Describes your document (name, port, data type). Dim dwWritten As Int32 ' The number of bytes written by WritePrinter(). Dim bSuccess As Boolean ' Your success code. ' Set up the DOCINFO structure. With di .pDocName = "My Visual Basic .NET RAW Document" .pDataType = "RAW" End With ' Assume failure unless you specifically succeed. bSuccess = False If OpenPrinter(szPrinterName, hPrinter, 0) Then If StartDocPrinter(hPrinter, 1, di) Then If StartPagePrinter(hPrinter) Then ' Write your printer-specific bytes to the printer. bSuccess = WritePrinter(hPrinter, pBytes, dwCount, dwWritten) EndPagePrinter(hPrinter) End If EndDocPrinter(hPrinter) End If ClosePrinter(hPrinter) End If ' If you did not succeed, GetLastError may give more information ' about why not. If bSuccess = False Then dwError = Marshal.GetLastWin32Error() End If Return bSuccess End Function ' SendBytesToPrinter() ' SendFileToPrinter() ' When the function is given a file name and a printer name, ' the function reads the contents of the file and sends the ' contents to the printer. ' Presumes that the file contains printer-ready data. ' Shows how to use the SendBytesToPrinter function. ' Returns True on success or False on failure. Public Shared Function SendFileToPrinter(ByVal szPrinterName As String, ByVal szFileName As String) As Boolean ' Open the file. Dim fs As New FileStream(szFileName, FileMode.Open) ' Create a BinaryReader on the file. Dim br As New BinaryReader(fs) ' Dim an array of bytes large enough to hold the file's contents. Dim bytes(fs.Length) As Byte Dim bSuccess As Boolean ' Your unmanaged pointer. Dim pUnmanagedBytes As IntPtr ' Read the contents of the file into the array. bytes = br.ReadBytes(fs.Length) ' Allocate some unmanaged memory for those bytes. pUnmanagedBytes = Marshal.AllocCoTaskMem(fs.Length) ' Copy the managed byte array into the unmanaged array. Marshal.Copy(bytes, 0, pUnmanagedBytes, fs.Length) ' Send the unmanaged bytes to the printer. bSuccess = SendBytesToPrinter(szPrinterName, pUnmanagedBytes, fs.Length) ' Free the unmanaged memory that you allocated earlier. Marshal.FreeCoTaskMem(pUnmanagedBytes) Return bSuccess End Function ' SendFileToPrinter() ' When the function is given a string and a printer name, ' the function sends the string to the printer as raw bytes. Public Shared Function SendStringToPrinter(ByVal szPrinterName As String, ByVal szString As String) Dim pBytes As IntPtr Dim dwCount As Int32 ' How many characters are in the string? dwCount = szString.Length() ' Assume that the printer is expecting ANSI text, and then convert ' the string to ANSI text. pBytes = Marshal.StringToCoTaskMemAnsi(szString) ' Send the converted ANSI string to the printer. SendBytesToPrinter(szPrinterName, pBytes, dwCount) Marshal.FreeCoTaskMem(pBytes) End Function End Class
[此贴子已经被作者于2016-10-22 19:06编辑过]