PrintDocument???

09/12/2005 - 00:51 por Valdov | Informe spam
Con el printdocument es posible enviar a impresion algun archivo de texto o
bien un xls o .doc?


Valdov
Omar Valdovino

Preguntas similare

Leer las respuestas

#1 Leonardo
09/12/2005 - 10:03 | Informe spam
Tienes que crear una clase que herede de PrintDocument (Ej. MyPrintDocument)
Sobre esta clase declarar alguna variable pública correspondiente al objeto
a imprimir (doc.Texto, xls...)
Declarar variables privadas para el control de paginación (PageNumber,
Espaciado, LíneasPorPagina)

En Protected Overrides Sub OnBeginPrint..
Abrir archivo, Preparar Hoja de cálculo...
Inicializar variables paginación

En Protected Overrides Sub OnPrintPage
Manejar apropiadamente las variables de paginación y dibujar mediante
e.graphics (solo una página cada vez)
Si hay más información por imprimir
HasMorePages=True
Else
Liberar recursos (Cerrar stream, liberar hoja de cálculo, etc)

La liberación de recursos la puedes hacer también en OnEndPrint para mayor
claridad.

En el botón imprimir:

Dim Pd as new MyPrintDocument
Pd.ObjectToPrint = MyXlsDoc
Pra impresión directa:
Pd.Print
Para Preview
Dim Dlg as New PrintPreviewDialog
Dlg.Document=Pd
Dlg.ShowDialog

Revisa la documentación: PrintDocument (clase), ejemplos

"Valdov" escribió en el mensaje
news:OWtDfGF$
Con el printdocument es posible enviar a impresion algun archivo de texto
o bien un xls o .doc?


Valdov
Omar Valdovino



Respuesta Responder a este mensaje
#2 Valdov
09/12/2005 - 17:41 | Informe spam
Gracias Leonardo, lo reviso y les cuento como me fue.


Valdov
Omar Valdovino


"Leonardo" escribió en el mensaje
news:
Tienes que crear una clase que herede de PrintDocument (Ej.
MyPrintDocument)
Sobre esta clase declarar alguna variable pública correspondiente al
objeto a imprimir (doc.Texto, xls...)
Declarar variables privadas para el control de paginación (PageNumber,
Espaciado, LíneasPorPagina)

En Protected Overrides Sub OnBeginPrint..
Abrir archivo, Preparar Hoja de cálculo...
Inicializar variables paginación

En Protected Overrides Sub OnPrintPage
Manejar apropiadamente las variables de paginación y dibujar mediante
e.graphics (solo una página cada vez)
Si hay más información por imprimir
HasMorePages=True
Else
Liberar recursos (Cerrar stream, liberar hoja de cálculo, etc)

La liberación de recursos la puedes hacer también en OnEndPrint para mayor
claridad.

En el botón imprimir:

Dim Pd as new MyPrintDocument
Pd.ObjectToPrint = MyXlsDoc
Pra impresión directa:
Pd.Print
Para Preview
Dim Dlg as New PrintPreviewDialog
Dlg.Document=Pd
Dlg.ShowDialog

Revisa la documentación: PrintDocument (clase), ejemplos

"Valdov" escribió en el mensaje
news:OWtDfGF$
Con el printdocument es posible enviar a impresion algun archivo de texto
o bien un xls o .doc?


Valdov
Omar Valdovino







Respuesta Responder a este mensaje
#3 Mauricio López [ProNet]
14/12/2005 - 16:50 | Informe spam
Leonardo:

¡Muchas gracias por tus aclaraciones!


Saludos!

Mauricio López
www.pronet.com.uy
Desarrollador 2 estrellas 2005
Maldonado - Uruguay
-
El código que muestras, abre el archivo en Imprimir_click, lo cual no me
parece compatible con el botón "Print" del dialogo PrintPreviewDialog.
Cuando se pulsa el botón Print en la vista previa, se lanza una nueva
instancia de PrintDocument que repetirá todo el proceso de listado para
enviarlo a la impresora. El fichero debería ser abierto en
Doc_BeginPrint.

