Bueno aquí os dejo una de las muchas formas que podemos imprimir en VB.NET. En este caso no utilizaremos Crystal Report pero si el objeto PrintDocument.
Creamos un formulario e insertamos un objeto de tipo printDocument, al que llamamos HojaImpresion.
Insertarmos tambien un control button al que llamaremos cmdImprimir.
Pulsamos doble_click sobre el control HojaImpresion para irnos directamente procedimiento:
Private Sub HojaImpresion_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles HojaImpresion.PrintPage Try ' La fuente a usar Dim prFont As New Font("Arial", 15, FontStyle.Bold) ' la posición superior 'imprimimos la fecha y hora prFont = New Font("Arial", 10, FontStyle.Regular) e.Graphics.DrawString(Date.Now.ToShortDateString.ToString & " " & _ Date.Now.ToShortTimeString.ToString, prFont, Brushes.Black, 15, 385) 'imprimimos el nombre del cliente prFont = New Font("Arial", 25, FontStyle.Bold) e.Graphics.DrawString("Nombre del Cliente", prFont, Brushes.Black, 50, 250) 'imprimimos la referencia del pedido e.Graphics.DrawString("Referencia", prFont, Brushes.Black, 50, 520) prFont = New Font("Arial", 18, FontStyle.Bold) e.Graphics.DrawString("Nombre de la Referencia", prFont, Brushes.Black, 50, 555) 'imprimimos Pedido Ondupack y Pedido del cliente prFont = New Font("Arial", 22, FontStyle.Regular) e.Graphics.DrawString("Pedido", prFont, Brushes.Black, 50, 660) e.Graphics.DrawString("Palets", prFont, Brushes.Black, 250, 660) prFont = New Font("Arial", 24, FontStyle.Regular) e.Graphics.DrawString("19875", prFont, Brushes.Black, 50, 700) e.Graphics.DrawString("44", prFont, Brushes.Black, 250, 700) 'imprimimos Cajas X Palet y Cajas x Paquete prFont = New Font("Arial", 22, FontStyle.Regular) e.Graphics.DrawString("Cajas x Palet", prFont, Brushes.Black, 50, 760) e.Graphics.DrawString("Cajas x Paquete", prFont, Brushes.Black, 250, 760) prFont = New Font("Arial", 24, FontStyle.Regular) e.Graphics.DrawString("500", prFont, Brushes.Black, 50, 800) e.Graphics.DrawString("32", prFont, Brushes.Black, 250, 800) 'imprimimos el numero del Palet prFont = New Font("Arial", 24, FontStyle.Regular) e.Graphics.DrawString("Número del Palet 45", prFont, Brushes.Black, 50, 880) 'indicamos que hemos llegado al final de la pagina e.HasMorePages = False Catch ex As Exception MessageBox.Show("ERROR: " & ex.Message, "Administrador", _ MessageBoxButtons.OK, MessageBoxIcon.Error) End Try End Sub |
Despues pulsamos doble click sobre el boton cmdImprimir:
Private Sub cmdImprimir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdImprimir.Click HojaImpresion.Print() End Sub |
De esta forma cuando ejecutemos nuestro programa, pulsaremos sobre el boton Imprimir del formulario y nos saldrá como resultado:
el evento e.Graphics tiene varias funciones para escribir distinto tipos. Por ejemplo si queremos imprimir una imagen:
e.Graphics.DrawImage(PictureBox1.Image, 380, 335, 75, 75) |
Nota: Posible Error.
Si alguna vez ejecutáis el código y os aparece una excepción con Mensaje "Controlador No Valido" en referencia a la instancia del printDocument, se debe a un problema con la impresora que tengáis asociada como predenterminada en ese momento.Por si os pasa a vosotros, que he perdido casi 1 hora buscando el problema.
Saludos.
28 comentarios:
un groso, la mejor explicación que encontré..... y funciona!!!!
ERES LO MEJOR..NUNCA CAMBIES!!! ME HA SALVADO LA VIDA
Hola buen día, esta excelente el post, tengo una duda, como podría crear dos hojas e imprimirlas de forma duplex!! saludos
Al fin!!!! Alguien que pudo explicar el tema sin tanto enredo. Muchas gracias
TE amo Simplemente te amo!!!
Hola quisiera saber como hago para imprimir un documento con un solo encabezado, pero con contenido en mas de una pagina
Lo primero, felicitarte por la calidad y claridad de tu información, nos has ayudado mucho.
Segundo preguntarte una cosa. Si yo mando a imprimir así un ticket, como sé que ése ticket se ha impreso correctamente?? Me explico, yo tengo un programa que va imprimiendo tickets segun van llegando, y los almaceno en un Datagridview, por lo que no puedo imprimir el ticket siguiente, hasta que sepa con seguridad que el actual ticket se ha impreso y marcarlo como impreso. Existe manera de saber si al intentar imprimir el actual ticket, tenemos un error de impresión, y de qué tipo se trata?
Muchas gracias por adelantado.
Hola, no se si hay forma de recoger un error de impresion desde un dispositivo, aunque si puedes dar la opcion de reimprimir el ticket que ha tenido el error, es decir de forma manual.
Hola! Si, la opción de reimpresión la tienen, incluso pueden acceder al histórico de tickets para reimpresión los que quieran, pero si la impresora de fallo y el ticket sale del data gris como impreso, tendría un grave problema con mi cliente, ya que imagínate que pasa con 100tickets seguidos en cuestión de 5minutos y esos pedidos no se preparan! Necesito saber seguro que un ticket se imprime, y sino lo hace informar al cliente de que existe un problema y lo debe solucionar para que no se acumulen los pedidos. Si sabes de algún método o de alguien que te lo pudiese facilitar la información para ayudarme te lo agradecería eternamente! Lo que no puedo entender es que vb2010 Net no tenga una función para eso. Si encuentras algo o alguien me puede ayudar no duden en escribirme a:
kaisgoo@hotmail.com
Muchas gracias.
Alguien me podria ayudar en como puedo implementar eso en una aplicacion de consola (VB)
Gracias.
Supremo aporte bro.
Muchas garcias
A la primera! Muchas gracias!!!!!
:D
Hola, sabes como se podria hacer esto en Vb.Net pero en Visual Studio 2015 ? Muchisimas gracias de antemano.
En Visual Studio 2015 es igual, solo tienes tener un objeto PrintDocument y meter el codigo.
Simplemente, gracias! me haz aliviado los dolores de cabeza con estas impresiones, Saludos y muchos éxitos
me haz salvado la vida.
como imprimir el texto mas grande en visual basic 6.0
Muy buen aporte excelente explicación muchas gracias por compartir tu conocimiento me sirvió muchísimo gracias!!!!!!
Cuando se manda la impresion aparece un dialogo con un boton que tiene el foco de Cancelar, ese dialogo no se puede ocultar?
Solamente ¡GRACIAS!
buen material gracias
Excelente aporte me ha servido muchisimo, Mil Gracias
Me sirvió exactamente para lo que necesitaba, claro que falta especificar que sirve más para imprimir en impresora normal de página carta o A4; yo necesitaba para ticketera pero haciendo ajustes y modificando coordenadas sirvió a la perfección. Muchas gracias por tu aporte
Muy buena explicacion,
habria algun ejemplo de como hacer:
e.Graphics.DrawString("Número del Palet 45" ....
que el "Numero 45" que salga en negrita???
Gracias!!!
para imprimir GridView?
Como puedo imprimir varias etiquetas, si me pudieran ayudar?? por favor
Muchas gracias tu ejemplo funciona de maravilla imprime perfecto en una impresora POS conectada por USB. Quería preguntarle como puedo enviar esto a una impresora en RED.
Publicar un comentario