Drucken direkt an Drucker über TCP/IP / Socket

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von charliefoxtrot.

    Drucken direkt an Drucker über TCP/IP / Socket

    Hallo zusammen,
    ich habe ein Problem, wo ich nicht weiterkomme. Ich möchte programmgesteuert, eine vorhandene PDF
    an einen Drucker / Plotter im Netzwerk als Stream senden (IP / Port (9100)). Grundsätzlich sendet er
    das auch an den Drucker, aber es kommen nur x Seiten an Hieroglyphen raus.

    VB.NET-Quellcode

    1. Friend Function plotMapOverIP4() As Boolean
    2. Dim bArray As Byte() = File.ReadAllBytes(txt_FilePath.Text) 'einlesen PDF als ByteArray
    3. Try
    4. Dim tcpClient = New TcpClient(txt_IP.Text, txt_Port.Text)
    5. Using nStream As NetworkStream = tcpClient.GetStream()
    6. If nStream.CanWrite Then 'nStream ist schreibbar
    7. nStream.Write(bArray, 0, bArray.Length)
    8. nStream.Close()
    9. Return True
    10. Else
    11. nStream.Close()
    12. Return False
    13. End If
    14. End Using
    15. Catch ex As SocketException
    16. MsgBox(ex.Message)
    17. Return False
    18. End Try
    19. End Function


    Was mache ich hier falsch oder was habe ich noch für Möglichkeiten?!

    Schon mal Danke für die Hilfe!

    Ums vorweg zu sagen, es geht leider nur direkt, also jeglicher Printer Dialog oder der gleichen ist raus. das drucken muss in einen Windows Dienst eingebaut werden
    und muss die PDF an einen Netzwerk Plotter senden.
    VG steel
    @steel75 Welche "Sprache" versteht der Drucker?
    Ich denke nicht, dass der Byte-Stream der PDF das ist, was der Drucker sehen will.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    also in den ersten Zeilen steht das drin, danach wird's kryptisch

    %PDF-1.6
    1 0 obj
    <<
    /Length 2 0 R
    /Filter /FlateDecode
    >>
    stream

    Edit
    so ich habe das Problem gelöst die folgende Methode druckt über TCPClient unter Angabe der IP und Ports jede PDF

    VB.NET-Quellcode

    1. Friend Function printOverTCP() As Boolean
    2. Dim bArray As Byte() = File.ReadAllBytes(txt_FilePath.Text) 'einlesen PDF als ByteArray
    3. Try
    4. Dim tcpClient As New TcpClient(txt_IP.Text, txt_Port.Text) 'IP und Port
    5. Using nStream As NetworkStream = tcpClient.GetStream()
    6. If nStream.CanWrite Then
    7. nStream.Write(bArray, 0, bArray.Length)
    8. nStream.Close()
    9. Return True
    10. Else
    11. MsgBox("In den NetworkStream kann nicht geschrieben werden.")
    12. nStream.Close()
    13. Return False
    14. End If
    15. End Using
    16. Catch ex As SocketException
    17. MsgBox(ex.Message)
    18. Return False
    19. End Try
    20. End Function

    VG steel

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „steel75“ ()

    Hilf mir mal auf die Sprünge, bin ich jetzt blöd, oder ist das der gleiche Code wie oben?

    Ich habe übrigens einen ähnlichen Ansatz:
    ich habe Pdfs, die ich vom Programm drucken lassen will, zB Ersatzteillisten.
    Die drucke ich mir mit dem passenden Treiber in eine Datei, zB "Druckdatei.prn", die ich mir als BLOB in die Datenbank schiebe.
    Wenn ich den Ausdruck brauche, schreibe ich das Bytearray mit deinem Code in den Drucker und der druckt.
    Der Vorteil der Druckdatei: die ganze Formatierung, Papierschacht, etc. bis zum Heften und Falzen ist alles schon drin.
    Da gibt es dann keine Überraschungen.
    Nachteil: man muss für jeden Treiber eine eigene Datei erstellen, aber da ich in der Firma nur Samsung-Drucker habe, die alle
    mit dem Universaltreiber arbeiten, ist das für mich überschaubar.

    Ein Shell-Befehl zB Shell("copy ""Druckdatei.prn"" ""\\meinrechner\drucker""") würde auch funktioneren, da muss man den Drucker aber freigeben.