Mensaje enviado por "Edgar" <msragde@hotmail.com> el 14/01/2003
Hola vkmgl ¡Que nombre ;)!
Usa el [System.Drawing.Printing] este tiene toda la funcionalidad de Printer mas varios extras, como puedes usarlo ;)
Colocas
Imports System.Drawing.Printing
Antes de tu
Public Class formX
Esto solo para evitarnos la lata de colocar la ruta completa del objeto cada que lo necesitemos tanto propiedades como variables de entorno.
Se declara
Private WithEvents prnDocumento As New PrintDocument()
Lo puedes utilizar con eventos si lo que quieres es controlar la impresión por pero si solo necesitas mandar los datos puedes hacer las instrucciones desde otro modulo o sub-rutina
¿Cómo le haremos para pasarle los parámetros de que quieres imprimir?
Private Sub pdoc_PrintPage(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles prnDocumento.PrintPage
' Ya sabres que se declare con eventos esto es para que cada que mandes la pagina este sea tomado desde
' donde lo necesites, en otras palabras se actualiza cada que lo mandas llamar
Static intLetras As Int32
Dim font As New font("Microsoft Sans Serif", 24)
'Una opcion es cambiarle timpo de letra tu sabres que haces con esto
Dim intPrintAreaHeight, intPrintAreaWidth, marginLeft, marginTop As Int32
'Bueno las variables de costumbre para redimensionar las hojas y esas cosas
'Ahora si empieza lo bueno. &&&
With prnDocumento.DefaultPageSettings
' Asignar a las variables la configuración de la pagina
' Por si antes no lo hacias te comento que con esto te ahorras dolores de cabeza para ajustar documentos intPrintAreaHeight = .PaperSize.Height - .Margins.Top - .Margins.Bottom
intPrintAreaWidth = .PaperSize.Width - .Margins.Left - .Margins.Right
marginLeft = .Margins.Left ' Cordenada X
marginTop = .Margins.Top ' Cordenada Y
End With
'Aquí tienes la parte de cambiar la presentación del documento
If prnDocumento.DefaultPageSettings.Landscape Then
Dim intTemp As Int32
intTemp = intPrintAreaHeight
intPrintAreaHeight = intPrintAreaWidth
intPrintAreaWidth = intTemp
End If
'le toca el turno a la checada de lineas a imprimir con respecto a la letra
'No todo cabe en una hoja por lo que hacemos trapa calculando antes ;)
Dim intLineCount As Int32 = CInt(intPrintAreaHeight / font.Height)
'Calcular le area de trabajo es una Buena practica esto para saber de donde a donde
'Podemos imprimir ;)
Dim rectPrintingArea As New RectangleF(marginLeft, marginTop, intPrintAreaWidth, intPrintAreaHeight)
'Se ve Raro pero no es mas que el formato de nuestro documento
Dim fmtDocumento As New StringFormat(StringFormatFlags.LineLimit)
'Bueno pues ahora todo lo que se calculo antes y se hizo con lo que se imprimirá
'pues se asignará al texto que deseamos enviar
Dim intLinesFilled, intCharsFitted As Int32
e.Graphics.MeasureString(Mid( Imprimiendo por 1ª VEZ & txtOtro.Text, intCurrentChar + 1), font, _
New SizeF(intPrintAreaWidth, intPrintAreaHeight), fmt, _
intCharsFitted, intLinesFilled)
' Te preguntaras de donde salio e pues bien si checas la primer linea de esta sub
' pues aparece como argumentos del proceso, esto existe en todos los eventos y es variable
' por cada objeto
' Asignar el diseño de la impresión
e.Graphics.DrawString(Mid( Imprimiendo por 1ª VEZ & txtOtro.Text, intCurrentChar + 1), font, _
Brushes.Black, rectPrintingArea, fmt)
' Bueno como te daras cuenta en varias ocaciones se usa intCurrentChar
' pues no es mas que la variable estatica que declaramos esto es porque si lo que quieres imprimir
' es muy grande pues tendra que dividirse en paginas y como ya dije hace rato hacemos trampa para que
' pase pag. X pa. y este es el contador de caracteres por pag.
intCurrentChar += intCharsFitted
' Ok en caso de que termine el documento
' Pues tiene que ser menor o igual que lo que traemos arrastrando
' bien entonces checamos los datos y si ese es el caso terminamos la rutina de este modo.
If intCurrentChar < txtDocument.Text.Length Then
e.HasMorePages = True
Else
e.HasMorePages = False
'No sin antes regresar a cero intCurrentChar nuetro contador
intCurrentChar = 0
End If
'Esto sucede cada que solicitamos el documento, vista previa o impresión
End Sub
¿Cómo mandar una configuración de la pagina? Ya veras que hace ;)
Private Sub CnfPagina()
Dim prnSetup As New PageSetupDialog()
prnSetup.Document = prnDocumento
prnSetup.PageSettings = prnDocumento.DefaultPageSettings
If prnSetup.ShowDialog = DialogResult.OK Then
prnDocumento.DefaultPageSettings = prnSetup.PageSettings
End If
End Sub
¿Cómo Mandar una vista previa de lo que quieres imprimir?
Private Sub Previo
Dim prnPreview As New PrintPreviewDialog()
Try ' Por si ni lo sabes esta es la forma de cachar los errores ;)
prnPreview.Document = prnDocumento
prnPreview.ShowDialog()
Catch exp As Exception ' Control de las excepciones ;)
msgbox("Chin creo que paso algo Upps )
End Try
End Sub
¿Cómo mandar imprimir y presentar una caja de dialogo para seleccionar propiedades de la impresora?
Private Sub Imprimir
Dim prnDialog As New PrintDialog()
prnDialog.Document = prnDocumento
If prnDialog.ShowDialog = DialogResult.OK Then
prnDocumento.Print()
End If
End Sub
Ok Fin de mi aportación, Entonces ya lo tienes suerte con tu reporte creo que con esto tienes un norte de cómo se hace en cuanto a mandar imágenes no lo he ocupado de modo que ya se a quien le toca sacar y regresarme esa parte del código
Atentamente,
Ragde Pazarán
PD: Espero me envies el código para imprimir imágenes ;)
-----Mensaje original-----
De: vkmgl [mailto:vkmgl@yahoo.com]
Enviado el: lunes, 13 de enero de 2003 12:45
Para: visualbasic-esp@yahoogroups.com
Asunto: (VB-ESP) Ayuda para poder imprimir
Disculpen las molestias pero alguien sabe como imprimir el texto contenido en un cuadro de texto y como se le hace para utilizar el Printer.Print, o mejor dicho que instruccion se utiliza en ves del Printer por que en el visual .net no me la reconoce y no se como establecer los valores de la impresora o como enviar algo a la impresora que no sea texto por ejemplo la copia de la imagen de un objeto de un formulario o el contenido de un MHSFlexGrig por que hasta ahorita casi todo lo hacia en el visual studio anterior y con el printer, pero con este otro no le doy como espero me puedan
ayudar con esto por favor o si saben de alguna pagina donde tengan ejemplos
como lo que estoy pidiendo pues tambien se los agradeceria mucho.
Gracias Viktor