La opción de crear una clase derivada de PrintDocument permite que un
mismo listado pueda ser ejecutado desde distintos forms e incluso
incluir el código del mismo en distintos proyectos al encapsular las
variables asociadas al listado en la clase.

Estoy totalmente de acuerdo contigo en el método usado:
"Private WithEvents doc As New PrintDocument()"
para informes sencillos cuya información depende totalmente del
formulario, pero cuando tratamos con recursos que hay que inicializar y
liberar (stream), considero más apropiado usar una clase independiente.

Como curiosidad y sin ánimo de presentarlo como método apropiado de
trabajo muestro como evitar que el botón "print" haga el trabajo
habitual usando Reflection.

Private Const bndflags As BindingFlags = BindingFlags.Instance Or
BindingFlags.NonPublic Or BindingFlags.Public
'Toolbar y boton imprimir
Private pToolBar As ToolBar
Private NewBtn As New ToolBarButton 'Sustituyo Botón Imprimir

'Sustituir En Toolbar el botón Imprimir por una copia privada
pToolBar DirectCast(GetType(PrintPreviewDialog).GetField("toolBar1",
bndflags).GetValue(Me), ToolBar)
Dim OldBtn As ToolBarButton = pToolBar.Buttons(0)
NewBtn.ImageIndex = OldBtn.ImageIndex
NewBtn.ToolTipText = OldBtn.ToolTipText
pToolBar.Buttons(0) = NewBtn
AddHandler pToolBar.ButtonClick, AddressOf ToolBarButton_Click

Private Sub ToolBarButton_Click(ByVal sender As System.Object, ByVal
e As System.Windows.Forms.ToolBarButtonClickEventArgs)
If e.Button Is NewBtn Then 'Botón imprimir
.
End If
End Sub

"Mauricio López [ProNet]" escribió en
el mensaje news:ee5Fzjk$
Valdov:

A ver, quizá esto te pueda servir.

Imports System.Drawing.Printing
Imports System.IO

Public Class Test_Print
Inherits System.Windows.Forms.Form

'Código generado por el Diseñador de Windows Forms

Private fuente As Font
Private cadena As StreamReader
Private WithEvents doc As New PrintDocument()

Private Sub Imprimir_Click(ByVal sender As System.Object, ByVal e
As System.EventArgs) Handles Imprimir.Click
Dim vistaPrevia As New PrintPreviewDialog()

Try
'Si el archivo existe genera una excepción.
cadena = New StreamReader("C:\CualquierArchivo.txt")
Try
fuente = New Font("Arial", 10)
'Asigna el documento.
vistaPrevia.Document = doc
vistaPrevia.ShowDialog()
Finally
cadena.Close()
End Try
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try

End Sub

Private Sub doc_PrintPage(ByVal sender As Object, ByVal e As
System.Drawing.Printing.PrintPageEventArgs) Handles doc.PrintPage
Dim lineasPorPagina As Single
Dim posY As Single
Dim contador As Integer
Dim margenIzq As Single
Dim margenSup As Single
Dim linea As String

margenIzq = e.MarginBounds.Left
margenSup = e.MarginBounds.Top

'Calcula el número de líneas por página.
lineasPorPagina = e.MarginBounds.Height /
fuente.GetHeight(e.Graphics)

'Imprime cada una de las líneas del archivo.
Do While contador < lineasPorPagina
linea = cadena.ReadLine
If linea Is Nothing Then
Exit Do
End If
'Calcula el comienzo de la próxima línea, la cual será
igual al desplazamiento ya utilizado, más el márgen superior.
posy=margensup + (contador * fuente.GetHeight(e.Graphics)

'Imprime el texto
e.Graphics.DrawString(linea, fuente, Brushes.Black,
margenIzq, posY, New StringFormat())

'Se incremente por cada línea.
contador += 1
Loop

'Si existen más líneas a imprimir lo indica.
If linea Is Nothing Then
e.HasMorePages = False
Else
e.HasMorePages = True
End If
End Sub
End Class


Saludos!

Mauricio López
www.pronet.com.uy
Desarrollador 2 estrellas 2005
Maldonado - Uruguay
-
Con el printdocument es posible enviar a impresion algun archivo de
texto o
bien un xls o .doc?


Valdov
Omar Valdovino
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida