none
generar e imprimir codigos QR RRS feed

  • Pregunta

  • tengo una aplicacion visual net desde donde meto en unas cajas de texto unas referencias (solo texto) y necesito que se generen los codigos QR y se impriman todos en un documento (no uno por pagina  o documento)

    he descargado OnBarcode barcodegenerator y uso winforms

    pero solo consigo generar e imprimir uno solo

    queria hacerlo con crystal pero nadie me contesta en los foros asi que he decido intentarlo con printdocument

    Imports OnBarcode
    Public Class frmPrincipal
        Private Sub BtnGenerar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnGenerar.Click
            Me.qrW.Data = Me.TextBox1.Text
            qrW.ImageFormat = System.Drawing.Imaging.ImageFormat.Jpeg
            Pic.Image = Nothing
            Pic.Image = qrW.drawBarcode
        End Sub
    
        Private Sub PrintDocument1_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
    
            'Con esto dibujas la imagen que esta contenida en un control picturebox. Los parámetros 100,100,100,100 son el origen en x, el origen en y, el ancho y el alto respectivamente.
    
            e.Graphics.DrawImage(Me.Pic.Image, 100, 100, 100, 100)
    
            'Con esto imprimes una imagen que esta en una ruta de tu equipo
            ' Dim imagen As Bitmap = Image.FromFile("c:\codigoqr.jpg")
    
            'e.Graphics.DrawImage(imagen, 200, 200, 100, 100)
    
            e.HasMorePages = False
    
        End Sub
    
    
        Private Sub print_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPrint.Click
            'Mandamos a imprimir
            Me.PrintDocument1.Print()
    
        End Sub
    
        Private Sub btnSalir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSalir.Click
            Me.Close()
        End Sub
    End Class


    Aran

    martes, 10 de septiembre de 2019 11:26

Respuestas

  • Hola, para tu primer pregunta, por favór coloca el código completo de como ha quedado, incluye todos los involucrados para poder evaluarlo y vemos que pasa."no me salen los textos", hasta donde entiendo según el código que eligas puedes optar por que se genere el alfanumérico, si no es así, se puede agregar, como en el ejemplo primero un DrawString ej= justo debajo de la imagen

       e.Graphics.DrawString(ListBox3.Items.Item(i), New Font("Verdana", 12, FontStyle.Bold), Brushes.Black, W + 20, H + 30)

      Para la segunda pregunta, deberías consultar con el proveedor del código QR que es lo que sucede, descosco esa falla y si realmente es una falla, nada tiene que ver con la producción, puede ser, imagino, una limitación si el programa OnBarcode está a prueba en fomra gratuita, pero solo es una suposición ya que no he encontrado bibliografía al respecto

    Saludos


    ARA San Juan 44 HEROES     ‗‗‗‗­|||||‗‗‗‗‗

    • Marcado como respuesta aticnet viernes, 13 de septiembre de 2019 10:50
    viernes, 13 de septiembre de 2019 10:10

