none
impresion mas de una pagina

    Pregunta

  • Hola buenos dias, disculpen la molestia, pero por mas que he intentado no he podido solucionar mi problema. Lo que pasa es que al momento de mandar a imprimir, solo me muestra la primera pagina en indefinidas veces, y se convierte en bucle. Ya he intentado poner e.hasmorepages, pero no consigo que me muestre las demas paginas, asi como mucho menos imprimir. Alguien podria auxiliarme porfavor?..

    este es mi codigo:


            '********** LISTA DE ALUMNOS    ************************

            Dim pagina As Integer = 1
            Dim i, z, m, n, o As Integer
            Dim dt As New DataTable()
            Dim fuente As System.Drawing.Font
            Dim fuente2 As System.Drawing.Font
            sql = "SELECT Mat,Nombre,Apellidopaterno,ApellidoMaterno FROM alumnos WHERE Nivel='" & ComboBox1.Text & "' and Grado='" & TextBox1.Text & "' and Grupo='" & TextBox2.Text & "'"
            Dim dataAdapter As New OleDb.OleDbDataAdapter(sql, conex)
            dataAdapter.Fill(dt)
            dataAdapter.Dispose()
            fuente = New System.Drawing.Font("Arial", 6, FontStyle.Regular)
            fuente2 = New System.Drawing.Font("Arial", 8, FontStyle.Regular)


            z = 0
            m = 116
            n = 170
            o = 150


            For i = 0 To dt.Rows.Count - 1



                e.Graphics.DrawString(CStr(dt.Rows(i)("Mat")), fuente, Brushes.Gray, 255, m)
                e.Graphics.DrawString(CStr(dt.Rows(i)("Apellidopaterno") & (" ") & dt.Rows(i)("Apellidomaterno")), fuente2, Brushes.Black, 150, n)
                e.Graphics.DrawString(CStr(dt.Rows(i)("Nombre")), fuente2, Brushes.Black, 150, o)


                Dim text1 As String = "El pase de salida debe de permanecer en buenas condiciones, la primera vez de su elaboración no tendra ningun costo. Pero su es maltratado, sera retirado y tendrá que solicitar uno nuevo. " &
                "Costo de la reposición: $35.00. " &
                "Si hace mal uso de el, como prestarlo o tratar de engañar a los profesores de guardia, se le castigara una semana, por lo tanto no podrá salir solo, y algún adulto tendra que venir por el. La sanción va desde una semana hasta retirarse definitivamente." &
                "Solo se permitirá en dos ocaciones se le olvide el pase, si existe una tercera, los papás tendran que venir por el alumno(a) durante una semana o según la sanción, la cuál podriá ser que se le retire de forma definitiva."

                Dim font1 As New Font("Arial", 8, FontStyle.Italic, GraphicsUnit.Point)
                Try
                    Dim rect1 As New Rectangle(408, z + 70, 340, 203)

                    ' Create a StringFormat object with the each line of text, and the block
                    ' of text centered on the page.
                    Dim stringFormat As New StringFormat()
                    stringFormat.Alignment = StringAlignment.Center
                    stringFormat.LineAlignment = StringAlignment.Center

                    ' Draw the text and the surrounding rectangle.
                    e.Graphics.DrawString(text1, font1, Brushes.Black, rect1, stringFormat)
                    ' e.Graphics.DrawRectangle(Pens.Red, rect1)
                Finally
                    font1.Dispose()
                End Try


                'Medidas de la credencial (Un lado < 3.375 in * 2.125 in >) dos lados ( 6.75 in * 2.125 in >)

                Dim black As New Pen(Color.Black, 1)
                Dim b As Integer


                b = 70 + z

                e.Graphics.DrawRectangle(black, 70, b, 676, 213)

                Dim p1 As New Point(408, z + 70)
                Dim p2 As New Point(408, z + 75)
                Dim dashValues As Single() = {1, 1, 1, 1}
                black.DashPattern = dashValues

                'Construcción (Nombre del picture box, coordenada en X, coordenada en Y, ancho, alto)
                Dim a As Integer

                a = 80 + z

                e.Graphics.DrawImage(PictureBox1.Image, 80, a, 40, 50) 'Imprime la imagen contenida en un picture box



                ' Nombre del Instituto

                e.Graphics.DrawString("INSTITUTO BENAVENTE QUERÉTARO", New Font("arial", 8, FontStyle.Regular),
                                            Brushes.Blue, e.MarginBounds.Left + 60, e.MarginBounds.Top + z - 18)

                'Dirección del instituto
                If ComboBox1.Text = "secundaria" Then

                    e.Graphics.DrawString("Secundaria: 22PES0068N", New Font("", 6, FontStyle.Regular),
                                            Brushes.Gray, e.MarginBounds.Left + 106, e.MarginBounds.Top - 5 + z)

                Else

                    e.Graphics.DrawString("Primaria: 22PPR0096Q", New Font("", 6, FontStyle.Regular),
                                            Brushes.Gray, e.MarginBounds.Left + 106, e.MarginBounds.Top - 5 + z)

                End If



                e.Graphics.DrawString("Ciclo escolar: " & ce, New Font("", 6, FontStyle.Regular),
                                    Brushes.Gray, e.MarginBounds.Left + 99, e.MarginBounds.Top + 6 + z)

                e.Graphics.DrawString("Matricula: ", New Font("", 6, FontStyle.Regular),
                                    Brushes.Gray, e.MarginBounds.Left + 117, e.MarginBounds.Top + 17 + z)

                e.Graphics.DrawString("Nombre: ", New Font("", 8, FontStyle.Regular),
                                    Brushes.Gray, e.MarginBounds.Left, e.MarginBounds.Top + 50 + z)


                e.Graphics.DrawString("Grado: " & TextBox1.Text, New Font("", 8, FontStyle.Regular),
                                    Brushes.Gray, e.MarginBounds.Left, e.MarginBounds.Top + 90 + z)

                e.Graphics.DrawString("Grupo: " & TextBox2.Text, New Font("", 8, FontStyle.Regular),
                                    Brushes.Gray, e.MarginBounds.Left + 50, e.MarginBounds.Top + 90 + z)
                Dim c As Integer

                c = 140 + z



                e.Graphics.DrawLine(Pens.Black, New Point(120, 245 + z), New Point(320, 245 + z))

                e.Graphics.DrawString("Profa.: Gladys Carrillo Escobar", New Font("", 6, FontStyle.Regular),
                                    Brushes.Gray, e.MarginBounds.Left + 55, e.MarginBounds.Top + 150 + z)
                e.Graphics.DrawString("Directora", New Font("", 6, FontStyle.Regular),
                                    Brushes.Gray, e.MarginBounds.Left + 93, e.MarginBounds.Top + 162 + z)



                Try


                    Dim v, w As String
                    v = My.Application.Info.DirectoryPath
                    w = (v & "\Ciclo Actual\Fotos\" & (dt.Rows(i)("Mat")) & ".jpg")
                    Dim imagefile As Image = Image.FromFile(w)
                    Dim newGraphics As Graphics = Graphics.FromImage(imagefile)
                    'newGraphics.FillRectangle(New SolidBrush(Color.Black), 100, 200, 70, 90)

                    e.Graphics.DrawImage(imagefile, 320, c, 70, 90) 'Imprime la foto contenida en un picture box
                    newGraphics.Dispose()


                Catch ex As Exception

                    GoTo continuar

                End Try



    continuar:


                z = z + 260
                m = m + 260
                n = n + 260
                o = o + 260

    ' Segun yo aqui va el codigo...

    if i < dt.rows.count then

    e.hasmorepages=true

    else

    e.hasmorepages=false

            Next

    De antemano muchas gracias.............

    jueves, 29 de septiembre de 2016 10:55

Respuestas

  • Tu for siempre empieza por 0.

    Lo que debes saber, es que el método se invoca una vez para cada página. La función Print() es quien invoca el evento. Cuando vos salís de la función con has more pages en true, print ve que hay más páginas y vuelve a llamar a la función.

    Ergo, vos tenés que mantener el valor de <i> fuera de la función, digamos a nivel de la subclase de form, para que el for comience desde allí.

    jueves, 29 de septiembre de 2016 14:23