Questo sito utilizza cookie tecnici e di terze parti. Continuando la navigazione sul nostro sito accetti l'uso dei cookie. Per saperne di più leggi l'informativa sui cookie.   


vb2010 - Stampare su porta LPT o indirizzo IP...come ?
Ultimo messaggio: 15 mar 2019 08:31 di Ato - Antonio Giornetta. 30 Risposte.
Stampa gradevole
Solo gli utenti registrati possono rispondere ad una discussione.
Pagina 2 di 2 << < 12
Avatar
SirJo
Messaggi: 2354
Iscritto dal: 30 apr 2012 09:43
Utente
Utente

25 mag 2016 13:18

controlla bene la dichiarazione della OpenPrinter che deve essere:

 


 

     <DllImport("winspool.Drv", EntryPoint:="OpenPrinterW", _
        SetLastError:=
True, CharSet:=CharSet.Unicode, _
        ExactSpelling:=
True, CallingConvention:=CallingConvention.StdCall)> _
    
Private Shared Function OpenPrinter(ByVal src As StringByRef hPrinter As IntPtrByVal pd As LongAs Boolean
    
End Function

    Avatar
    Ato - Antonio Giornetta
    Messaggi: 405
    Iscritto dal: 30 apr 2012 01:19
    Utente
    Utente

    25 mag 2016 13:37
    Inviato da SirJo su 25 mag 2016 13:18

    controlla bene la dichiarazione della OpenPrinter che deve essere:

     


     

         <DllImport("winspool.Drv", EntryPoint:="OpenPrinterW", _
            SetLastError:=
    True, CharSet:=CharSet.Unicode, _
            ExactSpelling:=
    True, CallingConvention:=CallingConvention.StdCall)> _
        
    Private Shared Function OpenPrinter(ByVal src As StringByRef hPrinter As IntPtrByVal pd As LongAs Boolean
        
    End Function

    E' la stessa...

    Ciao Sirjo...potresti per cortesia fare un progettino d'esempio e condividerlo qui ?

    Diego è troppo impeganto...dai dai ti prego

    Ciao


      http://www.antoniogiornetta.it Andate sul mio sito...leggerete una bella storia a fumetti del mio paesino :)
      Avatar
      SirJo
      Messaggi: 2354
      Iscritto dal: 30 apr 2012 09:43
      Utente
      Utente

      28 mag 2016 15:38

      Eccoti qui la classe RawPrint:

      Imports System.Runtime.InteropServices
      Imports System.Globalization
      Imports System.Text

      Public Class RawPrint
          
      ' 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)> _
          
      Private Shared Function OpenPrinter(ByVal src As StringByRef hPrinter As IntPtrByVal pd As LongAs Boolean
          
      End Function
          <
      DllImport("winspool.Drv", EntryPoint:="ClosePrinter", _
              SetLastError:=
      True, CharSet:=CharSet.Unicode, _
              ExactSpelling:=
      True, CallingConvention:=CallingConvention.StdCall)> _
          
      Private Shared Function ClosePrinter(ByVal hPrinter As IntPtrAs Boolean
          
      End Function
          <
      DllImport("winspool.Drv", EntryPoint:="StartDocPrinterW", _
              SetLastError:=
      True, CharSet:=CharSet.Unicode, _
              ExactSpelling:=
      True, CallingConvention:=CallingConvention.StdCall)> _
          
      Private Shared Function StartDocPrinter(ByVal hPrinter As IntPtrByVal level As Int32ByRef pDI As DOCINFOWAs Boolean
          
      End Function
          <
      DllImport("winspool.Drv", EntryPoint:="EndDocPrinter", _
              SetLastError:=
      True, CharSet:=CharSet.Unicode, _
              ExactSpelling:=
      True, CallingConvention:=CallingConvention.StdCall)> _
          
      Private Shared Function EndDocPrinter(ByVal hPrinter As IntPtrAs Boolean
          
      End Function
          <
      DllImport("winspool.Drv", EntryPoint:="StartPagePrinter", _
              SetLastError:=
      True, CharSet:=CharSet.Unicode, _
              ExactSpelling:=
      True, CallingConvention:=CallingConvention.StdCall)> _
          
      Private Shared Function StartPagePrinter(ByVal hPrinter As IntPtrAs Boolean
          
      End Function
          <
      DllImport("winspool.Drv", EntryPoint:="EndPagePrinter", _
              SetLastError:=
      True, CharSet:=CharSet.Unicode, _
              ExactSpelling:=
      True, CallingConvention:=CallingConvention.StdCall)> _
          
      Private Shared Function EndPagePrinter(ByVal hPrinter As IntPtrAs Boolean
          
      End Function
          <
      DllImport("winspool.Drv", EntryPoint:="WritePrinter", _
              SetLastError:=
      True, CharSet:=CharSet.Unicode, _
              ExactSpelling:=
      True, CallingConvention:=CallingConvention.StdCall)> _
          
      Private Shared Function WritePrinter(ByVal hPrinter As IntPtrByVal pBytes As IntPtrByVal dwCount As Int32ByRef dwWritten As Int32As Boolean
          
      End Function

          
      Private hPrinter As IntPtr

          
      Public Function PrtOpen(ByVal Stampante As StringAs Boolean
              
      Dim di As New DOCINFOW

              
      If Not OpenPrinter(Stampante, hPrinter, 0) Then
                  
      MessageBox.Show("Stampante non trovata o errore di stampante: " & Stampante, ""MessageBoxButtons.OK, MessageBoxIcon.Error)
                  
      Return False
              
      End If

              di.pDocName = 
      "StampaAghi"
              di.pDataType = 
      "RAW"

              StartDocPrinter(hPrinter, 1, di)
              StartPagePrinter(hPrinter)

              
      Return True

          
      End Function

          
      Public Sub Stampa(ByVal Bff As String)
              
      Dim pBytes As IntPtr
              
      Dim dwCount As Int32
              
      Dim dwWritten As Int32

              dwCount = Bff.Length
              pBytes = 
      Marshal.StringToCoTaskMemAnsi(Bff)
              
      Dim bSuccess = WritePrinter(hPrinter, pBytes, dwCount, dwWritten)
              
      Marshal.FreeCoTaskMem(pBytes)

          
      End Sub

          
      Public Sub PrtClose()

              EndPagePrinter(hPrinter)
              EndDocPrinter(hPrinter)
              ClosePrinter(hPrinter)

          
      End Sub

      End Class

       

      Ho creato un form, ho inserito un pulsante, nell'evento Click ho scritto:

      Dim rp As New RawPrint

              rp.PrtOpen(
      "Epson FX-1180")

              rp.Stampa(
      "Ciao ciao" & Convert.ToChar(13) & Convert.ToChar(12))

              rp.PrtClose()


      E da me funziona

      (ovviamente al posto di "Epson FX-1180" devi mettere il nome della stampante giusta)

       

      Ciao ciao
      Sergio
        Avatar
        Ato - Antonio Giornetta
        Messaggi: 405
        Iscritto dal: 30 apr 2012 01:19
        Utente
        Utente

        30 mag 2016 08:41
        Inviato da Ato su 30 mag 2016 08:41

        Ho messo la classe in un modulo di classe

        ho fatto il form

        ho cambiato il nome della stampante...ma niente sempre lo stesso errore

          http://www.antoniogiornetta.it Andate sul mio sito...leggerete una bella storia a fumetti del mio paesino :)
          Avatar
          SirJo
          Messaggi: 2354
          Iscritto dal: 30 apr 2012 09:43
          Utente
          Utente

          30 mag 2016 09:29

          Allora non è un problema di codice VB.NET, è un problema del PC.

          Hai provato ad eseguire il codice su PC diversi ??

            Avatar
            Ato - Antonio Giornetta
            Messaggi: 405
            Iscritto dal: 30 apr 2012 01:19
            Utente
            Utente

            14 mar 2019 12:07
            scusate se riporto in vita questo vecchio post.

             

            Ero rimasto che mi dava errore (vedi post precedenti)

            ho cambiato il framework in 3.5 ed è andato tutto ok...quasi

            La stampa avviene...ma mi tira fuori tutto il foglio!..cioè io ho dei fogli con 7 etichette...ne voglio stampare solo una ed il foglio non deve buttarmelo fuori tutto...la testina della stampante deve rimanere li!...pronta per la seconda etichetta...invece se devo stampare una sola etichetta...la stampa però poi tira fuori tutto il foglio.

            Come posso fare per non far buttare fuori tutto il foglio anche se stampo una sola etichetta?

              http://www.antoniogiornetta.it Andate sul mio sito...leggerete una bella storia a fumetti del mio paesino :)
              Avatar
              SirJo
              Messaggi: 2354
              Iscritto dal: 30 apr 2012 09:43
              Utente
              Utente

              14 mar 2019 13:05
              questo è un bel problema

              se non vuoi che ti butti fuori tutto il foglio non devi chiudere il documento dopo aver stampato l'etichetta, ma chiuderlo quando hai finito tutto, perchè quando chiudi il documento il driver invia un codice alla stampante per espellere il foglio

                Avatar
                Ato - Antonio Giornetta
                Messaggi: 405
                Iscritto dal: 30 apr 2012 01:19
                Utente
                Utente

                14 mar 2019 16:31
                Inviato da SirJo su 14 mar 2019 13:05
                questo è un bel problema

                se non vuoi che ti butti fuori tutto il foglio non devi chiudere il documento dopo aver stampato l'etichetta, ma chiuderlo quando hai finito tutto, perchè quando chiudi il documento il driver invia un codice alla stampante per espellere il foglio

                Si, ok. ma se non chiudo il documento non stampa!!!

                Possibile che non se ne venga fuori?

                Non ci credo!...




                  http://www.antoniogiornetta.it Andate sul mio sito...leggerete una bella storia a fumetti del mio paesino :)
                  Avatar
                  Ato - Antonio Giornetta
                  Messaggi: 405
                  Iscritto dal: 30 apr 2012 01:19
                  Utente
                  Utente

                  14 mar 2019 17:20
                  Stavo pensando se esiste un modo in vbnet che mi faccia parlare come vb6 per quanto riguarda l'apertura dei file txt

                   

                  io in vb6 per stampare sulla stampante ad aghi faccio

                  open "lpt1" for output as #1

                  print 1, "ciao"

                  e la testina stampa Ciao...e si ferma senza nessun salto pagina

                  ora in vbnet esiste la possibilità di richiamare i vecchi metodi di stampa di vb6...chissà se esiste anche un modo per richiamare i vecchi metodi di vb6 per l'apertura dei file...magari funziona!?

                    http://www.antoniogiornetta.it Andate sul mio sito...leggerete una bella storia a fumetti del mio paesino :)
                    Avatar
                    orpone70
                    Messaggi: 80
                    Iscritto dal: 23 apr 2017 15:38
                    Utente
                    Utente

                    15 mar 2019 08:09
                    Visto che ci provi dal 2014 hai provato a comprarti una stampa etichette ? Per quelle, ovviamente chiedi conferma al tuo fornitore di fiducia, una pagina è costituita da una etichetta quindi stampata l'etichetta si ferma e buonanotte. ciao
                      Avatar
                      Ato - Antonio Giornetta
                      Messaggi: 405
                      Iscritto dal: 30 apr 2012 01:19
                      Utente
                      Utente

                      15 mar 2019 08:31
                      Inviato da orpone70 su 15 mar 2019 08:09
                      Visto che ci provi dal 2014 hai provato a comprarti una stampa etichette ? Per quelle, ovviamente chiedi conferma al tuo fornitore di fiducia, una pagina è costituita da una etichetta quindi stampata l'etichetta si ferma e buonanotte. ciao


                      Se era per me già l'avrei fatto!! ma chi deve usare il programma non ne vuole sapere, anche perchè dovrebbe cambiare tutte le stampanti che ancora funzionano alla perfezione con il vecchio programma fatto in vb6.

                       

                      E poi sono 20 anni che va avanti così...e francamente dirgli che non è possibile, ora che abbiamo aggiornato tutto, mi sembra quantomeno assurdo!...cioè giustamente mi dirà "ma come? ora che  siamo passati al nuovo linguaggio...e bla bla bla"

                       

                      ...chiaro?

                      cmq grazie per la risposta

                        http://www.antoniogiornetta.it Andate sul mio sito...leggerete una bella storia a fumetti del mio paesino :)
                        Solo gli utenti registrati possono rispondere ad una discussione.
                        Pagina 2 di 2 << < 12