Foros del Web » Programación para mayores de 30 ;) » .NET »

imprimir varias páginas con el printdocument en vb.net

Estas en el tema de imprimir varias páginas con el printdocument en vb.net en el foro de .NET en Foros del Web. Hola foros como estan aqui nuevamente pues necesito imprimir varias paginas en print document pasa que tengo 715 registro y lo paso con un FOR ...
  #1 (permalink)  
Antiguo 03/02/2011, 13:40
Avatar de CarmenRocio  
Fecha de Ingreso: junio-2010
Ubicación: Perú - Lima - Chorrillos
Mensajes: 116
Antigüedad: 14 años, 5 meses
Puntos: 8
Información imprimir varias páginas con el printdocument en vb.net

Hola foros como estan aqui nuevamente pues necesito imprimir varias paginas en print document pasa que tengo 715 registro y lo paso con un FOR pero en el print document cada registro se chanca encima uno del otro y me dijeron que utilizara el


e.HasMorePages = True


pero igual se sigue chancando la info si saben sobre esto les agradeceria mucho .
GRACIAS.
  #2 (permalink)  
Antiguo 03/02/2011, 13:47
Avatar de Aquaventus  
Fecha de Ingreso: junio-2010
Ubicación: Lima-Peru , En el alba de la naturaleza
Mensajes: 2.105
Antigüedad: 14 años, 4 meses
Puntos: 267
Respuesta: imprimir varias páginas con el printdocument en vb.net

postea tu code carmen, talvez asi podamos identificador el posible error que puedas estar cometiendo. Saludos!
__________________
Internet es tener todo el conocimiento global a tu disposición.
Desarrollo de Software - Ejemplos .Net
  #3 (permalink)  
Antiguo 03/02/2011, 14:29
Avatar de CarmenRocio  
Fecha de Ingreso: junio-2010
Ubicación: Perú - Lima - Chorrillos
Mensajes: 116
Antigüedad: 14 años, 5 meses
Puntos: 8
Información Respuesta: imprimir varias páginas con el printdocument en vb.net

Primero lo que hago por el momento estoy llenando solo 2 registro mejor dicho dos trabajadores y lo que hago primero es click en el boton vista peliminar:
Private Sub btnPreview_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPreview.Click
imprimir(True)
End Sub


Luego la función imprimir es esta:como es vista previa le doy true bueno es asi como estube analizando ya que empece de cero con esto y tengo ya dos días nuriendome:

Private Sub imprimir(ByVal esPreview As Boolean)
' imprimir o mostrar el PrintPreview
If prtSettings Is Nothing Then
prtSettings = New PrinterSettings
End If
If chkSelAntes.Checked Then
If seleccionarImpresora() = False Then Return
End If
If prtDoc Is Nothing Then
prtDoc = New PrintDocument
lineaActual = 0
prtDoc.PrinterSettings = prtSettings
Dim TamañoPersonal As Printing.PaperSize
Dim Ancho As Short
Dim Alto As Short
Try
Ancho = Short.Parse("1600")
Alto = Short.Parse("655")
TamañoPersonal = New Printing.PaperSize("imp", Ancho, Alto)
prtDoc.DefaultPageSettings.PaperSize = TamañoPersonal
prtDoc.OriginAtMargins = True
Catch ex As Exception
MessageBox.Show(ex.Message, ex.Source, MessageBoxButtons.OK)
End Try
AddHandler prtDoc.PrintPage, AddressOf prt_PrintPage
End If
If esPreview Then
Dim prtPrev As New PrintPreviewDialog
prtPrev.Document = prtDoc
prtPrev.ShowDialog()
Else
prtDoc.Print()
End If
End Sub


No olvidar que este código lo saque del guille pero lo he modificado a mis requerimientos por otro lado la funcion prt_PrintPage

Private Sub prt_PrintPage(ByVal sender As Object, ByVal e As PrintPageEventArgs)
' Este evento se produce cada vez que se va a imprimir una página
Dim printFont As System.Drawing.Font
printFont = prtFont

'Datos es una lista generica de mi base de datos trabajadores

For Each info As BoInfo In Datos
nContador += 1
e.Graphics.DrawRectangle(New Pen(Color.Red, 1), -75, -75, 1585, 639)

