Visual Basic.NET - printDocument con varias paginas

 
Vista:
Imágen de perfil de roberto
Val: 19
Ha aumentado su posición en 7 puestos en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

printDocument con varias paginas

Publicado por roberto (9 intervenciones) el 01/12/2017 02:57:04
Buenas noches Sres,,
soy un novato que esta empezando a usar vb.nete 2012 y tengo un problemas con el printDocument....
Estoy usando windows10 Home de 64bits, y quiero imprimir el contenido de un datatable pero al realizar el salto de paginas no lo hace..ahi va mi codigo si alguien me puede ayudar

llamada al reporte
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
    prev = New PrintPreviewDialog
    docum = New PrintDocument
 
    AddHandler docum.PrintPage, New PrintPageEventHandler(AddressOf Me.printExistencias)
    Dim impresActual As New Printing.PrinterSettings
    Dim prdimpresoras As New PrintDialog
    Dim tamano As Printing.PaperSize
    Dim ancho As Short = Short.Parse(900)
    Dim alto As Short = Short.Parse(1440)
    tamano = New Printing.PaperSize("Existencias", ancho, alto)
 
    Try
        docum.DefaultPageSettings.PaperSize = tamano
        prev.Document = docum
        prev.ShowDialog()
 
    Catch ex As Exception
        MsgBox("Error al desplegar el reporte|" & ex.Message)
        Exit Sub
    Finally
    End Try
 
End Sub
/*codigo recortado para visualizar el proceso de impresion*/
 
Private Sub printExistencias(sender As Object, e As PrintPageEventArgs)
 
   For Each row As DataRow In dataset.dtExistencia_art.Rows
            articulo = row("id_articulo")
            e.Graphics.DrawString(row("id_Articulo"), Fnormal, Brushes.Black, margenizq, ypos)
            margenizq += 80
            lugar = "09"
            ypos += 15
            lineas += 1
            e.HasMorePages = False
 
            If lineas > linesPages Then
                pagina += 1
                'MsgBox("Nueva pagina hasmore true " & pagina)
                cabecera = 1
                lineas = 0
                margenizq = Math.Round(e.MarginBounds.Left / Fnormal.GetHeight(e.Graphics), 0)
                'ypos = 0
                e.HasMorePages = True
            End If
        Next
        e.HasMorePages = False
 
    Catch ex As Exception
        MsgBox("Error al desplegar existencias|" & lugar & ex.Message)
        Exit Sub
    End Try
 
End Sub

Este codigo no me hace el salto de pagina.
espero me ayuden y saldos a todos
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de roberto
Val: 19
Ha aumentado su posición en 7 puestos en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

printDocument con varias paginas

Publicado por roberto (9 intervenciones) el 01/12/2017 14:19:25
Buenos dias Sres,
Me contesto a mi mismo, es medio engorroso esta parte del reporte y no hay muchas explicaciones en la web.
Investigando en Google encontré una solución que me sirve por el momento.
Modifique el procedimiento printExistencias, en esta parte del código
1- cambie el inicio del control
1
2
For Each row As DataRow In dataset.dtExistencia_art.Rows
    cierto=true

2-Cambie la linea para generar nueva pagina,
1
2
3
4
5
6
7
8
9
10
If lineas > linesPages Then
    pagina += 1
    'MsgBox("Nueva pagina hasmore true " & pagina)
    cabecera = 1
    lineas = 0
    margenizq = Math.Round(e.MarginBounds.Left / Fnormal.GetHeight(e.Graphics), 0)
    'ypos = 0
    e.HasMorePages = True
    exit for
End If

3-Cambie el código que tenia afuera del For así...
Esto para controlar si hay todabía paginas disponibles de impresión, vuelvo a generar el query.
La variable cierto tomas al comienzo del proceso el valor False, cuando entra dentro del For toma el valor True.
1
2
3
4
5
if cierto then
    e.HasmorePages=true
else
    e.HasmorePages=false
end if

Con estos cambios me funciono. Solo hay que atender y controlar hasta donde se proceso el query, para poder retomar solo los valores que faltan procesar.
Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar