Impresión multipáginas en VB.NET

10/12/2004 - 16:54 por Amadeus | Informe spam
En los manuales de Microsoft Press, y en la ayuda en
línea, siempre asumen que se desea imprimir el contenido
de un archivo y se gastan muchas páginas en explicar como
imprimir usando un STREAM. Bien, y si yo no deseo
imprimir el contenido de un archivo sino simples
sentencias y resultados en posiciones fijas en las
páginas? Mi problema se agrava cuando trato de insertar
un salto de páginas (supuestamente declarando
e.HasMorePages= True en el .Printpage handler). La
página no me salta y los nuevos datos sobreesciben a los
anteriores. ¿Puede alguien explicarme como escribir algo
en una página y luego escribir algo más en la página
siguiente usando el mismo procedure?

Preguntas similare

Leer las respuestas

#1 Leonardo Azpurua
12/12/2004 - 14:23 | Informe spam
"Amadeus" escribió en el mensaje
news:137f01c4ded0$968ec7c0$
En los manuales de Microsoft Press, y en la ayuda en
línea, siempre asumen que se desea imprimir el contenido
de un archivo y se gastan muchas páginas en explicar como
imprimir usando un STREAM. Bien, y si yo no deseo
imprimir el contenido de un archivo sino simples
sentencias y resultados en posiciones fijas en las
páginas? Mi problema se agrava cuando trato de insertar
un salto de páginas (supuestamente declarando
e.HasMorePages= True en el .Printpage handler). La
página no me salta y los nuevos datos sobreesciben a los
anteriores. ¿Puede alguien explicarme como escribir algo
en una página y luego escribir algo más en la página
siguiente usando el mismo procedure?


Hola:

Con los mecanismos intrínsecos de .Net, simplemente no puedes.
Pero tampoco encuentro cual la complicación.
Si tienes una secuencia de instrucciones:

a,b,c,d,...,n,<SALTO_PAGINA>,o,...,y,z

Lo único que necesitas es, en la clase donde realizas la impresión, colocar
un contador de paginas que inicias a 1.
Y en Printpage:

If Pagina = 1 Then
a,b,c,d...n
HasMorePages = True
Else
o,...,y,z
HasMorePages = False
End If

Salud!
Respuesta Responder a este mensaje
#2 Anonimo
12/12/2004 - 16:05 | Informe spam
Leonardo:
Es que a lo mejor no este entendiendo bien la forma de
impresion en VB.NET. En VB6 el comando Printer.NewPage
generaba automáticamente una nueva página y podias
resetear CurrentX y CurrentY a cero y comenzar la
impresion en la nueva página. Es que no hay nada similar
en VB.NET? O a lo mejor estoy despistado en algo?

Amadeus
Respuesta Responder a este mensaje
#3 Leonardo Azpurua
12/12/2004 - 19:31 | Informe spam
escribió en el mensaje
news:175a01c4e05b$f86aefa0$
Leonardo:
Es que a lo mejor no este entendiendo bien la forma de
impresion en VB.NET. En VB6 el comando Printer.NewPage
generaba automáticamente una nueva página y podias
resetear CurrentX y CurrentY a cero y comenzar la
impresion en la nueva página. Es que no hay nada similar
en VB.NET? O a lo mejor estoy despistado en algo?

Amadeus
-

Hola.

Todavia estoy lidiando con los conceptos básicos de VB.Net.

Pero lo del printer no me quedo mas remedio que entenderlo :-)

En VB6 podiamos escribir CurrentX = 0: CurrentY = 0 y luego Printer.Print
tantas veces como quisieramos. Si habia un salto de página y no nos dabamos
cuenta, la linea simplemente seguía en la página siguiente. Y podíamos
enviar NewPage cuando quisieramos forzar un salto de pagina.

Aqui es distinto. El mecanismo es más o menos el siguiente:

Cuando invocamos el metodo Print de un objeto PrintDocument, éste realiza su
inicialización, y emite el evento PrintPage.

Nuestro manejador del evento PrintPage recibe un parametro (e) del tipo
PrintPageEventArgs.

El parametro e, expone dos propiedades que me interesan: HasMorePages (que
debemos colocar a True si estamos imprimiendo la ultima pagina, o a False si
queremos agregar paginas) y el objeto Graphics, una referencia a un
dispositivo abstracto GDI+ (en nuestro caso, el printer físico).

No he tenido que imprimir graficos aun, pero debe ser facil: consulta
System.Drawing.Graphics en la ayuda. Pero para escribir texto utilizas
DrawString (tiene multiples firmas). Yo me he manejado hasta ahora con:
e.Graphics.DrawString(sTexto, font, Brushes.Black, posX, posY), que
equivale, en terminos de VB6 a:
Printer.CurrentX = posX: Printer.CurrentY=posY
Set Printer.Font = Font
Printer.ForeColor = vbBlack
Printer.Print sTexto;

si quieres saltar de linea, debes calcular el alto de linea requerido, y
sumarselo a posY para la siguiente linea.

En general:

Inicias tus variables para la impresion
Ejecutas PrintDocument.Print

en PrintPage:
formateas la siguiente pagina de tu documento sobre e.Graphics
actualizas tus variables de control de impresion
Si hay mas paginas, asignas True a e.HasMorePages; de lo contrario, le
asignas False

Salud!
Respuesta Responder a este mensaje
#4 Leonardo Azpurua
12/12/2004 - 19:48 | Informe spam
"Leonardo Azpurua" <l e o n a r d o (arroba) m v p s (punto) o r g> escribió
en el mensaje news:
Nuestro manejador del evento PrintPage recibe un parametro (e) del tipo
PrintPageEventArgs.

El parametro e, expone dos propiedades que me interesan: HasMorePages (que
debemos colocar a True si estamos imprimiendo la ultima pagina, o a False
si queremos agregar paginas) y el objeto Graphics, una referencia a un
dispositivo abstracto GDI+ (en nuestro caso, el printer físico).



Es al revés: True si hay mas paginas o false si ésta es la ultima.

Estoy frito!
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida