Visual Basic.NET - impresion de ticket en impresora termica

 
Vista:
Imágen de perfil de kike
Val: 26
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

impresion de ticket en impresora termica

Publicado por kike (29 intervenciones) el 07/01/2020 00:55:06
diseñe el tiket usando un procedimiento, cuando lo pruebo con el crystal report todo ok., pero cuando corro toda la aplicacion, tengo el tiket en pantalla mas al imprimirlo en la tiketera corre sin parar y no imprime nada, pueden orientarme a que se debe???... gracias... la aplicacion está en vb.net 2017
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

impresion de ticket en impresora termica

Publicado por Phil Rob (1546 intervenciones) el 07/01/2020 17:07:48
Hola,

" .... tengo el tiket en pantalla mas al imprimirlo en la tiketera corre sin parar y no imprime nada .... "

Quiero solamente preguntar : tu tiket es un documento CrystalReport ?

Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de kike
Val: 26
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

impresion de ticket en impresora termica

Publicado por kike (29 intervenciones) el 08/01/2020 18:03:11
efectivamente...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

impresion de ticket en impresora termica

Publicado por Phil Rob (1546 intervenciones) el 08/01/2020 18:35:57
Penso como Wilfredo, es mejor de programar la impresion directa (procediemento del evento PrintPage).

Pero no es la pepuesta a tu pregunta ...
Perdón, no tengo solución para CrystalReport.

Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Wilfredo Patricio Castillo
Val: 1.239
Bronce
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

impresion de ticket en impresora termica

Publicado por Wilfredo Patricio Castillo (720 intervenciones) el 08/01/2020 03:19:57
Personalmente, no recomiendo crystal reports para tickets, he realizado muchos tickets y ninguno con crysta reports, me parece que el código puro es mucho mas rápido y no depende ni de terceros ni de versiones, sobre todo cuando hay que dar mantenimiento a aplicaciones legadas.

Saludos cordiales,
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de kike
Val: 26
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

impresion de ticket en impresora termica

Publicado por kike (29 intervenciones) el 08/01/2020 18:03:36
efectivamente, asi es
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de kike
Val: 26
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

impresion de ticket en impresora termica

Publicado por kike (29 intervenciones) el 08/01/2020 18:52:35
Por favor tendrias el código de algun ejemplo, te agradeceria mucho me lo envies a [email protected] ... gracia
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

impresion de ticket en impresora termica

Publicado por Phil Rob (1546 intervenciones) el 09/01/2020 00:06:09
Holà,

Te enviare codigos para ejemplo mañana.
Aqui, ahora, este es la 12 de la noche...

Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

impresion de ticket en impresora termica

Publicado por Phil Rob (1546 intervenciones) el 09/01/2020 12:44:40
Hola Kike,

Para imprimir directamente, tienes que agregar una herramienta PrintDocument a tu proyecto.
El mejor es de lo instanciar en el Form donde es necesario :
Private WithEvents MiPrintDocument As System.Drawing.Printing.PrintDocument

Despues este, puedes llamar MiPrintDocument.Print cuando quieras imprimir.
Este código llenar la ejecución del procedimiento Private Sub MiPrintDocument _PrintPage(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles MiPrintDocument.PrintPage.
Este procedimiento debe ser escribido por ti.

Ejemplo de procedimiento (no para utilizar, solamente para mostrar los mecanismos) :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
Private Sub MiPrintDocument_PrintPage(ByVal sender As Object, ByVal e As
System.Drawing.Printing.PrintPageEventArgs) Handles MiPrintDocument.PrintPage
  Dim Linea As String
' PointF et RectangleF estan Posicion y Tamaño de la zona del impresión escribidas en Floating point
  Dim Posicion As System.Drawing.PointF
  Dim Rectangle As RectangleF
  Dim Police As Font
  Dim EspesorLinea As Single
 
  Linea = "Esta la linea a imprimir"	' Una primera linea a imprimir
 
  Police = New Font("Courier New", 10, FontStyle.Bold)
  Posicion = New PointF(e.MarginBounds.Left, e.MarginBounds.Top)
  EspesorLinea = Police.GetHeight(e.Graphics)
  Rectangle.Location = Posicion
  Rectangle.Width = e.MarginBounds.Width	' Tomar la distancia entre margas  Rectangle.Height = EspesorLinea	' y utilizar la espesor de la linea
  e.Graphics.DrawString(Linea, Police, Brushes.Black, Rectangle)
 
  Linea = "y este otra …"		' una otra linea …
 
  Police = New Font("Times New Roman", 16, FontStyle.Bold)
  Posicion = New PointF(e.MarginBounds.Left, e.MarginBounds.Top + EspesorLinea)
  EspesorLinea = Police.GetHeight(e.Graphics)
  Rectangle.Location = Posicion
  Rectangle.Width = e.MarginBounds.Width
  Rectangle.Height = EspesorLinea
  e.Graphics.DrawString(Linea, Police, Brushes.Black, Rectangle)
 
  '	… hasta no mas linea
 
  e.HasMorePages = False
End Sub

Este es más fácil de imprimir el contenido de un archivo TXT.

Aqui, para llamar la impresión, tienes que escribir el código siguiente :

1
2
3
4
5
‘ La variable MiDoc debe ser conocido en todo el Form
        MiPrintDocument.DocumentName = "X:\TXT\MonTexte.Txt" ‘ Nombre y camina del archivo
        MiDoc = New System.IO.StreamReader(MiPrintDocument.DocumentName)
        MiPrintDocument.Print()
        MiDoc.Close()

El procedimiento MiPrintDocument_PrintPage es escribido como esta :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
Private Sub MiPrintDocument_PrintPage(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument.PrintPage
  Dim Linea As String
' PointF et RectangleF estan Posicion y Tamaño de la zona del impresión escribidas en Floating point
  Dim Posicion As System.Drawing.PointF
  Dim Rectangle As RectangleF
  Dim Police As Font
  Dim EspesorLinea As Single
  Dim CuantidadLineasDeUnaPagina As Integer
  Dim ContadorLinea As Integer = 0 			' Contar las lineas imprimidas
' En este ejemplo exemple, todas líneas tienen mismo “Police” y mismo espesor
  Police = New Font("Courier New", 10, FontStyle.Bold)
  EspesorLinea = Police.GetHeight(e.Graphics)
  Rectangle.Width = e.MarginBounds.Width
  Rectangle.Height = EspesorLinea
 
  NbrLignesParPage = e.MarginBounds.Height / EspesorLinea
 
  Do Until MonDoc.Peek = -1	' Leer el archivo linea por line
    Linea = MonDoc.ReadLine()	' y calcular la posicion de la linea para imprimir
    Position = New PointF(e.MarginBounds.Left, e.MarginBounds.Top + (ContadorLinea * EspesorLinea))
    Rectangle.Location = Posicion
 
    e.Graphics.DrawString(Linea, Police, Brushes.Black, Rectangle)
 
    ContadorLinea += 1
    If ContadorLinea > NbrLignesParPage Then Exit Do
  Loop
 
  If MiDoc.Peek <> -1 Then
    e.HasMorePages = True
  Else
    MiDoc.Close()
    MiDoc = New  System.IO.StreamReader(MiPrintDocument.DocumentName)
  End If
End Sub

El procedimiento precedente es más fácil que la primera pero todas líneas están en el mismo formato.

Sobre la impresión de documentos, los detalles del diseño han sido muy difíciles a ajustar.

Este es la razón que utilizo la método siguiente.

Cuando tengo que imprimir, los datos están en las herramientas de Form (TextBox, ComboBox, DataGidView, …) y en variables en el código.
Ahí, registro todos los datos en un archivo TXT, veces con códigos que dicen como quiero ver imprimir el valor.
Cuando el archivo es hecho, contiene todo el necesario para imprimir el documento o el ticket.
A este momento, llamo las herramientas de impresión que es en mi clase MisImpresiones. En este clase, muestro la cadre de selección de la impresora (si necesario), muestro un “Preview” ((si necesario), y escribo el procedimiento MiPrintDocument_PrintPage con un Select Case para modificar el diseño de cada línea según los códigos agregados a mi archivo TXT.

Entonces, he la impresión en 2 etapas :
En el Form, los datos son enviados en archivo.
En la clase MisImpresiones, escribido el diseño.

Adjunto un proyecto para ejemplo de mi algoritmo completo, con impresión de varios datos, con un archivo TXT, con los códigos utilizados en MiPrintDocument_PrintPage.

Espero que esto te ayudará ...



ImpresionES
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar