Principales respuestas
generar e imprimir codigos QR

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
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
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
-
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 SubAran
- Propuesto como respuesta Pablo Rubio miércoles, 11 de septiembre de 2019 16:47
-
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 y H 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
-
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
-
-
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
-
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
-