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.
Bé com ja recorregut tot el pal i ningú va respondre sobre com se li fa per a imprimir en més fulles, em vaig donar a la tasca a investigar per altres pagines i em vaig trobar amb un codi però aquesta medi complex per enterlo fàcilment així que ho modique a l'exemple que s'està manejant aquí o sigui que aquí aquesta el meu granet de sorra i espero i ho entenguin okas
'Aquesta variable ha de ser publica
Dim línia As Integer = 1
Private Sub PrintDocument1_PrintPage (ByVal sender As System.Object, ByVal i As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
'Definim el tipus de font i de més
Dim Font As New Font ("arial", 10)
'Definim en què posició es va iniciar la impressió
Dim posició As Integer = 20
'Comptador de línies que es van imprimint
Dim lineaimpresa As Integer = 0
'Variable per veure quan es va fer un salt de pàgina
Dim salto_pagina As Boolean = False
'Variable per designar quants línies voleu imprimir per full
Dim NroLineasPagina As Integer = 70
For i = línia To 150
e.Graphics.DrawString ("Exemple de línia:" & línia, Font, Brushes.Black, 10, posició)
posició + = 15
línia + = 1
lineaimpresa + = 1
If lineaimpresa = NroLineasPagina Then
salto_pagina = True
Exit For
End If
Next
If salto_pagina = True Then
e.HasMorePages = True
Else
e.HasMorePages = False
End If
End Sub
Bé espero i els serveixi i ho puguin adequar als seus necessitat okas byes
Gràcies per col · laborar.
De res és només aportar amb alguna cosa que a molts ens dóna aquest tipus de pàgines una ajuda i com agredicimiento doncs és aportar amb alguna cosa
com puc imprimir
Imports System.IO
Public Class frmDesCaratula
Private stringToPrint As String
Private Sub frmDesCaratula_Load (sender As System.Object, i As System.EventArgs) Handles MyBase.Load
Me.MdiParent = mdiPrincipal
End Sub
Private Sub Button1_Click (sender As System.Object, i As System.EventArgs) Handles Button1.Click
If ptdConfiguracion.ShowDialog = Windows.Forms.DialogResult.OK Then
ptdDocumento.PrinterSettings = ptdConfiguracion.PrinterSettings
ptdDocumento.Print ()
End If
End Sub
Private Sub PrintDocument1_PrintPage (sender As System.Object, i As System.Drawing.Printing.PrintPageEventArgs) Handles ptdDocumento.PrintPage
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
'----- IMPRESSIÓ DE TOT UN DOCUMENT
'Dim charactersOnPage As Integer = 0
'Dim linesPerPage As Integer = 0
'Sets the value of charactersOnPage to the number of characters
'Of stringToPrint that will fit within the bounds of the page.
'E.Graphics.MeasureString (stringToPrint, Me.Font, e.MarginBounds.Size, _
'StringFormat.GenericTypographic, charactersOnPage, linesPerPage)
'Draws the string within the bounds of the page
'E.Graphics.DrawString (stringToPrint, Me.Font, Brushes.Black, _
'E.MarginBounds, StringFormat.GenericTypographic)
'Remove the portion of the string that ha rebut una printed.
'StringToPrint = stringToPrint.Substring (charactersOnPage)
'Check to see if more pages are to be printed.
'E.HasMorePages = stringToPrint.Length> 0
End Sub
Private Sub Button2_Click (sender As System.Object, i As System.EventArgs) Handles Button2.Click
ReadFile ()
ptdDocumento.Print ()
End Sub
Private Sub ReadFile ()
Dim docName As String = "index.html"
Dim DocPath As String = "G: \"
ptdDocumento.DocumentName = docName
Dim stream As New FileStream (DocPath + docName, FileMode.Open)
Try
Dim reader As New StreamReader (stream)
Try
stringToPrint = reader.ReadToEnd ()
Finally
reader.Dispose ()
End Try
Finally
stream.Dispose ()
End Try
End Sub
Private Sub Button3_Click (sender As System.Object, i As System.EventArgs) Handles Button3.Click
ppdVista.Document = ptdDocumento
ppdVista.ShowDialog ()
End Sub
End Class
Aquest em va funcionar a mi, necessites un texbox: TextBox1
printdocument: ptdDocumento
printpreviewcontrol: ppdVista
printdialog: ptdConfiguracion
Interessant article però pregunto com actuaríem en entorns més professionals com la impressió de tiquets, rebuts, factures o fins i tot xecs controlant si la impressora està en línia o té paper o en faig de la impreison es va detindre la impressió per algun error.
Saps alguna cosa hacerca del que et esmento ja que he intentat moltes vegades això i sense èxit no he trobat res per resoldre aquesta problemàtica.
Salutacions.
Atte. Kevin Ramirez
Bon dia, volia saber si tenies algun tutorial per poder imprimir el contingut d'un datagridview perquè tot el que trobo a internet és molt codi i res eh pogut fer funcionar!.
Et agrairia molt si tinguessis informació sobre això.
Salutacions
Benvolguts, jo porto més de 10 anys programant en Microsoft, vaig passar per VB6 i ara estic amb VS2010.
Fins ara no he trobat cap eina més flexible que PrintDocument per fer informes, no hi ha res que no hagi pogut fer.
Si tenen dubtes poden contactar.
salutacions
Bon dia Manuel, em passaries un mail de contacte per poder estar més en línia i així donar-me una mà?
Moltes gràcies
et deixo el meu
francocsanchez@gmail.com
M'és molt necessari: T
Bé Manuel se't agredece molt per la resposta m'agradaria que em manaràs un mail o em facilitaràs algun contacte ja que porto uns sis mesos en això.
I crec que una orientació d'algun professional no em vindria malament.
Et deixo el meu mail.
kevinramirez92@hotmail.com
Salutacions.
Atte. Kevin Ramirez.
Manuel Necessito ajuda de com imprimir el contingut d'un datagridview!.
Em podries donar un cop de mà?
francocsanchez@gmail.com
Salutacions.
Q tal est és el meu mail de vegades necessito ajuda just per a una impressió automàtica en visual basic 2010.
Luis_Cepedaf@hotmail.com
Alguna llibreria especifica per poder carregar els valors dels TextBox en un document Excel ja configurada al dimensions d'acord a la immpresora.
Gràcies
Hola disculpin necessito ajuda urgent el que passa és que voldria saber com puc imprimir el contingut d un panell en el qual tinc una imatge (mes gran que el panell per k maneig scrollbar) i uns quants TextBox ... tot a partir d'un PrintDocument. Hola disculpin necessito ajuda urgent el que passa és que voldria saber com puc imprimir el contingut d un panell en el qual tinc una imatge (mes gran que el panell per k maneig scrollbar) i uns quants TextBox ... tot a partir d'un PrintDocument. Hola disculpin necessito ajuda urgent el que passa és que voldria saber com puc imprimir el contingut d un panell en el qual tinc una imatge (mes gran que el panell per k maneig scrollbar) i uns quants TextBox ... tot a partir d'un PrintDocument.
moltes gràcies, primer exemple senzill que funciona
Moltíssimes gràcies. Claredat i rigor. Fantàstic. Ara em queda fer els cicles i filtres necessaris per imprimir els registres d'una base de dades, però és que això mateix que tan clarament has exposat l'he trobat en altres llocs molt confusament exposat. Has de ser un professor sensacional.
si em va servir el teu exemple només tinc un dubte com puc de cirle alprograma imprimir amb la posició indicada meu correu és yack7raro@gmail.com per si llacuna poersona sap com