e.Graphics.DrawString("Código", printFont, Brushes.Black, 170, 60)
e.Graphics.DrawString(info.codigo, printFont, Brushes.Black, 460, 60)
Next
If nContador < Datos.Count Then
e.HasMorePages = True ' Todavia faltan mas paginas
End If
End Sub


ya este seria el código primero pasa por el primer trabajados luego el segundo y se chanca encima pero yo quiero que se imprima el segundo cliente en otra pagina ya que no solo es su código es un monto de registros que tengo que imprimir espero me ayudes etube bucando en la web pero solo hablan del

e.HasMorePages = True
  #4 (permalink)  
Antiguo 03/02/2011, 14:35
Avatar de CarmenRocio  
Fecha de Ingreso: junio-2010
Ubicación: Perú - Lima - Chorrillos
Mensajes: 116
Antigüedad: 14 años, 5 meses
Puntos: 8
Respuesta: imprimir varias páginas con el printdocument en vb.net

Tambien se puede utilizar el e.HasMorePages = Flase pero cuando lo utilizo empiezo a recorrer hace un bucle indefinitivo y la verdad no se como podria utilizarlo o la pregunta es habra otra forma de hacer que mi data se mustre en la páginas consecutivas
  #5 (permalink)  
Antiguo 03/02/2011, 14:45
Avatar de Aquaventus  
Fecha de Ingreso: junio-2010
Ubicación: Lima-Peru , En el alba de la naturaleza
Mensajes: 2.105
Antigüedad: 14 años, 4 meses
Puntos: 267
Respuesta: imprimir varias páginas con el printdocument en vb.net

trata de poner el e.HasMorePage = true al final dentro de tu for, porque si mas no me equivoco eso generaria otra pagina lo cual talvez nunca llama ya que lo pones fuera de tu for
Código vb:
Ver original
  1. Private Sub prt_PrintPage(ByVal sender As Object, ByVal e As PrintPageEventArgs)
  2. ' Este evento se produce cada vez que se va a imprimir una página
  3. Dim printFont As System.Drawing.Font
  4. printFont = prtFont
  5.  
  6. 'Datos es una lista generica de mi base de datos trabajadores
  7.  
  8. For Each info As BoInfo In Datos
  9. nContador += 1
  10. e.Graphics.DrawRectangle(New Pen(Color.Red, 1), -75, -75, 1585, 639)
  11.  
  12. e.Graphics.DrawString("Código", printFont, Brushes.Black, 170, 60)
  13. e.Graphics.DrawString(info.codigo, printFont, Brushes.Black, 460, 60)
  14. e.HasMorePages = True
  15. Next
  16. End Sub
si aun asi no da probablemente sea por el orden, la logica if ponla primero y la logica for ponla despues.
__________________
Internet es tener todo el conocimiento global a tu disposición.
Desarrollo de Software - Ejemplos .Net
  #6 (permalink)  
Antiguo 03/02/2011, 14:59
Avatar de CarmenRocio  
Fecha de Ingreso: junio-2010
Ubicación: Perú - Lima - Chorrillos
Mensajes: 116
Antigüedad: 14 años, 5 meses
Puntos: 8
Respuesta: imprimir varias páginas con el printdocument en vb.net

LO QUE HICE FUE ESTO

Private Sub prt_PrintPage(ByVal sender As Object, ByVal e As PrintPageEventArgs)
' Este evento se produce cada vez que se va a imprimir una página
Dim printFont As System.Drawing.Font
printFont = prtFont

'Datos es una lista generica de mi base de datos trabajadores

For Each info As BoInfo In Datos
nContador += 1
e.Graphics.DrawRectangle(New Pen(Color.Red, 1), -75, -75, 1585, 639)

e.Graphics.DrawString("Código", printFont, Brushes.Black, 170, 60)
e.Graphics.DrawString(info.codigo, printFont, Brushes.Black, 460, 60)

If nContador < Datos.Count Then
e.HasMorePages = True ' Todavia faltan mas paginas
End If


Next
End Sub


-PUSE EL IF ADENTRO COMO ME DIJISTES ME SALIO UFFFFFF PORFIN PUEDO VER LAS DOS PAGINAS PERO AHORA TENGO OTRO PROBLEMA DE NUNCA ACABAR QUE LOS DOS REGISTRO SALEN EN LAS DOS HOJAS
ASI
EN LA PIMERA HOJA SALE
24 del 01/01/2011 al 31/02/2011 000001
24 del 01/01/2011 al 31/02/2011 000002