Todas las respuestas

  • Hola Aran; el problema es que ejecutas una sola instancia por cada Print, deberías cargar una list o ListBox agregando la cantidad de codigos que quieras generar y luego sí ejecutar Print mediante For recorrer esa lista y generar codigo de barra, te pongo un ejemplo, evito la generación como lo tienes tu, eso lo tienes resuelto, solo el ejemplo de como imprimir en una Hoja Ej.

    Cargo los items, en mi escenario en un ListBox

     Private Sub Button9_Click(sender As Object, e As EventArgs) Handles Button9.Click
            If Not String.IsNullOrEmpty(TextBox7.Text) Then
                ListBox3.Items.Add(Convert.ToInt32(TextBox7.Text) + 1)
                TextBox7.Text = Convert.ToInt32(TextBox7.Text) + 1
            End If
        End Sub

    Este es mi ejemplo de generar mediante texto en el ListBox

      Private Sub PrintDocument1_PrintPage(sender As Object, e As Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
            Dim W As Integer = 30
            Dim H As Integer = 60
            Dim C As Integer = 0
            If Not ListBox3.Items.Count = 0 Then
    
                For i As Integer = 0 To ListBox3.Items.Count - 1
                    If C > 14 Then
                        W += 300
                        H = 60
                        C = 0
                    End If
                    e.Graphics.DrawString(ListBox3.Items.Item(i), _Font, Brushes.Black, W, H)
                    e.Graphics.DrawString(ListBox3.Items.Item(i), New Font("Verdana", 12, FontStyle.Bold), Brushes.Black, W + 20, H + 30)
                    H += 60
                    C += 1
                Next
    
            End If
        End Sub

     El tema de tu consulta, es que debes modificar los Point de cada impresión

    Saludos


    ARA San Juan 44 HEROES     ‗‗‗‗­|||||‗‗‗‗‗

    • Propuesto como respuesta Pablo Rubio miércoles, 11 de septiembre de 2019 16:47
    miércoles, 11 de septiembre de 2019 2:39
  • muchas gracias pero no me sale

    mis codigos son alfanumericos y el codigo QR no barras

    no se porque conviertes a int32 ni porque sumas 1

     ListBox3.Items.Add(Convert.ToInt32(TextBox7.Text) + 1)
                TextBox7.Text = Convert.ToInt32(TextBox7.Text) + 1

    esto

     e.Graphics.DrawString(ListBox3.Items.Item(i), _Font, Brushes.Black, W, H)
                    e.Graphics.DrawString(ListBox3.Items.Item(i), New Font("Verdana", 12, FontStyle.Bold), Brushes.Black, W + 20, H + 30)

    lo sustituyo por

     e.Graphics.DrawImage(Me.Pic.Image, 100, 100, 100, 100)

    porque sino me saca solo los numeros y no el codigo qr

    y al ejecutar el generarar yo creo que me genera uno encima de otro, pic se sobre escribe  y claro el problema esta que al imprimir imprime solo el ultimo

     Private Sub BtnGenerar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnGenerar.Click
            For i As Integer = 0 To ListBox1.Items.Count - 1

                Me.qrW.Data = ListBox1.Items.Item(i) ' Me.TextBox1.Text
                qrW.ImageFormat = System.Drawing.Imaging.ImageFormat.Jpeg
                Pic.Image = Nothing
                Pic.Image = qrW.drawBarcode
            Next
        End Sub


    Aran

    • Propuesto como respuesta Pablo Rubio miércoles, 11 de septiembre de 2019 16:47
    miércoles, 11 de septiembre de 2019 8:58
  • Lo que te mostre es solo un ejemplo Aran, de como distribuir un codigo en una hoja de impresión, no importa que tipo de codigo ni siquiera si es un código, lo que debes hacer es modificar los Point en cada interacción, donde tu pones e.Graphics.DrawImage(Me.Pic.Image, 100, 100, 100, 100) esos 100, 100..... son los Point o cooredenadas en donde ubicas los QR, eso debes modificar a medida que generas la impresión, si miras el ejemplo veras que las variables W, H , C interacutan a medida que ejecuta el código, en tu escenario deberas modificar esos valores solo que lo que te indica al ser imagen es coorendadaX, cooredenadaY, Largo, Ancho. Yo colocaría el código que tienes en BtnGenerar dentro de PrintDocumnet1.PrintPage y mediate variables reubicar los QR de acuerdo con su tamaño de area de impresión o tamaño de hoja, para esto debes tener los codigos, alfanuméricos o lo que sean en un list y recorrerlos como lo tienes alli. Pido disculpas si no fui claro en el ejemplo dado. En mi escenario las variables W son las coordenadas que se modifican y C es un contador para distribuir cuantos por fila. Lo que deberías cargar en el ListBox son esos codigos para generar y de acuerdo con la cantidad será la impresión en mi ejemplo es solo eso cargar números nada más. En cuanto tenga más tiempo trataré de recrear tu escenario, pero "juega" con esas cooredenadas y entenderás lo que digo

    Saludos y a disposición


    ARA San Juan 44 HEROES     ‗‗‗‗­|||||‗‗‗‗‗

    • Propuesto como respuesta Pablo Rubio miércoles, 11 de septiembre de 2019 16:48
    miércoles, 11 de septiembre de 2019 10:09
  • Mira para que se entienda bien, solo queda agregar el código para generar QR . Lo seguimos viendo  saludos

    Private Sub PrintDocument1_PrintPage(sender As Object, e As Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage Dim W As Integer = 100 Dim H As Integer = 60 Dim C As Integer = 0 If Not ListBox3.Items.Count = 0 Then For i As Integer = 0 To ListBox3.Items.Count - 1 If C > 14 Then W += 300 H = 60 C = 0 End If '----------Aquí debería entrar tu código para generar la imagen de QR ------------ PictureBox1.Image = Nothing PictureBox1.Image = My.Resources.QRGenerar '--------------------------------------------------------------------------------- e.Graphics.DrawImage(Me.PictureBox1.Image, W, H, 100, 100) H += 110 C += 1 Next End If End Sub


    ARA San Juan 44 HEROES     ‗‗‗‗­|||||‗‗‗‗‗


    • Editado Marcelo PF miércoles, 11 de septiembre de 2019 10:45
    • Propuesto como respuesta Pablo Rubio miércoles, 11 de septiembre de 2019 16:48
    miércoles, 11 de septiembre de 2019 10:45
  • gracias

    con este codigo no salen los textos y los graficos en 3 columnas como ponias en el ejemplo me salen todos en la misma columna y sin texto


    Aran

    viernes, 13 de septiembre de 2019 7:51
  • a veces al generar el codigo qr (qrW es un control tipo qrCodeWinForm) me aparece con unas manchar rojas, yo creo que es error como puedo solucionarlo o detectarlo para volver a generarlo?

        Pic.Image = Nothing
        Pic.Image = qrW.drawBarcode Pic.Image = qrW.drawBarcode


    Aran


    • Editado aticnet viernes, 13 de septiembre de 2019 9:32 error al escribir
    viernes, 13 de septiembre de 2019 9:29
  • Hola, para tu primer pregunta, por favór coloca el código completo de como ha quedado, incluye todos los involucrados para poder evaluarlo y vemos que pasa."no me salen los textos", hasta donde entiendo según el código que eligas puedes optar por que se genere el alfanumérico, si no es así, se puede agregar, como en el ejemplo primero un DrawString ej= justo debajo de la imagen

       e.Graphics.DrawString(ListBox3.Items.Item(i), New Font("Verdana", 12, FontStyle.Bold), Brushes.Black, W + 20, H + 30)

      Para la segunda pregunta, deberías consultar con el proveedor del código QR que es lo que sucede, descosco esa falla y si realmente es una falla, nada tiene que ver con la producción, puede ser, imagino, una limitación si el programa OnBarcode está a prueba en fomra gratuita, pero solo es una suposición ya que no he encontrado bibliografía al respecto

    Saludos


    ARA San Juan 44 HEROES     ‗‗‗‗­|||||‗‗‗‗‗

    • Marcado como respuesta aticnet viernes, 13 de septiembre de 2019 10:50
    viernes, 13 de septiembre de 2019 10:10
  • muchisimas gracias, todo solucionado por el momento

    Aran

    viernes, 13 de septiembre de 2019 10:50