所以问题肯定是我向打印机发送数据的格式。打印机无法解释字符串,需要字节数组才能工作。
这样的东西奏效了。
Dim IP As String = "xxx.xx.xx.xx"
Dim clientSocket As New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
clientSocket.Connect(New IPEndPoint(IPAddress.Parse(IP), 9100))
Dim Label As String = "1B 69 61 00 1B 40 1B 69-6C D0 02 1B 24 3C 00 1B " &
"6B 00 1B 58 36 41 74 20-79 6F 75 72 20 73 69 64 " &
"65 0C "
Dim byteArray() As Byte = HexStringToBytes(Label)
clientSocket.Send(byteArray)
clientSocket.Close()
通过使用函数进行转换。
Function HexStringToBytes(ByVal hexString As String) As Byte()
Dim result As New List(Of Byte)()
For i As Integer = 0 To hexString.Length - 1 Step 3
result.Add(Convert.ToByte(hexString.Substring(i, 2), 16))
Next
Return result.ToArray()
End Function
在现实世界的应用程序中,这并不是真正实用的,因为从十六进制字符串进行更改会很困难。
您也可以即时从ESC/p代码进行转换。
Dim myText As String = StrToHex("At your side")
Public Function StrToHex(ByRef Data As String) As String
Dim sVal As String
Dim sHex As String = ""
While Data.Length > 0
sVal = Conversion.Hex(Strings.Asc(Data.Substring(0, 1).ToString()))
Data = Data.Substring(1, Data.Length - 1)
sHex = sHex & sVal & " "
End While
Return sHex
End Function
这里最大的问题是意识到FF和ESC等项目是ASCII字符,而不是您提供的文本。