EN LA SEGUNA HOJA SALE LO MISMO

24 del 01/01/2011 al 31/02/2011 000001
24 del 01/01/2011 al 31/02/2011 000002
PERO YO QUIERO QUE SOLO SALGA CADA CODIGO EN SU HOJA EL UNO Y APARTE EL OTRO
GRACIAS POR LA AYUDA AQUAVENTUS.
  #7 (permalink)  
Antiguo 03/02/2011, 15:03
Avatar de CarmenRocio  
Fecha de Ingreso: junio-2010
Ubicación: Perú - Lima - Chorrillos
Mensajes: 116
Antigüedad: 14 años, 5 meses
Puntos: 8
Respuesta: imprimir varias páginas con el printdocument en vb.net

*Por otro lado le di imprimir ala en la vista preliminar pero solo se envio 1 documento mmmm pense que la vista premilinar del guille agarraba todas la hojas bueno.....

*Luego le di imprimir la segunda hoja pero la data se movio mas abajo. un poco nada mas ?? raro?

*Me di cuenta que se genera las 2 hojas pero la data se chanca al menos que seha por las coodenaras de "X" y "Y" pero la logica seria que tenga la mima posicion de coodenaras, pero diferentes hojas o me equiovoco

Última edición por CarmenRocio; 03/02/2011 a las 15:11
  #8 (permalink)  
Antiguo 03/02/2011, 15:12
Avatar de Aquaventus  
Fecha de Ingreso: junio-2010
Ubicación: Lima-Peru , En el alba de la naturaleza
Mensajes: 2.105
Antigüedad: 14 años, 4 meses
Puntos: 267
Respuesta: imprimir varias páginas con el printdocument en vb.net

DATOS es un datatable?, porque si es asi en tu for each podria separarlo por fila y mostrarlos separados, porque lo que veo es que mandas todo un listado o me equivoco?
__________________
Internet es tener todo el conocimiento global a tu disposición.
Desarrollo de Software - Ejemplos .Net
  #9 (permalink)  
Antiguo 03/02/2011, 15:24
Avatar de CarmenRocio  
Fecha de Ingreso: junio-2010
Ubicación: Perú - Lima - Chorrillos
Mensajes: 116
Antigüedad: 14 años, 5 meses
Puntos: 8
Respuesta: imprimir varias páginas con el printdocument en vb.net

* Si AQUAVENTUS es una lista generica mejor dicho he creado una funcion que me devuele o retorna esta lista. en esa funcion llamo toda la data utilzando un procedure: y esta lista la utilizo para el FOR EACH por que asi saco el codigo y lo pongo en la cordenada que quiero y asi su nombre toda la data del primer items de la lista. me dejo entender.

*He preguntado a algunos amigos y me dijeron que haga un salto de carro para que empiese de nuevo a crear la siguiente pagina con la data pero como será el salto de carro del printdocument????
  #10 (permalink)  
Antiguo 03/02/2011, 15:27
Avatar de Aquaventus  
Fecha de Ingreso: junio-2010
Ubicación: Lima-Peru , En el alba de la naturaleza
Mensajes: 2.105
Antigüedad: 14 años, 4 meses
Puntos: 267
Respuesta: imprimir varias páginas con el printdocument en vb.net

OK, ahora la variable "BoInfo" que tipo de control es?
__________________
Internet es tener todo el conocimiento global a tu disposición.
Desarrollo de Software - Ejemplos .Net
  #11 (permalink)  
Antiguo 03/02/2011, 15:37
Avatar de CarmenRocio  
Fecha de Ingreso: junio-2010
Ubicación: Perú - Lima - Chorrillos
Mensajes: 116
Antigüedad: 14 años, 5 meses
Puntos: 8
Respuesta: imprimir varias páginas con el printdocument en vb.net

BoInfo : es mi CLASE: te explico aca trabajo en base a capas
primero creo mi clase en este caso es BoInfo que tiene este codigo a mas ya que el trabajador tiene como mas de 80 registros es asi:
Código VB:
Ver original
  1. Public Class BoInfo
  2. Private lcodigo As String
  3.  
  4.     Public Property codigo() As String
  5.         Get
  6.             Return lcodigo
  7.         End Get
  8.         Set(ByVal value As String)
  9.             lcodigo = value
  10.         End Set
  11.     End Property
  12. End Class
*Luego creo una clase de tipo lista asi:
Código VB:
Ver original
  1. Public Class BoList
  2.     Inherits List(Of BoInfo)
  3.     Public Sub New()
  4.  
  5.     End Sub
  6. End Class
*En mi funcion intancio mi Boinfo con sus parametros y lo lleno a la lista. y desde el formulario lo llamo a traves de mi capa de dato.
asi:
Datos = lbl.funcion()

espero averme explicado

Última edición por CarmenRocio; 03/02/2011 a las 16:49
  #12 (permalink)  
Antiguo 03/02/2011, 17:43
Avatar de CarmenRocio  
Fecha de Ingreso: junio-2010
Ubicación: Perú - Lima - Chorrillos
Mensajes: 116
Antigüedad: 14 años, 5 meses
Puntos: 8
Información Respuesta: imprimir varias páginas con el printdocument en vb.net

Espero que alguien me ayude la forma de que no se repita mi data
Gracias
  #13 (permalink)  
Antiguo 04/02/2011, 08:34
Avatar de CarmenRocio  
Fecha de Ingreso: junio-2010
Ubicación: Perú - Lima - Chorrillos
Mensajes: 116
Antigüedad: 14 años, 5 meses
Puntos: 8
Respuesta: imprimir varias páginas con el printdocument en vb.net

Código HTML:
Ver original
  1. hola estoy nuevamente en el foro para ve si alguien me ayuda en esto del print document  necesito terminarlo, me esta volviendo l..a ya tengo varios días con esto y en la web no ecuentro lo que relamente quiero
  #14 (permalink)  
Antiguo 04/02/2011, 08:35
Avatar de CarmenRocio  
Fecha de Ingreso: junio-2010
Ubicación: Perú - Lima - Chorrillos
Mensajes: 116
Antigüedad: 14 años, 5 meses
Puntos: 8
Información Respuesta: imprimir varias páginas con el printdocument en vb.net

hola estoy nuevamente en el foro para ve si alguien me ayuda en esto del print document necesito terminarlo, me esta volviendo l..a ya tengo varios días con esto y en la web no ecuentro lo que relamente quiero
  #15 (permalink)  
Antiguo 04/02/2011, 08:41
Avatar de Aquaventus  
Fecha de Ingreso: junio-2010
Ubicación: Lima-Peru , En el alba de la naturaleza
Mensajes: 2.105
Antigüedad: 14 años, 4 meses
Puntos: 267
Respuesta: imprimir varias páginas con el printdocument en vb.net

hola sorry la demora >.< ando en asuntos del trabajo, intenta con esto
Código vb:
Ver original
  1. For Each info As BoInfo In Datos
  2. nContador += 1
  3. If nContador < Datos.Count Then
  4.  
  5. e.Graphics.DrawRectangle(New Pen(Color.Red, 1), -75, -75, 1585, 639)
  6.  
  7. e.Graphics.DrawString("Código", printFont, Brushes.Black, 170, 60)
  8. e.Graphics.DrawString(info.codigo, printFont, Brushes.Black, 460, 60)
  9.  
  10. e.HasMorePages = True ' Todavia faltan mas paginas
  11. End If
  12.  
  13. Next
  14. End Sub

PDT: NO ES NECESARIO QUE HAGAS SPAM :S
__________________
Internet es tener todo el conocimiento global a tu disposición.
Desarrollo de Software - Ejemplos .Net
  #16 (permalink)  
Antiguo 04/02/2011, 09:39
Avatar de CarmenRocio  
Fecha de Ingreso: junio-2010
Ubicación: Perú - Lima - Chorrillos
Mensajes: 116
Antigüedad: 14 años, 5 meses
Puntos: 8
Respuesta: imprimir varias páginas con el printdocument en vb.net

Hola aquaventus buenos días gracias por la ayuda y he probado con eso, y se genera la seguda hoja pero sin data. le hice un seguimiento y he motado que pasa el primer registro y hace e.HasMorePages = True pasa el siguiente y es e.HasMorePages = True pero se sigue chancando la data cuando temina es e.HasMorePages = True como es true se vuelve a llamar asi misma la funcion y es alli donde genera la segunda hoja pero sin data habra alguna forma de decirle newpage despues del true como en visual.

De antemano Gracias.
  #17 (permalink)  
Antiguo 04/02/2011, 10:14
Avatar de Aquaventus  
Fecha de Ingreso: junio-2010
Ubicación: Lima-Peru , En el alba de la naturaleza
Mensajes: 2.105
Antigüedad: 14 años, 4 meses
Puntos: 267
Respuesta: imprimir varias páginas con el printdocument en vb.net

haber pruebalo asi :

Código vb.net:
Ver original
  1. Dim printFont As System.Drawing.Font
  2.         Dim linesPerPage As Single = 1 'Defino 1 linea por hoja
  3.         Dim count As Single = 0 'Defino un contador
  4.         Dim nContador As Integer = 0
  5.         Dim printFont As System.Drawing.Font
  6.         printFont = prtFont
  7.  
  8.         For Each info As BoInfo In Datos
  9.             If nContador < linesPerPage Then
  10.                 e.Graphics.DrawRectangle(New Pen(Color.Red, 1), -75, -75, 1585, 639)
  11.                 e.Graphics.DrawString("Código", printFont, Brushes.Black, 170, 60)
  12.                 e.Graphics.DrawString(info.codigo, printFont, Brushes.Black, 460, 60)
  13.             Else
  14.                 count = 0
  15.                 Exit For
  16.             End If
  17.            
  18.             nContador += 1
  19.             count += 1
  20.         Next
  21.         If nContador < Datos.Count Then
  22.             e.HasMorePages = True
  23.         Else
  24.             e.HasMorePages = False
  25.         End If
__________________
Internet es tener todo el conocimiento global a tu disposición.
Desarrollo de Software - Ejemplos .Net

Última edición por Aquaventus; 04/02/2011 a las 10:20
  #18 (permalink)  
Antiguo 04/02/2011, 14:29
Avatar de CarmenRocio  
Fecha de Ingreso: junio-2010
Ubicación: Perú - Lima - Chorrillos
Mensajes: 116
Antigüedad: 14 años, 5 meses
Puntos: 8
Información Respuesta: imprimir varias páginas con el printdocument en vb.net

Hola Foros profín despues de tantas trabas se econtro la solucuión gracias a mi compañero de trabajo milton quien es un capo en estas cosas de la progrmación y logica bueno la SOLUCIÖN es :

Código vb:
Ver original
  1. Private Sub prt_PrintPage(ByVal sender As Object, ByVal e As PrintPageEventArgs)
  2.         ' La fuente que vamos a usar para imprimir.
  3.        Dim printFont As System.Drawing.Font = New Font("Arial", 8) 'prtFont
  4.        Dim topMargin As Double = e.MarginBounds.Top
  5.         Dim yPos As Double = 0
  6.         Dim linesPerPage As Double = 0
  7.         Dim count As Integer = 0
  8.         Dim texto As String = ""
  9.  
  10.         ' Calculamos el número de líneas que caben en cada página.
  11.        linesPerPage = e.MarginBounds.Height / printFont.GetHeight(e.Graphics)
  12.  
  13.         While count < linesPerPage AndAlso i < Datos.Count
  14.             Dim info As BoInfoBOLETA = Datos(i)
  15.             e.Graphics.DrawRectangle(New Pen(Color.Red, 1), -75, -75, 1585, 639)
  16.             e.Graphics.DrawString("24 del 01/01/2011 al 31/02/2011", printFont, Brushes.Black, 170, 60)
  17.             e.Graphics.DrawString(CStr(Format(Date.Now, "dd/MM/yyy")), printFont, Brushes.Black, 470, 60)
  18.             e.Graphics.DrawString(info.codigo, printFont, Brushes.Black, 70, 80)
  19.             e.Graphics.DrawString(info.nombres, printFont, Brushes.Black, 200, 80)
  20. .
  21. .
  22. .
  23. .
  24. .
  25. .
  26. .
  27. .
  28. .
  29.             count = CInt(count + 35.61)
  30.             i = i + 1
  31.  
  32.         End While
  33.  
  34.         If i < Datos.Count Then
  35.             e.HasMorePages = True
  36.         Else
  37.             e.HasMorePages = False
  38.             i = 0
  39.         End If

