Resumen Imprimir en .Net

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



Resumen Resumen

Visual Basic Página de Visual Basic

Página principal Página principal

www.jrubi.com