代码之家  ›  专栏  ›  技术社区  ›  SoundWaves

通过IP从asp.net Web表单使用ESC/P打印到Brother P-Touch

  •  0
  • SoundWaves  · 技术社区  · 1 年前

    我正试图将校准标签打印到Brother P-Touch P95NW上。 打印机配置了静态IP,我可以ping它并从P-Touch编辑器打印(通过IP)。

    为了从我的网络表单打印,我试图使用对我来说很好的代码,使用不同语言的几种不同打印机。

    根据打印机开发人员手册,他们提供了一个十六进制输出作为示例:

    enter image description here

    我想要的代码会将原始输出发送到打印机。

    大致如下:

        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-69 6F 75 72 20 73 69 64" &
                                "65 0C"
        clientSocket.Send(Encoding.ASCII.GetBytes(Label))
        clientSocket.Close()
    

    执行时,打印机根本没有反应。

    Brother有一些技术视频,在他们的例子中,他们以文本文件的形式发送数据,所以我尝试了。引用的文件与上面的字符串内容相同。

        Dim filePath As String = "\\myserver\Systems\_MISC\bwtest.txt"
        Dim fileReader As String = My.Computer.FileSystem.ReadAllText(filePath, Encoding.ASCII)
    
        Dim clientSocket As New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
        clientSocket.Connect(New IPEndPoint(IPAddress.Parse(IP), 9100))
        clientSocket.SendFile(filePath)
        clientSocket.Close()
    

    我又得到了同样的结果,什么都没有。

    我还尝试使用netcat发送文件,同样没有结果。

    此时,我必须假设我的输出文件或配置中缺少了一些明显的东西。我正在打印一个.94英寸宽的标签,其方向与示例中所示的方向相同。

    任何建议感谢!

    0 回复  |  直到 1 年前
        1
  •  0
  •   SoundWaves    1 年前

    所以问题肯定是我向打印机发送数据的格式。打印机无法解释字符串,需要字节数组才能工作。

    这样的东西奏效了。

        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字符,而不是您提供的文本。

    推荐文章