locked
Codigo de Barras VB .net (2008) RRS feed

  • Pregunta

  • Hola comunidad, como lo dice el titulo, necesito generar código de barras por una cierta cantidad de caracteres...

    He estado indagando un poco, pero en algunos foros no logré comprender bien. Intente diseñarlo, pero simplemente no me funciono... 
    En lo posible, si me pueden ayudar con un código de barras que sea legible para cualquier lector de código, pero mejor sería si me puedan ayudar con el código GS1-128... Cualquier de los dos sería de gran ayuda... 

    Saludos!! y atento a sus comentarios!!

    martes, 22 de septiembre de 2015 0:21

Respuestas

  • Hola Cravanal yo soy un poco novato en programacion pero tambien tuve que hacer codigos de barras para imprimirlas en etiquetas, en mi caso los codigos los tenia que extraer de un DataGridView y tube que hacer uso de una pagina web pero alfinal salio como queria

    para este ejemplo necesita un DataGridView1 con dos columnas la primera para los codigos y la segunda para una descripcion, un Button1 y un PictureBox1 en modo autozise

    Public Class Form1
    'En este programa lo que hago es descargar un codigo de barras como imagen haciendo uso de una pagina web, en este caso los codigos estan en un DataGridView1
    Dim rutatemporal As String = "C:\Users\" & Environment.UserName & "\Pictures\"
    'la funcion arreglacadena() es para poder guardar la imagen con el codigo de barras con el mismo combre del codigo, y en caso de que el nombre contenga caracteres no permitidos por windows los reemplazo por "" o por un caracter que se le parezca
    'la variable "i" se la mando a la funcion para detectar en que fila se encuentra el codigo (la columna siempre es 0 por que es la columna de los codigos)
     Function arreglacadena(ByVal i As Integer) As String
            Dim cadena As String
            cadena = DataGridView1.Item(0, i).Value.ToString.Replace(" ", "_")
            cadena = cadena.Replace("/", "%")
            cadena = cadena.Replace("\", "")
            cadena = cadena.Replace("*", "x")
            cadena = cadena.Replace(":", "")
            cadena = cadena.Replace("?", "")
            cadena = cadena.Replace("""", "")
            cadena = cadena.Replace("<", "")
            cadena = cadena.Replace(">", "")
            cadena = cadena.Replace("|", "")
            Return cadena
        End Function
    
    'la funcion verificardirectorio() la uso para crear una carpeta en donde guardar las imagenes con los codigos de barras, uso una subcarpeta para guardar una imagen temporal para poder manipularla y despues guardarla en la carpeta principal
    'la carpeta principal donde guardo todas las imagenes con los codigos se llama etiquetas la cual esta en C:\Users\Usuario\Pictures\
    Sub verificardirectorio()
            If Directory.Exists(rutatemporal & "Etiquetas") Then
                If Directory.Exists(rutatemporal & "Etiquetas\Temporal") Then
                    rutatemporal = rutatemporal & "Etiquetas\Temporal\"
                Else
                    Directory.CreateDirectory(rutatemporal & "Etiquetas\Temporal")
                    rutatemporal = rutatemporal & "Etiquetas\Temporal\"
                End If
            Else
                Directory.CreateDirectory(rutatemporal & "Etiquetas")
                Directory.CreateDirectory(rutatemporal & "Etiquetas\Temporal")
                rutatemporal = rutatemporal & "Etiquetas\Temporal\"
            End If
        End Sub
    
    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    verificardirectorio() ' verifico que la carpeta exista
            For i As Integer = 0 To DataGridView1.RowCount - 1 'recorro las filas del DataGridView1
                If System.IO.File.Exists(rutatemporal.Replace("Temporal\", "") & arreglacadena(i) & ".PNG") = False Then 'Verifico que la imagen con el codigo de barras aun no exista
                    Descargar("http://www.barcodesinc.com/generator/image.php?code=" & DataGridView1.Item(0, i).Value.ToString.Replace(" ", "%20") & "&style=190&type=C128B&width=550&height=85&xres=2&font=5", i) 'llamo a la funcion descargar para descargar la imagen con el codigo de barras concatenando el codigo despues de http://www.barcodesinc.com/generator/image.php?code= y reemplazando los espacios por "%20"
    ' y concatenandole despues la configuracion del codigo de barras de la pagina la siguiente cadena &style=190&type=C128B&width=550&height=85&xres=2&font=5.
    'A la funcion tambien le mando el indice de la fila en la cual me encuentro
                End If
            Next
        End Sub
    
    Sub Descargar(ByVal Url As String, ByVal i As Integer)
            Dim imgnm As String = arreglacadena(i) & ".PNG" 'obtengo el nombre que sera de la imagen de la funcion arreglacadena() enviandole la fila en la que se encuentra el ciclo
    
    retorno:
            If System.IO.File.Exists(rutatemporal & imgnm) = False Then 'compruebo que la imagen temporal no exista, si existe entonces la elimino y vuelvo a retorno: para volver a comprobar
    
                My.Computer.Network.DownloadFile(Url, rutatemporal & imgnm) 'Descargamos el archivo de imagen al disco para después cargarla. _ El Primer parámetro  es la url y el segundo es el path donde se guarda, la variable ruta temporal es la ruta de la carpeta e imgnm es el nombre que tendrá la imagen
    
                Dim fs As System.IO.FileStream
                fs = New System.IO.FileStream(rutatemporal & imgnm, IO.FileMode.Open, IO.FileAccess.Read)
    'leo la imagen con el codigo de barras que acabo de descargar y la pongo en un picturebox1
                PictureBox1.Image = System.Drawing.Image.FromStream(fs)
                ' si el pb no contiene una imagen, abandonamos la rutina  
                If PictureBox1.Image Is Nothing Then Return
    
                'pongo la imagen en un picturebox1 para poder editarla ya que la imagen que descargamos no contiene una descripcion todo esto te lo puedes ahorrar si no necesitas un descripcion, yo por ejemplo queria que mi codigo de barras saliera mas o menos asi, por ejemplo en la parte de arriba pongo la descripcion "CocaCola" en la parte de en medio el codigo de barras |||||, y en la parte de abajo el codigo alfanumerico 00017F
    
                ' vamos a definir la tipografía y la altura de la línea de texto
                Dim LetraTexto As Font = New Font(FontFamily.GenericMonospace, 13, FontStyle.Bold)
                Dim alturaTexto = LetraTexto.Height
                ' creamos una nueva imagen, e incorporamos la altura del texto a sus dimensiones
                Dim img As New Bitmap(PictureBox1.Image.Width, PictureBox1.Image.Height + alturaTexto)
                ' asociamos la imagen a un memoryDC. Este dispositivo crea un DIB en donde vamos a 
                ' a pintar todos los elementos de la nueva imagen
                Dim g As Graphics = Graphics.FromImage(img)
                ' inicializamos un RectangleF donde colocaremos el texto
                Dim r As New RectangleF(0, 0, img.Width, alturaTexto)
                ' pintamos el rectángulo de color blanco
                g.FillRectangle(Brushes.White, r)
                ' y escribimos es texto centrado (el texto se extrae de la segunda columna del Datagridview1)
                g.DrawString(DataGridView1.Item(1, i).Value, LetraTexto, Brushes.Black, r, New StringFormat() With {.Alignment = StringAlignment.Center, .LineAlignment = StringAlignment.Center})
                ' copiamos el codigo de barras original justo debajo del rectángulo con el texto con la descripcion
                g.DrawImage(PictureBox1.Image, 0, alturaTexto)
                ' forzamos la liberación del mdc
                g.Dispose()
    
                ' reemplazamos la imagen en el picturebox
                PictureBox1.Image = img
    
                ' guardamos la nueva imagen pero ya no en la subcarpeta temporal, si no en la carpeta superior "Etiquetas"
                    PictureBox1.Image.Save(rutatemporal.Replace("Temporal\", "") & imgnm, Drawing.Imaging.ImageFormat.Png)
    
                Catch ex As Exception
                    MsgBox(ex.Message, MsgBoxStyle.Critical)
                End Try
    
                PictureBox1.Image = Nothing
                img.Dispose()
                img = Nothing
                g = Nothing
                fs.Close()
                My.Computer.FileSystem.DeleteFile(rutatemporal & imgnm)'elimino la imagen temporal
            Else
                My.Computer.FileSystem.DeleteFile(rutatemporal & imgnm)' aqui es donde elimino la imagen temporal en caso de que exista y vuelvo a hacer la comprobacion
                GoTo retorno
                'MsgBox("El archivo " & rutatemporal & imgnm & " ya Existe")
            End If
        End Sub
    End Class

    espero te sirva de algo

    martes, 22 de septiembre de 2015 18:24