Good afternoon, I'm trying to print a text (ZPL Code), but in my code there are ASCII delimiters, and for this reason it does not generate correct printing, ie missing certain characters. Does anyone know any method to generate printout containing all the ASCII characters.
Note: I'm trying to print 2D PDF (147) barcode.
Here's how I tried to print it below: Attempt 1
Shell("print /D:\ & caminhoImpressora & "C:\ETIQUETA.TXT", ppWinStyle.Hide)
Attempt 2
Impressao.SendStringToPrinter("caminhoImpressora", "texto")
Imports System
Imports System.Drawing
Imports System.Drawing.Printing
Imports System.Collections.Generic
Imports System.Text
Imports System.Runtime.InteropServices
Imports System.IO
Public Class Impressao
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Ansi)> _
Public Class DOCINFOA
<MarshalAs(UnmanagedType.LPStr)> _
Public pDocName As String
<MarshalAs(UnmanagedType.LPStr)> _
Public pOutputFile As String
<MarshalAs(UnmanagedType.LPStr)> _
Public pDataType As String
End Class
<DllImport("winspool.Drv", EntryPoint:="OpenPrinterA", SetLastError:=True, CharSet:=CharSet.Ansi, ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)> _
Friend Shared Function OpenPrinter(<MarshalAs(UnmanagedType.LPStr)> ByVal szPrinter As String, ByRef hPrinter As IntPtr, ByVal pd As IntPtr) As Boolean
End Function
<DllImport("winspool.Drv", EntryPoint:="ClosePrinter", SetLastError:=True, ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)> _
Friend Shared Function ClosePrinter(ByVal hPrinter As IntPtr) As Boolean
End Function
<DllImport("winspool.Drv", EntryPoint:="StartDocPrinterA", SetLastError:=True, CharSet:=CharSet.Ansi, ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)> _
Friend Shared Function StartDocPrinter(ByVal hPrinter As IntPtr, ByVal level As Int32, <MarshalAs(UnmanagedType.LPStruct)> ByVal di As DOCINFOA) As Boolean
End Function
<DllImport("winspool.Drv", EntryPoint:="EndDocPrinter", SetLastError:=True, ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)> _
Friend Shared Function EndDocPrinter(ByVal hPrinter As IntPtr) As Boolean
End Function
<DllImport("winspool.Drv", EntryPoint:="StartPagePrinter", SetLastError:=True, ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)> _
Friend Shared Function StartPagePrinter(ByVal hPrinter As IntPtr) As Boolean
End Function
<DllImport("winspool.Drv", EntryPoint:="EndPagePrinter", SetLastError:=True, ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)> _
Friend Shared Function EndPagePrinter(ByVal hPrinter As IntPtr) As Boolean
End Function
<DllImport("winspool.Drv", EntryPoint:="WritePrinter", SetLastError:=True, ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)> _
Friend Shared Function WritePrinter(ByVal hPrinter As IntPtr, ByVal pBytes As IntPtr, ByVal dwCount As Int32, ByRef dwWritten As Int32) As Boolean
End Function
#Region "Metodos"
Friend Shared Function SendBytesToPrinter(ByVal szPrinterName As String, ByVal pBytes As IntPtr, ByVal dwCount As Int32) As Boolean
Dim dwError As Integer = 0, dwWritten As Integer = 0
Dim hPrinter = New IntPtr(0)
Dim di = New DOCINFOA()
Dim bSuccess As Boolean = False 'Assume failure unless you specifically succeed.
di.pDocName = "Impressao Automatica"
di.pDataType = "RAW"
'Abre o método OpenPrinter
If OpenPrinter(szPrinterName.Normalize(), hPrinter, IntPtr.Zero) Then
'Incia o documento.
If (StartDocPrinter(hPrinter, 1, di)) Then
'Inicia a página.
If (StartPagePrinter(hPrinter)) Then
'Escreve os bytes na impressora.
bSuccess = WritePrinter(hPrinter, pBytes, dwCount, dwWritten)
EndPagePrinter(hPrinter)
End If
EndDocPrinter(hPrinter)
End If
ClosePrinter(hPrinter)
End If
'Caso exista algum erro, retorna o erro.
If bSuccess = False Then
dwError = Marshal.GetLastWin32Error()
End If
Return bSuccess
End Function
Friend Shared Function SendFileToPrinter(ByVal szPrinterName As String, ByVal szFileName As String) As Boolean
'Abre o arquivo
Dim fs = New FileStream(szFileName, FileMode.Open)
'Cria um objeto BinaryReader com o arquivo.
Dim br = New BinaryReader(fs)
'Dim an array of bytes big enough to hold the file's contents.
Dim bytes(fs.Length) As Byte
Dim bSuccess As Boolean = False
'Your unmanaged pointer.
Dim pUnmanagedBytes = New IntPtr(0)
Dim nLength As Integer
nLength = Convert.ToInt32(fs.Length)
'Read the contents of the file into the array.
bytes = br.ReadBytes(nLength)
'Allocate some unmanaged memory for those bytes.
pUnmanagedBytes = Marshal.AllocCoTaskMem(nLength)
'Copy the managed byte array into the unmanaged array.
Marshal.Copy(bytes, 0, pUnmanagedBytes, nLength)
'Send the unmanaged bytes to the printer.
bSuccess = SendBytesToPrinter(szPrinterName, pUnmanagedBytes, nLength)
'Free the unmanaged memory that you allocated earlier.
Marshal.FreeCoTaskMem(pUnmanagedBytes)
Return bSuccess
End Function
Friend Shared Function SendStringToPrinter(ByVal szPrinterName As String, ByVal szString As String) As Boolean
Dim pBytes As IntPtr
Dim dwCount As Integer
'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)
Return True
End Function
#End Region