Bueno mi página tiene 35 lineas aproximadamene cada vez que cumple la condicion se llena de data mi primera lista de lo contario se vuelve a ejecutar el printpage pero ya en la siguiente. bueno esa es la sulución y si sale bueno porfin puedo ver los 712 trabajadores y la data qeu tiene cada uno uuuFFF
gracias a ti aquaventus por tu tiempo y ayuda.

Besos
cuidate y gracias estamos en contacto
  #19 (permalink)  
Antiguo 04/02/2011, 14:35
Avatar de Aquaventus  
Fecha de Ingreso: junio-2010
Ubicación: Lima-Peru , En el alba de la naturaleza
Mensajes: 2.105
Antigüedad: 14 años, 4 meses
Puntos: 267
Respuesta: imprimir varias páginas con el printdocument en vb.net

ehmm gracias! XD pero justo es lo mismo que habia hecho y que trataba de acomodar justo tal y como esta en tu solucion que es esta :
imprimir datos en varias paginas printdocument
__________________
Internet es tener todo el conocimiento global a tu disposición.
Desarrollo de Software - Ejemplos .Net
  #20 (permalink)  
Antiguo 25/04/2011, 17:48
Avatar de titofo  
Fecha de Ingreso: septiembre-2008
Ubicación: Córdoba, corazón del país, Argentina.
Mensajes: 203
Antigüedad: 16 años, 2 meses
Puntos: 2
Respuesta: imprimir varias páginas con el printdocument en vb.net

Perdón por la pregunta: ¿El prtDoc es un control? ¿El control PrintDocument?

Última edición por titofo; 25/04/2011 a las 18:18
  #21 (permalink)  
Antiguo 26/04/2011, 07:21
Avatar de Aquaventus  
Fecha de Ingreso: junio-2010
Ubicación: Lima-Peru , En el alba de la naturaleza
Mensajes: 2.105
Antigüedad: 14 años, 4 meses
Puntos: 267
Respuesta: imprimir varias páginas con el printdocument en vb.net

Es un PrintDocument titofo. Saludos!.
__________________
Internet es tener todo el conocimiento global a tu disposición.
Desarrollo de Software - Ejemplos .Net
  #22 (permalink)  
Antiguo 08/05/2011, 18:36
Avatar de titofo  
Fecha de Ingreso: septiembre-2008
Ubicación: Córdoba, corazón del país, Argentina.
Mensajes: 203
Antigüedad: 16 años, 2 meses
Puntos: 2
Respuesta: imprimir varias páginas con el printdocument en vb.net

Cita:
Iniciado por Aquaventus Ver Mensaje
Es un PrintDocument titofo. Saludos!.
Si de la clase PirntDocument. Gracias.
  #23 (permalink)  
Antiguo 19/06/2013, 13:37
Avatar de Ausberto  
Fecha de Ingreso: octubre-2005
Mensajes: 27
Antigüedad: 19 años, 1 mes
Puntos: 0
Respuesta: imprimir varias páginas con el printdocument en vb.net

yo tengo este proble..... cada que mando a imprimir un documento como son facturas se registran rapidamente y se mandan a imprimir cuando llega a imprimir muchas veces registro 4 ventas se mandan a imprimir pero no imprimen algunas ventas del medio ejemplo, mando registro 23, 24, 25 solo imprime 23 y 25... este es mi codigo..

