Este pretende ser un ejemplo muy simple y breve en visual basic .net. Sencillo para que se entienda rapidamente su funcionamiento y breve (con muy poco código) para que nada nos estorbe a la hora de ponerle nuestro toque personal. Los programadores somos muy creativos y me a pasado muchas veces que me encontré con ejemplos muy complejos y llenos de código, los cuales tuve que desmenuzar y analizar por partes para poder entender su funcionamiento. Así que trato de poner en todos mis post ejemplos concretos, simples y que funcionen con solo copiar, pegar y hacer una mimina configuración a los controles.
Necesitamos:
Un Winform (Form1), un control PrintDocument (PrintDocument1), un control PrintDialog (PrintDialog1), un TextBox (TextBox1) y un Botón (Button1). El formulario debería tener un aspecto similar al de esta imagen:

Copiamos el siguiente código en el evento click de button1
If PrintDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then PrintDocument1.PrinterSettings = PrintDialog1.PrinterSettings PrintDocument1.Print() End If
que lo que hace es abrir el cuadro de dialogo para seleccionar la impresora y luego pasa pasa toda la configuración seleccionada al objeto printDocument y luego le dice que imprima. Lo que dispara el evento PrintPage de printDocument.
Ahora sobre el objeto PrintDocument1 hacemos doble clic y pegamos el siguiente código
e.Graphics.DrawString(TextBox1.Text, New Font("Verdana", 18, FontStyle.Bold), Brushes.Black, 10, 10)
For i As Integer = 1 To 10
e.Graphics.DrawString("Ejemplo de linea: " & i, New Font("Tahoma", 10, FontStyle.Bold), Brushes.Black, 10, 20 + (i * 30))
Next
Al ejecutar el programa este imprimirá el contenido de la caja de texto como titulo de la pagina y diez lineas de ejemplo utilizando distinta y furnte y tamaño. El resultado se verá similar al de la siguiente imagen:

