Aquest pretén ser un exemple molt simple i breu en visual basic. net . Senzill perquè s'entengui ràpidament el seu funcionament i breu (amb molt poc codi) perquè res ens destorbi a l'hora de posar-li el nostre toc personal. Els programadors som molt creatius i m'a passat moltes vegades que em vaig trobar amb exemples molt complexos i plens de codi, dels quals vaig haver esmicolar i analitzar per parts per poder entendre el seu funcionament. Així que tracto de posar en tots els meus post exemples concrets, simples i que funcionin amb només copiar, enganxar i fer una mímina configuració als controls.
Necessitem:
Un Winform (Form1), un control PrintDocument (PrintDocument1), un control PrintDialog (PrintDialog1), un TextBox (TextBox1) i un Botó (Button1). El formulari hauria de tenir un aspecte similar al d'aquesta imatge:

Copiem el codi en l'esdeveniment clic de Button1
If PrintDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then PrintDocument1.PrinterSettings = PrintDialog1.PrinterSettings PrintDocument1.Print () End If
que el que fa és obrir el quadre de diàleg per seleccionar la impressora i després passa passa tota la configuració seleccionada per tal printDocument i després li diu que imprimiu. El que dispara l'esdeveniment PrintPage de printDocument.
Ara sobre l'objecte PrintDocument1 fem doble clic i enganxem el codi
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 ("Exemple de línia:" & i, New Font ("Tahoma", 10, FontStyle.Bold), Brushes.Black, 10, 20 + (i * 30)) Next
En executar el programa aquest s'imprimirà el contingut de la caixa de text com títol de la pàgina i deu línies d'exemple utilitzant diferent i furnte i grandària. El resultat es veurà similar al de la següent imatge:

més informació sobre els controls ...
PrintDialog (Component, formularis Windows Forms)
El component PrintDialog de formularis Windows Forms és un quadre de diàleg preconfigurat que s'utilitza per seleccionar una impressora, triar les pàgines que voleu imprimir i determinar altres valors de configuració relacionats amb la impressió en aplicacions basades en Windows. Utilitzeu-lo com una solució senzilla per seleccionar configuracions de la impressora o relacionades amb la impressora, en lloc de configurar un quadre de diàleg propi. Podeu permetre que els usuaris imprimeixin diverses parts dels seus documents: imprimir tot, imprimir l'interval de pàgines especificat o imprimir una selecció. Al basar-se en quadres de diàleg estàndard de Windows, crearà aplicacions la funcionalitat bàsica els és immediatament familiar als usuaris.
PrintDocument (Component, formularis Windows Forms)
El component PrintDocument de formularis Windows Forms s'utilitza per establir les propietats que descriuen què s'imprimeix i, a continuació, per imprimir el document dins d'aplicacions basades en Windows.
Informació Bitacoras.com ...
Si vols, pots fer click per valorar aquest post en Bitacoras.com. Gràcies ....
És molt bo quan volem imprimir TextBox d'un formulari sense necessitat de fer un informe.
No se si podries publicar alguna cosa sobre com fer que un rebut de compra que aquest en un reportviewer s'imprimeixi automàticament en una imprsora predeterminada sense necessitat d'obrir el pirntdialog de reportviewer.
fins després i felicitats pels vostres canvis.
REPO.PrintToPrinter (NCOPIAS, False, 0, 0)
Excel · lent! Estimo el simple. Fins i tot funcionen els parametres de pàgina com a orientació i grandària
em va ajudar molt aquest codi de fet vaig estar buscant molt per internet i em va sortir codi molt complex gràcies per cert no mes et mancat declarar la variable & però tot va sortir perfecte
Hola vaig estar buscant per moltes parts fins que vaig trobar el teu exemple i em va ajudar basatante ja que en altres pàgines havia moltissim codi i no sabia que part era la que realment s'imprimia
moltes gràcies per l'exemple
Gràcies Alex, aquesta és la idea principal d'aquest blog: que ho exemples siguin breus i clars perquè no et enriedes amb tant codi.
aca tenen el codi per a 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;
}
}
}
}
com puc saber la posició en la qual sortirà la impressió quan li dono les coordenades X i Y
Soci, Excel · lent post, clar i senzill, busqui alguna cosa o algú que expliqués les coses com havien de ser per tota la web i només això em sirvio.Hay gent que explica d'una manera complicada i amb molt codi per sentir que saben molt. 10 pt.
Gràcies i Salutacions!
Excel · lent post, Et felicito, opino el mateix que els altres, molt clar i explicatiu, no com els altres que he vist.
Tindràs alguna cosa sobre crystal report basic for visual studio 8?
He fet diversos informes i no em resulta com passar-li paràmetres des window form per aplicar certs filtres a les consultes.
gràcies
Hola, necessito saber com imprimir la informació que jo vulgui dels forms, per ejeplo els textos dels TextBox, específics i en llocs específics i que em generi una vista prèvia abans d'imprimir, no es molt d'això però vull que em ajudin amb això. gràcies!
Genera un Crystal Report amb el van trencar necessari i Envia-li els paràmetres
El teu si ets programador, si volen posar el codi d'alguna cosa no hi ha res més pràctic de posar el bàsic, ja cadascú li agrega el que vol, moltes gràcies
Et felicito per la manera senzilla i clara
amb la qual expliques.
Et demano que per favor em expliquis, com fer perquè en el PrintPage es posi el dia, nom del mes i l'any. Quin és el Codi que he de posar al PrintDocument?
Exemple:
Expedida el ¿dia? d'¿nom del més? del ¿Any?
Moltes gràcies.
De la mateixa manera com imprimeixes qualsevol variable. Per obtenir la data del sistema fa servir: Now.date.
Sort
Hola Eliseo, excel · lent exemple, molt senzill i útil, només voldria saber com puc fer per indicar-li al document les coordenades X, Y de la pàgina on vull que s'imprimeixi la informació. Això ho necessito perquè he de imprimir una sèrie de codis de barres en unes pàgines que ja porten 25 etiquetes en blanc.
Gràcies per endavant.
En DrawString tens propietats que et permeten indicar les coordenades X, I on s'imprimirà. Només és qüestió de fer algunes proves i estic segur que podràs resoldre.
Sort
Hola gràcies pel Aportació, m'ha estat molt útil, però voldria saber com imprimir el resultat d'una consulta en un DataGrid
Gràcies
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
com puc fer q el meu formulari tingui la opció de nou
Hola, he estat provant la majoria dels exemples i resulta que tots són molt bons.
Mil gràcies.
Però ara tinc un petit gran problema:
estic recuperant informació d'una taula i al listarla m'ocupa més d'una pàgina i NO trobada com passar a la següent. Agrairia un exemple d'aquests teus i em quedaria més que clar.
Treball amb VS.net 2008 i MySql.
hola que tal men però surt error en &, en el missatge d'error diu que falta declarar però em gustaria saber de quina manera ho declares, espero la teva ràpida resposta, gràcies ...
caaaaaaaaaaapooooooooooooooo ...
i per imprimir una foto, com seria?
no trobo una ona DrawImagen però des d'arxiu ...
Hola!
Molt interessant l'exemple. Jo programo en C #.
Ha alguna manera de previsualitzar això?
Salutacions!
Em sembla molt bé per imprimir els tesxtbox, amb pocs caràcters, però quan intento imprimir un camp memo, que té diverses línies, em produeix un error. Resulta que no em respecta els 80 caràcters per línia, com és al camp memo, escriu la línia fins que hi hagi un punt ia part, així que al imprimir només surt els primers 80 caràcters de cada punt ia part.
Us agrairia que em digueu com puc esmenar aquest error.
Hola, saps he intentat l'exemple inicial, però sense sort que imprimeixi, utilitzo una impressora PDF. I sempre em surt en blanc. Amb seguretat m'esta faltant especificar paràmetres o demés .. si m'ajudes si us plau?
Gràcies.
idem
Que falta per afegir a l'exemple per posar el retorn de carro.
Gràcies per endavant,
Sabeu com cal posar: 90 caràcters per línia i fer un retorn de Carro
Bé loquito ... et luciste!
Merci Beaucoup
xk apareix & com no declarat
la part & esborra, només deixa-ho amb el &
res més
Sos un capo man em re va servir, gràcies.
excel · lent però torno a preguntar hi ha alguna manera per imprimir el resultat d'una consulta en un datagridview?
Sip, txeca meva resposta alla dalt
sent com li faig per imprimir el contingut d'un DataGridView1
Estic tornant-me boig!
Tinc un document de word, al que crido per imprimir,
wdoc.print ()
El cas és que tinc per defecte la impressora banca i negra, i vull escollir, si ho faig amb PDF Creator o la de Color. He provat de tot sense cap resultat.
Algú seria tan amable de dir-me un codi per dir-li que imprimeixi el "wdoc" amb la impressora que jo esculli?
Moltes gràcies per endavant!
Hola!!
Em va agradar el post, però em va quedar una mica en dubte ...
si per exemple jo tinc 2 TextBox, i vull que imprimeixi el text del TextBox1, com faig??
Excel · lent article, la veritat en el més senzill millor. i resta és només experimentar
si en comptes d'imprimir un text vull imrimir 01:00
DataGridView com ago
Hola, estic fent un programet amb VB.net i tinc un problema a l'hora de manar imprimir.
Jo el que necessito és imprimir taules que apareixen en una base de dades, se suposa que l'usuari tria quina part de la base de dades vol imprimir, però no se com idicar que no imprimeixi tota la BD.
Si algú em pot ajudar li ho agrairia.
Salutacions!!
Hola, jo tinc una resposta i una classe bastant senzilla ...
Bones he utilitzat aquest codi per imprimir amb vidre report Report.PrintToPrinter (1, False, 0, 0)
però aquesta línia envia a imprimir a la impressora per defaul la qual aquest com a predeterminada i ocupo tenir una com predertermina i enviar a imprimir a una altra agraeixo la seva ajuda amb algun codi que li pugui donar la ruta o nom des codi a imprimir gràcies
Salutacions i gràcies per compartir els teus coneixements la veritat sóc nou en això, us veia codi m'adono decuenta el simple que pot arribar ser aprendre programació és custion de pràctica i dedicació ..
la meva pregunta és jo tinc un formulari la qual té 107 chechbox i 4 TextBox com puc fer que em imprimiu la informació pel fet que el formulari té massa contingut perquè entri en un full tipus carta A4
que és el que vull fer ara ja tinc clar que he de fer una ordre (If - Else - Then) per a poder seleccionar de la meva formulari el conetenido seleccionat però a l'hora dóna enviar-lo a imprimir com puc enviar a més del format de form i el contingut seleccionat no entenc i usant crystal report no em deixa utilitzar checkbox: S estic molt embullat no es que puc fer aqui deixo una imagene http://img826.imageshack.us/img826/2738/14397131.jpg
molt bon exemple. Però ahi imprimeixo text que jo li pas. I si necessito imprimir un document que tinc guardat a l'ordinador? L'assumpte és el següent: Necessito imprimir un document que tinc guardat a C: \ \. El problema és que he de setearle primer el rang de pàgines a imprimir (xq no necessito tot el document) i després imprimir-lo. Què puc fer??
la pregunta dóna lloc a moltes respostes i totes depenen del tipus de fitxer que vulguis imprimir, atès que no és el mateix un arxiu de text que un full d'Excel o un fitxer d'imatge. Què arxiu és el que vols imprimir?
Exelente exemple l'he posat en marxa i molt fàcil és.
només em queda diversos dubtes la principal és com indicar al procediment que ha de fer salt de línia. caundo un text no arriba en una línia sinó que reequiere 2 o mes?
gràcies
Hola, tinc un problema en el codi de printDocument ja que "amp" m'assenyala error i em diu que no està declarada ... si són tan amables de solucionar-me el problema ... gràcies
Això que diu '&' es refereix només a que és un amperson el que hi ha. Aquesta línia de codi està concatenant text. Només deixa-ho com '&' i llest!!
No se si ja ho havies descobert abans, però tot i així et deixo la resposta.
Salutacions!
Gràcies Angelica. Era un error de l'editor HTML que havia modificat el codi. Ja ho arregli!
Molt bon exemple per imprimir utilitzant printdocument i printdialog, però, amb aquestes instruccions com salt de pàgina? en utilitzar e.hasmorepage em fa un recompte infinit de pàgines.
Gràcies
aquesta molt pare i senzill ja que molts altres expressen demaciado en codi em va ser de gran ajuda .... gràcies
Bonissim .... Moltes gràcies per la vostra ajuda ..
Hola voldria que aquest botó em imprimir un informe! ? com podria fer-ho per
favor
revisa aquests posts: http://www.solovb.net/index.php/tag/reportview/
excel · lent em va ajudar molt ja portava com 3 dies buscant això gràcies amic!
Tinc una consulta que l'he buscat per tot arreu i no tinc resposta encara.
la meva consulta és la següent:
tinc un windows form en vb.net i necessito imprimir-lo, el meu problema és que en ser tan extens (tinc habilitada la propietat en Autoscroll del formulari), em imprimeix només el que tinc en pantalla en aquell moment, no així la resta del formulari.
ús aquest codi per imprimir:
'Imprimir formulari
Private Sub Btnimprimir_Click (ByVal sender As System.Object, ByVal i 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 es podrà imprimir formularis d'aquestes característiques.
bo des de ja moltes gràcies per endavant. -
Hola, excel · lent informació, moltes gràcies, sóc super novell en això i no es una altra forma d'imprimir i lluiti alguna cosa amb la idea de coordenades, i per ajudar-me vaig imprimir un full quadriculat, aquí els deixo el codi per si a algun novell com jo li serveix:
************************************************** ********************************
'Això és per a imprimir en paper una quadricula espaiada 50 píxels amb rètols que t'ajuda per ubicar el que vulguis imprimir
Private Sub Button1_Click (ByVal sender As System.Object, ByVal i As System.EventArgs) Handles Button1.Click
PrintDocument1.Print ()
End Sub
Private Sub PrintDocument1_PrintPage (ByVal sender As System.Object, ByVal i As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
Dim cyanPen As New Pen (Color.Cyan, 1)
Dim i As Integer
For i = 1 To 23
e.Graphics.DrawLine (cyanPen, 1, 1 + (i * 50), 850, 1 + (i * 50))
e.Graphics.DrawLine (cyanPen2, 1 + (i * 50), 1, 1 + (i * 50), 1150)
e.Graphics.DrawString ((i * 50), New Font ("Verdana", 8, FontStyle.Bold), Brushes.Red, 40, -6 + (i * 50))
e.Graphics.DrawString ((i * 50), New Font ("Verdana", 8, FontStyle.Bold), Brushes.Red, -10 + (i * 50), 44)
e.Graphics.DrawString ((i * 50), New Font ("Verdana", 8, FontStyle.Bold), Brushes.Red, 390, -6 + (i * 50))
e.Graphics.DrawString ((i * 50), New Font ("Verdana", 8, FontStyle.Bold), Brushes.Red, -10 + (i * 50), 544)
Next
End Sub
************************************************** ********************************
Gràcies! Em va ajudar molt
Good Day ...
Com estan disculpeu però em podrien ajudar ...
com puc imprimir una imatge carregada en un label .....? o en un PictureBox .....? per endavant els agradesco l'ajuda ...
Utilitza el mètode DrawImage en lloc de DrawString
Excel · lent. Però, com es pot imprimir més d'1 pàgina?
com visualitzo això abans de ser imprès usant PrintToPreview
gràcies
Graicas pel codi ja que és molt fàcil enviar a imprimir sempre que tota la informació que es requereixi imprimir sigui en un sol full, ja que el que jo requereixo és imprimir en més d'un full ja que el que comandament a imprimir és el contingut d'un listview i són un bon registres i usant aquest codi només s'imprimeix una sola pàgina i no se si algú sap com fer per al salt de pàgina i s'imprimeixi tot la informació que vull de davant mà moltes gràcies