Código:
 Dim printFont As System.Drawing.Font = New Font("Arial", 10)
            Dim topMargin As Double = e.MarginBounds.Top
            Dim yPos As Double = 0
            Dim linesPerPage As Double = 0
            Dim count As Integer = 0
            Dim texto As String = ""
            Dim LNormal As New Font("Arial", 9)
            Dim LChiquita As New Font("Arial", 8)
            Dim LGrande As New Font("Arial", 11)
            Dim XCliente, XNit, XFecha, XIdv, XTipo, XCajera As String
            Dim NXVta As String
            NXVta = FTpv.Label19.Text

            'IMPRIMIMOS NOTA DE VENTA
            If Op7 = True Then
                ' Calculamos el número de líneas que caben en cada página
                linesPerPage = e.MarginBounds.Height / printFont.GetHeight(e.Graphics)
                Dim formato As New StringFormat()
                formato.Alignment = StringAlignment.Far
                formato.LineAlignment = StringAlignment.Near

                'CALCULAMOS NUMERO DE FILA
                yPos = 30
                ' Imprimimos las cabeceras
                e.Graphics.DrawString("LUJAN SUPERMERCADO", LGrande, Brushes.Black, 40, yPos)
                yPos += 20
                e.Graphics.DrawString("CASA MATRIZ", LNormal, Brushes.Black, 80, yPos)
                yPos += 15
                e.Graphics.DrawString("Calle Avaroa Nº 125 entre Arenales y ", LChiquita, Brushes.Black, 30, yPos)
                yPos += 15
                e.Graphics.DrawString("y 24 de Septiembre Zona B/25 de Diciembre", LChiquita, Brushes.Black, 20, yPos)
                yPos += 15
                e.Graphics.DrawString("Tel. 922-0956    Telf. Fax 922-3496", LChiquita, Brushes.Black, 30, yPos)
                yPos += 15
                e.Graphics.DrawString("Montero - Santa Cruz - Bolivia", LChiquita, Brushes.Black, 40, yPos)
                yPos += 20
                e.Graphics.DrawString("NOTA DE VENTA ", LGrande, Brushes.Black, 60, yPos)
                yPos += 20
                e.Graphics.DrawString("..............................................................................", LChiquita, Brushes.Black, 0, yPos)
                'DATOS DEL CLIENTE
                T = New DataTable
                Com.CommandText = "select v.id, v.idv, v.idcli, v.senor, d.idpro, d.detalle, d.cant, u.corto as und, d.precio, d.monto, v.ccon, v.nauto, v.totalc, v.fecha, v.hora, v.tipov, v.cajera, v.bs, v.cambio, v.nt from t_venta_d d, t_venta v, t_unidad u where v.idv = d.idv and d.und = u.nombre and v.idv = " & "'" & NXVta & "'" & " order by d.idvd "
                D.SelectCommand = Com
                D.Fill(T)
                XCliente = "NOMBRE: " & T.Rows(0).Item("SENOR").ToString
                XIdv = "Nº VENTA: " & T.Rows(0).Item("IDV").ToString
                XNit = "NIT/ CI: " & T.Rows(0).Item("IDCLI").ToString
                XFecha = "FECHA: " & Format(T.Rows(0).Item("FECHA"), "dd/MM/yyyy") + "  " + vbTab + Format(CDate(T.Rows(0).Item("HORA").ToString), "hh:mm")
                XTipo = T.Rows(0).Item("TIPOV").ToString
                XCajera = T.Rows(0).Item("CAJERA").ToString

                'ÀGORA IMPRIMIMOS LOS DATOS
                yPos += 15
                e.Graphics.DrawString(XIdv, LNormal, Brushes.Black, 0, yPos)
                yPos += 15
                e.Graphics.DrawString(XFecha, LNormal, Brushes.Black, 0, yPos)
                yPos += 15
                Dim x1, x2 As Integer
                XCliente = XCliente & " "
                If Len(XCliente) > 30 Then
                    For x1 = 0 To Len(XCliente) - 1
                        If XCliente(x1) = " " Then
                            If x1 > 30 Then
                                e.Graphics.DrawString(Mid(XCliente, 1, x2 - 1), LNormal, Brushes.Black, 0, yPos)
                                yPos += 15
                                e.Graphics.DrawString(Mid(XCliente, x2, Len(XCliente)), LNormal, Brushes.Black, 60, yPos)
                                yPos += 15
                                Exit For
                            Else
                                'nuevo comienzo
                                x2 = x1 + 1
                            End If
                        End If
                    Next
                Else
                    e.Graphics.DrawString(XCliente, LNormal, Brushes.Black, 0, yPos)
                    yPos += 15
                End If
                e.Graphics.DrawString(XNit, LNormal, Brushes.Black, 0, yPos)
                yPos += 15
                e.Graphics.DrawString("..............................................................................", LChiquita, Brushes.Black, 0, yPos)

                'AGORA DETALLE
                yPos += 10
                texto = "CANTIDAD    " + "        PRECIO " + "        IMPORTE"
                e.Graphics.DrawString(texto, LNormal, Brushes.Black, 0, yPos)
                yPos += 10
                e.Graphics.DrawString("..............................................................................", LChiquita, Brushes.Black, 0, yPos)
                'IMPRIMIR DETALLE
                yPos += 15
                For X As Integer = 0 To T.Rows.Count - 1
                    e.Graphics.DrawString(Mid(T.Rows(X).Item("DETALLE").ToString, 1, 30), LNormal, Brushes.Black, 0, yPos)
                    yPos += 15
                    e.Graphics.DrawString(Math.Round(T.Rows(X).Item("CANT"), 2), LNormal, Brushes.Black, 10, yPos)
                    e.Graphics.DrawString(T.Rows(X).Item("UND").ToString, LNormal, Brushes.Black, 60, yPos)
                    e.Graphics.DrawString(Math.Round(T.Rows(X).Item("PRECIO"), 2), LNormal, Brushes.Black, 160, yPos, formato)
                    e.Graphics.DrawString(Math.Round(T.Rows(X).Item("MONTO"), 2), LNormal, Brushes.Black, 240, yPos, formato)
                    yPos += 15
                Next

                e.Graphics.DrawString("..............................................................................", LChiquita, Brushes.Black, 0, yPos)
                yPos += 15
                e.Graphics.DrawString("TOTAL A PAGAR: ", LNormal, Brushes.Black, 0, yPos)
                e.Graphics.DrawString(Math.Round(T.Rows(0).Item("TOTALC"), 2), LNormal, Brushes.Black, 240, yPos, formato)
                yPos += 15
                e.Graphics.DrawString("TOTAL RECIBIDO: ", LNormal, Brushes.Black, 0, yPos)
                e.Graphics.DrawString(Math.Round(T.Rows(0).Item("BS"), 2), LNormal, Brushes.Black, 240, yPos, formato)
                yPos += 15
                e.Graphics.DrawString("TOTAL CAMBIO: ", LNormal, Brushes.Black, 0, yPos)
                e.Graphics.DrawString(Math.Round(T.Rows(0).Item("CAMBIO"), 2), LNormal, Brushes.Black, 240, yPos, formato)
                yPos += 30

                Dim largo = Len(CStr(Format(CDec(T.Rows(0).Item("TOTALC")), "#,###.00")))
                Dim decimales = Mid(CStr(Format(CDec(T.Rows(0).Item("TOTALC")), "#,###.00")), largo - 2)
                Dim Letras = UCase(ALetras(Math.Round(T.Rows(0).Item("TOTALC"), 2), " Bs."))
                'IMPRESION DE LETRAS NUMERICAS
                Letras = "SON: " & Letras & " "

                If Len(Letras) > 29 Then
                    For x1 = 0 To Len(Letras) - 1
                        If Letras(x1) = " " Then
                            If x1 > 29 Then
                                e.Graphics.DrawString(Mid(Letras, 1, x2 - 1), LNormal, Brushes.Black, 0, yPos)
                                yPos += 15
                                e.Graphics.DrawString(Mid(Letras, x2, Len(Letras)).Trim, LNormal, Brushes.Black, 0, yPos)
                                yPos += 15
                                Exit For
                            Else
                                'nuevo comienzo
                                x2 = x1 + 1
                            End If
                        End If
                    Next
                Else
                    e.Graphics.DrawString(Letras, LNormal, Brushes.Black, 0, yPos)
                    yPos += 15
                End If
                yPos += 10
                'verificar EL TAMAÑO DE LETRAS PARA DIVIDUIRLO Y SABER CUANTAS LINEAS PUEDEN SER Y PONERLO EN UN CICLO
                e.Graphics.DrawString("VENDEDOR: ", LNormal, Brushes.Black, 0, yPos)
                e.Graphics.DrawString(T.Rows(0).Item("CAJERA").ToString, LNormal, Brushes.Black, 75, yPos)
                e.Graphics.DrawString(T.Rows(0).Item("TIPOV").ToString, LNormal, Brushes.Black, 150, yPos)
                yPos += 40

                e.Graphics.DrawString("GRACIAS POR SU PREFERENCIA!!! ", LNormal, Brushes.Black, 10, yPos)
                yPos += 20


                e.HasMorePages = False
            End If
les pido ayuda por favor apenas logre amrmar este code
es para un local de venta de comida rapida osea imprime muchas veces
:s tress:

Etiquetas: document, print, printdocument
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:45.