más información sobre los controles…
PrintDialog (Componente, formularios Windows Forms)
El componente PrintDialog de formularios Windows Forms es un cuadro de diálogo preconfigurado que se utiliza para seleccionar una impresora, elegir las páginas que se van a imprimir y determinar otros valores de configuración relacionados con la impresión en aplicaciones basadas en Windows. Utilícelo como una solución sencilla para seleccionar configuraciones de la impresora o relacionadas con la impresora, en lugar de configurar un cuadro de diálogo propio. Puede permitir que los usuarios impriman diversas partes de sus documentos: imprimir todo, imprimir el intervalo de páginas especificado o imprimir una selección. Al basarse en cuadros de diálogo estándar de Windows, creará aplicaciones cuya funcionalidad básica les resultará inmediatamente familiar a los usuarios.
PrintDocument (Componente, formularios Windows Forms)
El componente PrintDocument de formularios Windows Forms se utiliza para establecer las propiedades que describen qué se imprime y, a continuación, para imprimir el documento dentro de aplicaciones basadas en Windows.
Información Bitacoras.com…
Si lo deseas, puedes hacer click para valorar este post en Bitacoras.com. Gracias….
Es muy bueno cuando queremos imprimir textbox de un formulario sin necesidad de hacer un informe.
No se si podrias publicar algo sobre como hacer que un recibo de compra que este en un reportviewer se imprima automaticament en una imprsora predeterminada sin necesidad de abrir el pirntdialog de reportviewer.
hasta luego y felicidades por tus aportes.
REPO.PrintToPrinter(NCOPIAS, False, 0, 0)
Excelente! Amo lo simple. Incluso funcionan los seteos de página como orientación y tamaño
me ayudo mucho este codigo de hecho estuve buscando mucho por internet y me salio codigo muy complejo gracias por cierto no mas te falto declarar la variable & pero todo salio perfecto
Hola estube buscando por muchas partes hasta que encontre tu ejemplo y me ayudo basatante ya que en otras paginas habia muchisimo codigo y no sabia que parte era la que realmente imprimia
muchas gracias por el ejemplo
Gracias Alex, esa es la idea principal de este blog: que lo ejemplos sean breves y claros para que no te enriedes con tanto código.
aca tienen el codigo para C#!
namespace Print
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
if (printDialog1.ShowDialog() == DialogResult.OK)
{
printDocument1.PrinterSettings = printDialog1.PrinterSettings;
printDocument1.Print();
}
}
private void printDocument1_PrintPage_1(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
int a = 50;
for (int i = 0; i < 10; i++)
{
e.Graphics.DrawString(“SampleText”, new Font(“Verdana”, 20 – i, FontStyle.Italic), Brushes.Black, 20, a);
a = a + 25;
}
}
}
}
como puedo saber la posición en la que saldrá la impresión cuando le doy las coordenadas X e Y
Socio, Excelente post, claro y sencillo, busque algo o alguien que explicara las cosas como debian ser por toda la web y solo esto me sirvio.Hay gente que explica de una manera complicada y con mucho codigo para sentirse que saben mucho. 10 pt.
Gracias y Saludos!
Excelente post, Te felicito, opino lo mismo que los demás, muy claro y explicativo, no como los otros que he visto.
Tendrás algo sobre crystal report basic for visual studio 8?
He hecho varios reportes y no me resulta como pasarle parámetros desde window form para aplicar ciertos filtros a las consultas.
gracias
Hola, necesito saber como imprimir la informacion que yo desee de los forms, por ejeplo los textos de los textbox, especificos y en lugares especificos y que me genere una vista previa antes de imprimirlos, no se mucho de esto pero quiero que me ayuden con eso. gracias!!
Genera un Crystal Report con el cascaron necesario y enviale los parametros
Tu si eres programador, si quieren poner el codigo de algo no hay nada mas practico que poner lo basico, ya cada quien le agrega lo que quiere, muchas gracias
Te felicito por la manera sencilla y clara
con la cuál explicas.
Te pido que por favor me expliques,como hacer para que en el PrintPage se ponga el día,nombre del més y el año.¿Cuál es el Código que debo poner en el PrintDocument?
Ejemplö:
Expedida el¿dia? de ¿nombre del més?del¿Año?
Muchas gracias.
De la misma forma en que imprimes cualquier variable. Para obtener la fecha del sistema usa: Now.date.
Suerte
Hola Eliseo, excelente ejemplo, muy sencillo y útil, solo quisiera saber como puedo hacer para indicarle al documento las coordenadas X,Y de la página donde quiero que se imprima la información. Esto lo necesito porque tengo que imprimir una serie de codigos de barras en unas páginas que ya traen 25 etiquetas en blanco.
Gracias de antemano.
En DrawString tienes propiedades que te permiten indicar las coordenadas X, Y donde se imprimirá. Solo es cuestion de hacer algunas pruebas y estoy seguro que podrás resolverlo.
Suerte
Hola gracias por el Aporte, me ha sido muy util, pero quisiera saber como imprimir el resultado de una consulta en un DataGrid
Gracias
DA.Fill(DT)
REPO.SetDataSource(DT)
CRV.ReportSource = REP
FRM.Controls.Add(CRV)
CRV.Dock = System.Windows.Forms.DockStyle.Fill
FRM.WindowState = FormWindowState.Maximized
FRM.ShowDialog()
”REPO= REPORTDOCUMENT
”CRV= CRYSTAL REPORT VIEWER
”FRM=WINDOWS FORM
”DA=SQLDATAADAPTER
”DT=DATATABLE
como puedo hacer q mi formulario tenga la opcion de nuevo
Hola, he estado probando la mayoria de los ejemplos y resulta que todos son muy buenos.
Mil gracias.
Pero ahora tengo un pequeño gran problema:
estoy recuperando informacion de una tabla y al listarla me ocupa mas de una pagina y NO encuentro como pasar a la siguiente. Agradeceria un ejemplo de esos tuyos y me quedaria mas que claro.
Trabajo con VS.net 2008 y MySql.
hola que tal men pero sale error en &, en el mensaje de error dice que falta declararlo pero me gustaria saber en que forma lo declaras, espero tu pronta respuesta, gracias…
caaaaaaaaaaapooooooooooooooo…
y para imprimir una foto, como seria?
no encuentro una onda DrawImagen pero desde archivo…
Hola!
Muy interesante el ejemplo. Yo programo en C#.
Hay alguna manera de previsualizar esto?
Saludos!
Me parece muy bien para imprimir los tesxtbox, con pocos caracteres, pero cuando intento imprimir un campo memo, que tiene varias líneas, me produce un error. Resulta que no me respeta los 80 caracteres por línea, como está en el campo memo, escribe la línea hasta que haya un punto y aparte, así que al imprimir solamente sale los primeros 80 caracteres de cada punto y aparte.
Os agradecería que me digáis como puedo subsanar este error.
Hola, sabes he intentado el ejemplo inicial, pero sin suerte que imprima, utilizo una impresora PDF. Y siempre me sale en blanco. Con seguridad me esta faltando especificar parametros o demas.. si me ayudas por favor ?
Gracias.
idem
Que falta por añadir al ejemplo para poner el retorno de carro.
Gracias de antemano,
Sabéis como hay que poner: 90 caracteres por línea y hacer un retorno de Carro
Bien loquito… ¡te luciste!
Merci Beaucoup
xk aparece & como no declarado
la parte & borralo, solo dejalo con el &
nada mas
Sos un capo man me re sirvio, gracias.
excelente pero vuelvo a preguntar hay alguna manera para imprimir el resultado de una consulta en un datagridview?¿
Sip, checa mi respuesta alla arriba
oye como le hago para imprimir el contenido de un DataGridView1
Estoy volviendome loco!!!
Tengo un documento de word, al que llamo para imprimir,
wdoc.print()
El caso es que tengo predeterminada la impresora banca y negra, y quiero escojer, si lo hago con PDF Creator o la de Color. He probado de todo sin resultado alguno.
Alguien sería tan amable de decirme un codigo para decirle que imprima el “wdoc” con la impresora que yo eliga?
Muchas gracias de antemano!
Hola!!
Me gustó el post,pero me quedó algo en duda…
si por ejemplo yo tengo 2 textbox,y quiero que imprima el texto del TextBox1,como hago??
Excelente articulo, la verdad en lo mas sencillo mejor. y resto es solo experimentar
si en vez de imprimir un tex quiero imrimir un
DataGridView como ago
Hola, estoy haciendo un programilla con VB.net y tengo un problema a la hora de mandar imprimir.
Yo lo que necesito es imprimir tablas que aparecen en una base de datos, se supone que el usuario elige qué parte de la base de datos quiere imprimir, pero no se como idicar que no imprima toda la BD.
Si alguien puede ayudarme se lo agradeceria.
Un saludo!!
Hola, yo tengo una respuesta y una clase bastante sencilla…
Buenas he utilizado este codigo para imprimir con cristal report Report.PrintToPrinter(1, False, 0, 0)
pero esta linea manda a imprimir a la impresora por defaul la que este como predeterminada y ocupo tener una como predertermina y mandar a imprimir a otra agradezco su ayuda con algun codigo que le pueda dar la ruta o nombre desde codigo a imprimir gracias
Saludos y gracias por compartir tus conocimientos la verdad soy nuevo en esto, viendo tu codigo me doy decuenta lo simple que puede llegar ser aprender programacion es custion de practica y dedicacion..
mi pregunta es yo tengo un formulario la cual tiene 107 chechbox y 4 textbox como puedo hacer que me imprima la informacion debido a que el formulario tiene demasiado contenido para que entre en una hoja tipo carta A4
que es lo que quiero hacer por ejemplo ya tengo claro que debo hacer un comando (If – Else – Then) para poder seleccionar de mi formulario el conetenido seleccionado pero a la hora da mandarlo a imprimir como puedo enviar ademas del formato de form y el contenido seleccionado no entiendo y usando crystal report no me deja usar checkbox :S estoy muy enredado no se que puedo hacer aqui dejo una imagene http://img826.imageshack.us/img826/2738/14397131.jpg
muy buen ejemplo. Pero ahi imprimo texto que yo le paso. Y si necesito imprimir un documento que tengo guardado en mi PC? El asunto es el siguiente: Necesito imprimir un documento que tengo guardado en C:\\. El problema es que tengo que setearle primero el rango de páginas a imprimir (xq no necesito todo el documento) y después imprimirlo. Qué puedo hacer??
la pregunta da lugar a muchas respuestas y todas dependen del tipo de archivo que quieras imprimir, dado que no es lo mismo un archivo de texto que una planilla de excel o un archivo de imagen. ¿Que archivo es el que quieres imprimir?
Exelente ejemplo lo he puesto en marcha y muy facil es.
solo me queda varias dudas la principal es como indicarle al procedimiento que tiene que hacer salto de linea. caundo un texto no alcanza en una linea si no que reequiere 2 o mas?
gracias
Hola, tengo un problema en el codigo de printDocument ya que “amp” me señala error y me dice que no esta declarada… si son tan amables de solucionarme el problema… gracias
Eso que dice ‘&’ se refiere solamente a que es un amperson lo que hay ahí. Esa línea de código está concatenando texto. Sólo dejalo como ‘&’ y listo!!
No se si ya lo habías descubierto antes, pero aun asi te dejo la respuesta.
Saludos!!
Gracias Angelica. Era un error del editor HTML que había modificado el código. Ya lo arregle!
Muy buen ejemplo para imprimir utilizando printdocument y printdialog, sin embargo, con estas instrucciones como salto de pagina? al utilizar e.hasmorepage me hace un conteo infinito de paginas.
Gracias
esta muy padre y sencillo ya que muchos otros expresan demaciado en codigo me fue de gran ayuda…. gracias
Buenisimo….Muchas gracias por tu ayuda..
Hola quisiera que ese boton me imprima un reporte !! ? como podria hacerlo por
favor
revisa estos posts: http://www.solovb.net/index.php/tag/reportview/
excelente me ayudo mucho ya llevaba como 3 dias buscando esto gracias amigo !!!!
Tengo una consulta que la he buscado por todos lados y no tengo respuesta aun.
mi consulta es la siguiente:
tengo un windows form en vb.net y necesito imprimirlo,mi problema es que al ser tan extenso (tengo habilitada la propiedad en autoscroll del formulario) ,me imprime solamente lo que tengo en pantalla en ese momento ,no asi el resto del formulario.
uso este codigo para imprimir:
‘imprimir formulario
Private Sub Btnimprimir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Btnimprimir.Click
With PrintForm1
.PrintAction = Printing.PrintAction.PrintToPreview
.Print(Me, PowerPacks.Printing.PrintForm.PrintOption.Scrollable)
End With
End Sub
no se si se podra imprimir formularios de estas caracteristicas .
bueno desde ya muchas gracias de antemano.-
Hola, excelente información, muchas gracias, soy super novato en esto y no se otra forma de imprimir y batalle algo con la idea de coordenadas, y para ayudarme imprimí una hoja cuadriculada, aquí les dejo el código por si a algún novato como yo le sirve:
**********************************************************************************
‘esto es para imprimir en papel una cuadricula espaciada 50 pixeles con rótulos que te ayuda para ubicar lo que quieras imprimir
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
PrintDocument1.Print()
End Sub
Private Sub PrintDocument1_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
Dim cyanPen As New Pen(Color.Cyan, 1)
Dim y As Integer
For y = 1 To 23
e.Graphics.DrawLine(cyanPen, 1, 1 + (y * 50), 850, 1 + (y * 50))
e.Graphics.DrawLine(cyanPen2, 1 + (y * 50), 1, 1 + (y * 50), 1150)
e.Graphics.DrawString((y * 50), New Font(“Verdana”, 8, FontStyle.Bold), Brushes.Red, 40, -6 + (y * 50))
e.Graphics.DrawString((y * 50), New Font(“Verdana”, 8, FontStyle.Bold), Brushes.Red, -10 + (y * 50), 44)
e.Graphics.DrawString((y * 50), New Font(“Verdana”, 8, FontStyle.Bold), Brushes.Red, 390, -6 + (y * 50))
e.Graphics.DrawString((y * 50), New Font(“Verdana”, 8, FontStyle.Bold), Brushes.Red, -10 + (y * 50), 544)
Next
End Sub
**********************************************************************************
Gracias! Me ayudo mucho
Good Day…
Como estan disculpen pero me podrian ayudar…
como puedo imprimir una imagen cargada en un label…..? o en un picturebox…..? de antemano les agradesco la ayuda…
Utiliza el método DrawImage en lugar de DrawString
Excelente. Pero,¿cómo se puede imprimir más de 1 página?
como visualizo esto antes de ser impreso usando PrintToPreview
gracias
Graicas por el codigo ya que es muy facil mandar a imprimir siempre y cuando toda la informacion que se requiera imprimir sea en una sola hoja, ya que lo que yo requiero es imprimir en mas de una hoja ya que lo que mando a imprimir es el contenido de un listview y son un buen registros y usando este codigo solo se imprime una sola pagina y no se si alguien sabe como hacer para el salto de pagina y se imprima todo la informacion que quiero de ante mano muchas gracias