Hola!

Registrándote como bakuno podrás publicar, compartir y comunicarte en privado con otros bakuos :D

Regístrame ya!

Imprimir ticket en Vb.net 2005

d_j_james007

Bovino maduro
Desde
14 Dic 2008
Mensajes
123
Hola buen día amigos, quisiera ver si alguno de ustedes me puede orientar como poder mandar a imprimir un ticket en VB.Net 2005, mi base de datos la tengo en access 2007, es para un sistema de punto de venta, pero no le hayo, la forma, investigando en internet me encontre que existe una forma mediante Crystal Reports pero la verdad no le entiendo muy bien, ya que nunca lo he utilizalizado, alguien me puede ayudar por favor se los agradeceria mucho.:chavo:
 
aqui una clase que encontre y que ya use y funciona chingon
trae la clase y como usarla
Código:
Imports System
Imports System.ComponentModel
Imports System.Windows.Forms
Imports System.Drawing
Imports System.Drawing.Printing
Imports System.IO
Public Class ticket
            Public LineasDeLaCabeza As ArrayList = New ArrayList()
            Public LineasDeLaSubCabeza As ArrayList = New ArrayList()
            Public Elementos As ArrayList = New ArrayList()
            Public Totales As ArrayList = New ArrayList()
            Public LineasDelPie As ArrayList = New ArrayList()
            Private headerImagep As Image

            Public contador As Integer = 0

            Public CaracteresMaximos As Integer = 35
            Public CaracteresMaximosDescripcion As Integer = 20

            Public imageHeight As Integer = 0

            Public MargenIzquierdo As Double = 10
            Public MargenSuperior As Double = 13

            Public NombreDeLaFuente As String = "Lucida Console"
            Public TamanoDeLaFuente As Integer = 9

            Public FuenteImpresa As Font
            Public ColorDeLaFuente As SolidBrush = New SolidBrush(Color.Black)

            Public gfx As Graphics

            Public CadenaPorEscribirEnLinea As String = ""
            Private WithEvents DocumentoAImprimir As New PrintDocument

            Public Sub Ticket()


            End Sub

            Public Property HeaderImage() As Image
                  Get
                         Return headerImagep
                  End Get
                  Set(ByVal value As Image)
                     'If headerImagep.Width <> value.Width Then

                     'End If
                     headerImagep = value
                  End Set
            End Property



            Public Property MaximoCaracter() As Integer
                  Get
                      Return CaracteresMaximos
                  End Get
                  Set(ByVal value As Integer)
                      If (value <> CaracteresMaximosDescripcion) Then CaracteresMaximosDescripcion = value
                  End Set
            End Property



            Public Property MaximoCaracterDescripcion() As Integer
                  Get
                      Return CaracteresMaximosDescripcion
                  End Get
                  Set(ByVal value As Integer)
                      If (value <> CaracteresMaximosDescripcion) Then CaracteresMaximosDescripcion = value
                  End Set
            End Property

            

            Public Property TamanoLetra() As Integer
                  Get
                   Return TamanoDeLaFuente
                  End Get
                  Set(ByVal value As Integer)
                      If (value <> TamanoDeLaFuente) Then TamanoDeLaFuente = value
                  End Set
            End Property


            Public Property NombreLetra() As String
                  Get
                      Return NombreDeLaFuente
                  End Get
                  Set(ByVal value As String)
                      If (value <> NombreDeLaFuente) Then NombreDeLaFuente = value
                  End Set
            End Property


            Public Sub AnadirLineaCabeza(ByVal linea As String)
                  LineasDeLaCabeza.Add(linea)
            End Sub

            Public Sub AnadirLineaSubcabeza(ByVal linea As String)

                  LineasDeLaSubCabeza.Add(linea)
            End Sub

            Public Sub AnadirElemento(ByVal cantidad As String, ByVal elemento As String, ByVal precio As String)

                  Dim NuevoElemento As OrdenarElementos = New OrdenarElementos()
                  '''''items.Add(newitem.
                  Elementos.Add(NuevoElemento.GenerarElemento(cantidad, elemento, precio))
            End Sub

             Public Sub AnadirTotal(ByVal Nombre As String, ByVal Precio As String)
                  Dim NuevoTotal As OrdernarTotal = New OrdernarTotal
                ' OrderTotal(newtotal)

                  Totales.Add(NuevoTotal.GenerarTotal(Nombre, Precio))
            End Sub

            Public Sub AnadeLineaAlPie(ByVal linea As String)
                  LineasDelPie.Add(linea)
            End Sub

            Private Function AlineaTextoaLaDerecha(ByVal Izquierda As Integer) As String

                Dim espacios As String = ""
                Dim spaces As Integer = MaximoCaracter() - Izquierda
                Dim x As Integer
                  For x = 0 To spaces
                        espacios += " "
                  Next
                  Return espacios
            End Function

            Private Function DottedLine() As String

                  Dim dotted As String = ""
                  Dim x As Integer
                  For x = 0 To MaximoCaracter()
                        dotted += "="
                  Next
                  Return dotted
            End Function

            Public Function ImpresoraExistente(ByVal impresora As String) As Boolean

                  For Each strPrinter As String In PrinterSettings.InstalledPrinters

                        If impresora = strPrinter Then
                              Return True
                        End If
                  Next strPrinter
                  Return False
            End Function

            Public Sub ImprimeTicket(ByVal impresora As String)

                  FuenteImpresa = New Font(NombreLetra, TamanoLetra, FontStyle.Regular)
                  'Dim pr As New PrintDocument
                  DocumentoAImprimir.PrinterSettings.PrinterName = impresora
                  'pr.PrinterSettings.printpa()
                ' pr.PrintPage += New
                ' PrintPageEventHandler(pr_PrintPage)
                  DocumentoAImprimir.Print()

            End Sub

            Private Sub DocumentoAImprimir_PrintPage(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles DocumentoAImprimir.PrintPage
                  e.Graphics.PageUnit = GraphicsUnit.Millimeter
                  gfx = e.Graphics

                  'DrawImage()
                  'DrawHeader()
                  DibujaLaCabecera()
                  'DrawSubHeader()
                  DibujaLaSubCabecera()
                  'DrawItems()
                  DibujaElementos()
                  'DrawTotales()
                  DibujaTotales()
                  DibujarPieDePagina()

                  'If (headerImagep.Width <> 0) Then
                  '      HeaderImage.Dispose()
                  '      HeaderImage.Dispose()
                  'End If
            End Sub

            Private Function Renglon() As Double
                  Return MargenSuperior + (contador * FuenteImpresa.GetHeight(gfx) + imageHeight)
            End Function

            Private Sub DrawImage()

                  If (headerImagep.Width <> 0) Then

                      Try

                            gfx.DrawImage(HeaderImage, New Point(CInt(MargenIzquierdo), CInt(Renglon())))
                            Dim height As Double = (HeaderImage.Height / 58) * 15
                            imageHeight = CInt(Math.Round(height) + 3)

                        Catch ex As Exception

                      End Try


                  End If
            End Sub

            Private Sub DibujaLaCabecera()

                  For Each Cabecera As String In LineasDeLaCabeza

                        If (Cabecera.Length > MaximoCaracter()) Then

                              Dim CaracterActual As Integer = 0
                              Dim LongitudDeCabecera As Integer = Cabecera.Length

                              While (LongitudDeCabecera > MaximoCaracter())

                                    CadenaPorEscribirEnLinea = Cabecera.Substring(CaracterActual, MaximoCaracter)
                                    gfx.DrawString(CadenaPorEscribirEnLinea, FuenteImpresa, ColorDeLaFuente, MargenIzquierdo, Renglon(), New StringFormat())
                                    contador += 1
                                    CaracterActual += MaximoCaracter()
                                    LongitudDeCabecera -= MaximoCaracter()
                              End While
                              CadenaPorEscribirEnLinea = Cabecera
                              gfx.DrawString(CadenaPorEscribirEnLinea.Substring(CaracterActual, CadenaPorEscribirEnLinea.Length - CaracterActual), FuenteImpresa, ColorDeLaFuente, MargenIzquierdo, Renglon(), New StringFormat())
                              contador += 1

                        Else


                              CadenaPorEscribirEnLinea = Cabecera
                              gfx.DrawString(CadenaPorEscribirEnLinea, FuenteImpresa, ColorDeLaFuente, MargenIzquierdo, Renglon(), New StringFormat())

                              contador += 1
                        End If
                  Next Cabecera
                   DibujaEspacio()
            End Sub

            Private Sub DibujaLaSubCabecera()

                  For Each SubCabecera As String In LineasDeLaSubCabeza

                        If (SubCabecera.Length > MaximoCaracter()) Then

                              Dim CaracterActual As Integer = 0
                              Dim LongitudSubcabecera As Integer = SubCabecera.Length

                              While (LongitudSubcabecera > MaximoCaracter())

                                    CadenaPorEscribirEnLinea = SubCabecera
                                    gfx.DrawString(CadenaPorEscribirEnLinea.Substring(CaracterActual, MaximoCaracter), FuenteImpresa, ColorDeLaFuente, MargenIzquierdo, Renglon(), New StringFormat())

                                    contador += 1
                                    CaracterActual += MaximoCaracter()
                                    LongitudSubcabecera -= MaximoCaracter()
                              End While
                              CadenaPorEscribirEnLinea = SubCabecera
                              gfx.DrawString(CadenaPorEscribirEnLinea.Substring(CaracterActual, CadenaPorEscribirEnLinea.Length - CaracterActual), FuenteImpresa, ColorDeLaFuente, MargenIzquierdo, Renglon(), New StringFormat())
                              contador += 1

                        Else

                              CadenaPorEscribirEnLinea = SubCabecera

                              gfx.DrawString(CadenaPorEscribirEnLinea, FuenteImpresa, ColorDeLaFuente, MargenIzquierdo, Renglon(), New StringFormat())

                              contador += 1

                              CadenaPorEscribirEnLinea = DottedLine()

                              gfx.DrawString(CadenaPorEscribirEnLinea, FuenteImpresa, ColorDeLaFuente, MargenIzquierdo, Renglon(), New StringFormat())

                              contador += 1
                        End If
                  Next SubCabecera
                   DibujaEspacio()
            End Sub

            Private Sub DibujaElementos()

                  Dim OrdenElemento As OrdenarElementos = New OrdenarElementos()

                  gfx.DrawString("CANT   DESCRIPCION                IMPORTE", FuenteImpresa, ColorDeLaFuente, MargenIzquierdo, Renglon(), New StringFormat())

                  contador += 1
                  DibujaEspacio()

                  For Each Elemento As String In Elementos

                        CadenaPorEscribirEnLinea = OrdenElemento.ObtenerCantidadDeElementos(Elemento)

                        gfx.DrawString(CadenaPorEscribirEnLinea, FuenteImpresa, ColorDeLaFuente, MargenIzquierdo, Renglon(), New StringFormat())
                        CadenaPorEscribirEnLinea = OrdenElemento.ObtenerPrecioElemento(Elemento)
                        CadenaPorEscribirEnLinea = AlineaTextoaLaDerecha(CadenaPorEscribirEnLinea.Length) + CadenaPorEscribirEnLinea

                        gfx.DrawString(CadenaPorEscribirEnLinea, FuenteImpresa, ColorDeLaFuente, MargenIzquierdo, Renglon(), New StringFormat())

                        Dim Nombre As String = OrdenElemento.ObtenerNombreElemento(Elemento)

                        MargenIzquierdo = 10
                        If (Nombre.Length > MaximoCaracterDescripcion) Then

                              Dim CaracterActual As Integer = 0
                              Dim LongitudElemento As Integer = Nombre.Length

                              While (LongitudElemento > MaximoCaracterDescripcion)

                                    CadenaPorEscribirEnLinea = OrdenElemento.ObtenerNombreElemento(Elemento)
                                    gfx.DrawString("         " + CadenaPorEscribirEnLinea.Substring(CaracterActual, MaximoCaracterDescripcion), FuenteImpresa, ColorDeLaFuente, MargenIzquierdo, Renglon(), New StringFormat())

                                    contador += 1
                                    CaracterActual += MaximoCaracterDescripcion
                                    LongitudElemento -= MaximoCaracterDescripcion
                              End While

                              CadenaPorEscribirEnLinea = OrdenElemento.ObtenerNombreElemento(Elemento)
                              gfx.DrawString("         " + CadenaPorEscribirEnLinea.Substring(CaracterActual, CadenaPorEscribirEnLinea.Length - CaracterActual), FuenteImpresa, ColorDeLaFuente, MargenIzquierdo, Renglon() + 10, New StringFormat())
                              contador += 1

                        Else

                              gfx.DrawString("         " + OrdenElemento.ObtenerNombreElemento(Elemento), FuenteImpresa, ColorDeLaFuente, MargenIzquierdo, Renglon(), New StringFormat())

                              contador += 1
                     End If
                  Next Elemento

                  MargenIzquierdo = 10
                   DibujaEspacio()
                  CadenaPorEscribirEnLinea = DottedLine()

                  gfx.DrawString(CadenaPorEscribirEnLinea, FuenteImpresa, ColorDeLaFuente, MargenIzquierdo, Renglon(), New StringFormat())

                  contador += 1
                   DibujaEspacio()
            End Sub

            Private Sub DibujaTotales()

                  Dim ordTot As OrdernarTotal = New OrdernarTotal()

                  For Each total As String In Totales

                        CadenaPorEscribirEnLinea = ordTot.ObtenerTotalCantidad(total)
                        CadenaPorEscribirEnLinea = AlineaTextoaLaDerecha(CadenaPorEscribirEnLinea.Length) + CadenaPorEscribirEnLinea

                        gfx.DrawString(CadenaPorEscribirEnLinea, FuenteImpresa, ColorDeLaFuente, MargenIzquierdo, Renglon(), New StringFormat())
                        MargenIzquierdo = 10

                        CadenaPorEscribirEnLinea = "         " + ordTot.ObtenerTotalNombre(total)
                        gfx.DrawString(CadenaPorEscribirEnLinea, FuenteImpresa, ColorDeLaFuente, MargenIzquierdo, Renglon(), New StringFormat())
                        contador += 1
                  Next total
                  MargenIzquierdo = 10
                   DibujaEspacio()
                   DibujaEspacio()
            End Sub

            Private Sub DibujarPieDePagina()

                  For Each PieDePagina As String In LineasDelPie

                        If (PieDePagina.Length > MaximoCaracter()) Then

                              Dim currentChar As Integer = 0
                              Dim LongitudPieDePagina As Integer = PieDePagina.Length

                              While (LongitudPieDePagina > MaximoCaracter())

                                    CadenaPorEscribirEnLinea = PieDePagina
                                    gfx.DrawString(CadenaPorEscribirEnLinea.Substring(currentChar, MaximoCaracter), FuenteImpresa, ColorDeLaFuente, MargenIzquierdo, Renglon(), New StringFormat())

                                    contador += 1
                                    currentChar += MaximoCaracter()
                                    LongitudPieDePagina -= MaximoCaracter()
                              End While
                              CadenaPorEscribirEnLinea = PieDePagina
                              gfx.DrawString(CadenaPorEscribirEnLinea.Substring(currentChar, CadenaPorEscribirEnLinea.Length - currentChar), FuenteImpresa, ColorDeLaFuente, MargenIzquierdo, Renglon(), New StringFormat())
                              contador += 1

                        Else

                              CadenaPorEscribirEnLinea = PieDePagina
                              gfx.DrawString(CadenaPorEscribirEnLinea, FuenteImpresa, ColorDeLaFuente, MargenIzquierdo, Renglon(), New StringFormat())

                              contador += 1
                     End If
                  Next PieDePagina
                  MargenIzquierdo = 10
                   DibujaEspacio()
            End Sub

            Private Sub DibujaEspacio()

                  CadenaPorEscribirEnLinea = "   "

                  gfx.DrawString(CadenaPorEscribirEnLinea, FuenteImpresa, ColorDeLaFuente, MargenIzquierdo, Renglon(), New StringFormat())

                  contador += 1

          End Sub

Public Sub New()

End Sub


End Class
            


            
Public Class OrdenarElementos

            Public delimitador() As Char = "|||"


            Public Sub OrdenarElementos(ByVal delimit As Char)
                Dim delimitador As Char = delimit
            End Sub


            Public Function ObtenerCantidadDeElementos(ByVal orderItem As String) As String

                  Dim delimitado() As String = orderItem.Split(delimitador)
                  Return delimitado(0)
            End Function

            Public Function ObtenerNombreElemento(ByVal orderItem As String) As String

                  Dim delimitado() As String = orderItem.Split(delimitador)
                  Return delimitado(1)
            End Function

            Public Function ObtenerPrecioElemento(ByVal orderItem As String) As String

                  Dim delimitado() As String = orderItem.Split(delimitador)
                  Return delimitado(2)
            End Function

            Public Function GenerarElemento(ByVal cantidad As String, ByVal NombreElemento As String, ByVal Precio As String) As String

                  Return cantidad + delimitador(0) + NombreElemento + delimitador(0) + Precio
            End Function
End Class




Public Class OrdernarTotal

            Public delimitador() As Char = "   "

            Public Sub OrdernarTotal(ByVal delimit As Char)

                Dim delimitador As Char = delimit
            End Sub

            Public Function ObtenerTotalNombre(ByVal totalItem As String) As String

                  Dim delimitado() As String = totalItem.Split(delimitador)
                  Return delimitado(0)

            End Function
            Public Function ObtenerTotalCantidad(ByVal totalItem As String) As String

                  Dim delimitado() As String = totalItem.Split(delimitador)
                  Return delimitado(1)
            End Function

            Public Function GenerarTotal(ByVal totalName As String, ByVal price As String) As String

                  GenerarTotal = totalName + delimitador(0) + price
            End Function

End Class




'//////////////////////////////////////////////////



Public Class Form1






Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim a As ticket = New ticket
'a.HeaderImage = "C:\Documents and Settings\Administrador\Mis documentos\COMPU.jpg"

a.AnadirLineaCabeza("STARBUCKS COFFEE TAMAULIPAS")
a.AnadirLineaCabeza("EXPEDIDO EN:")
a.AnadirLineaCabeza("AV. TAMAULIPAS NO. 5 LOC. 101")
a.AnadirLineaCabeza("MEXICO, DISTRITO FEDERAL")
a.AnadirLineaCabeza("RFC: CSI-020226-MV4")

'El metodo AddSubHeaderLine es lo mismo al de AddHeaderLine con la diferencia
'de que al final de cada linea agrega una linea punteada "=========="
a.AnadirLineaSubcabeza("Caja # 1 - Ticket # 1")
a.AnadirLineaSubcabeza("Le atendió: Prueba")
a.AnadirLineaSubcabeza(DateTime.Now.ToShortDateString() + " " + DateTime.Now.ToShortTimeString())

'El metodo AddItem requeire 3 parametros, el primero es cantidad, el segundo es la descripcion
'del producto y el tercero es el precio)
a.AnadirElemento("1", "Articulo Prueba", "15.00")
a.AnadirElemento("2", "Articulo Prueba", "25.00")

'El metodo AddTotal requiere 2 parametros, la descripcion del total, y el precio
a.AnadirTotal("SUBTOTAL", "29.75")
a.AnadirTotal("IVA", "5.25")
a.AnadirTotal("TOTAL", "35.00")
a.AnadirTotal("", "" ' //Ponemos un total en blanco que sirve de espacio
a.AnadirTotal("RECIBIDO", "50.00")
a.AnadirTotal("CAMBIO", "15.00")
a.AnadirTotal("", "" '/Ponemos un total en blanco que sirve de espacio
a.AnadirTotal("USTED AHORRO", "0.00")


'//El metodo AddFooterLine funciona igual que la cabecera
a.AnadeLineaAlPie("EL CAFE ES NUESTRA PASION..."
a.AnadeLineaAlPie("VIVE LA EXPERIENCIA EN STARBUCKS"
a.AnadeLineaAlPie("GRACIAS POR TU VISITA"

'//Y por ultimo llamamos al metodo PrintTicket para imprimir el ticket, este metodo necesita un
'//parametro de tipo string que debe de ser el nombre de la impresora.
a.ImprimeTicket("SWF Printer")








End Sub
End Class
 
Muchas gracias amigo, haré la prueba haber si me funciona, yo te comento el resultado, de antemano muchas gracias por tu ayuda y tiempo... Gracias
Nadamas una duda como lo agrego, es que soy un principiante en esto...
 
Volver
Arriba