Visual Basic - Problema con código de barras iTexSharp

Life is soft - evento anual de software empresarial
 
Vista:
Imágen de perfil de Carlos Ardón
Val: 5
Ha aumentado su posición en 15 puestos en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

Problema con código de barras iTexSharp

Publicado por Carlos Ardón (3 intervenciones) el 19/12/2018 17:14:21
Buenos días:
Estoy trabajando en un sistema de inventario y facturación, por lo que tengo un formulario para la manipulación de productos. He incluido en el citado form, la opción de poder generar un código de barras para cada ítem, ingresando su valor numérico; para ello uso la librería iTexSharp.
Todo iba bien en apariencia, hasta que decidí probar qué pasaría luego de generar uno, entonces aparentemente todo bien: grabo el archivo .jpg en una ruta especificada (lo defino paramétricamente por medio de una ventana de opciones), pero me he dado cuenta que al ingresar otra secuencia numérica, me genera la misma imagen que el anterior, es decir, no se libera de memoria el gráfico. El codebar lo muestro en un Picturebox y trabajo en Visual Basic 2012. Leí de usar el método "Dispose", pero no funciona.

Este es el código:
Rem importación de librerías
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
56
57
58
59
60
61
62
63
64
Imports System.Data
Imports System.Data.Odbc
Imports Microsoft.VisualBasic
Imports System.Windows.Forms.Form
Imports System.Drawing
Imports System.Drawing.Imaging
Imports System.Drawing.Drawing2D
Imports iTextSharp.text.pdf
Imports iTextSharp.text.pdf.BarcodeCodabar
 
'Botón para generar código de barras
Private Sub BtnGenBarra_Click(sender As Object, e As EventArgs) Handles BtnGenBarra.Click
    Dim bcode As New Barcode128
    bcode.BarHeight = 70
    bcode.Code = TxtCodigo.Text
    bcode.ChecksumText = True
    bcode.CodeType = Barcode.CODE128
    Try
        If Me.TxtCodigoBarra.Text <> Nothing Then
            Dim bm As New Bitmap(bcode.CreateDrawingImage(Color.Black, Color.White))
            Dim img As Image
            img = New Bitmap(bm.Width, bm.Height)
            Dim g As Graphics = Graphics.FromImage(img)
            g.FillRectangle(New SolidBrush(Color.White), 0, 0, bm.Width, bm.Height)
            g.DrawImage(bm, 0, 0)
            PictureBarCode.Image = img
        Else
            MessageBox.Show("Debe escribir un valor para el Código de Barras", "Aviso del Sistema", _
                            MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
            Me.TxtCodigoBarra.Focus()
        End If
    Catch ex As Exception
        MsgBox("No se pudo generar el código de barras")
    End Try
End Sub
 
'Botón y código para grabar imagen en disco
Private Sub GuardarCodeBar_Click(sender As Object, e As EventArgs) Handles GuardarCodeBar.Click
    If Me.TxtRutaBarCode.Text <> Nothing Then
        nombre_archivo = ruta_escogida & TxtCodigo.Text & ".jpg"
        Guardar_imagen()
    Else
        MessageBox.Show("Aún no se ha definido ruta para almacenar la imagen del código de barras", _
                        "Advertencia", MessageBoxButtons.OK, MessageBoxIcon.Information)
    End If
End Sub
 
Sub Guardar_imagen()
    Try
        PictureBarCode.Image.Save(nombre_archivo, System.Drawing.Imaging.ImageFormat.Jpeg)
        MessageBox.Show("Imagen guardada exitosamente", "Aviso del Sistema", MessageBoxButtons.OK, MessageBoxIcon.Information)
    Catch ex As Exception
        MsgBox(ex.ToString)
    End Try
End Sub
 
'Botón para limpiar datos de código de barras
Private Sub BtnLimpiar_Click(sender As Object, e As EventArgs) Handles BtnLimpiar.Click
    Me.TxtCodigoBarra.Text = Nothing
    Me.PictureBarCode.Image.Dispose()
    Me.PictureBarCode.Image = Nothing
    Me.PictureBarCode.Refresh()
    Me.TxtCodigoBarra.Focus()
End Sub

Este último código es el que pretendía ejecutar luego de almacenar la imagen del código de barras y actualizar la tabla de la base de datos.

Muchas gracias por su ayuda
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 Andres Leonardo
Val: 3.117
Oro
Ha mantenido su posición en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

Problema con código de barras iTexSharp

Publicado por Andres Leonardo (1798 intervenciones) el 19/12/2018 17:56:21
Amigo

una pregunta disculpa por que quieres generar un codigo de barra en imagen para cada producto si se supone que esto ya existe es decir es el codigo alfanumerico, Adicional cuando almacenas el codigo (que en realidad es un alfanumerico que se muestra con la fuente codebar) solo validas el codigo alfanumerico leido o grabado y listo.

No entiendo para que quieres guardar la imagen del codebar (Disculpas por la intromision pero me parece errado hacer eso)


Respecfto a tu consulta, intenta borrar lo que tienes en el picute box dandole otro valor que se cargue (una imagen para liberar memoria ) y luego lo presentas la que debes.

Saludos
Andres
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Carlos
Val: 5
Ha aumentado su posición en 15 puestos en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

Problema con código de barras iTexSharp

Publicado por Carlos (3 intervenciones) el 19/12/2018 18:47:11
Andrés Leonardo:
Gracias por tomarte el tiempo de responder mi consulta. La idea de generar la imagen es entre otras cosas, para efectos de reportes en el futuro, además se trata que sea flexible y que trabaje con cualquier tipo de negocio. Entiendo lo que me dices: las grandes fábricas envían empaquetados sus productos con su respectivo código de barras, pero ¿qué tal con los negocios pequeños o los artesanos? He oído el caso por ejemplo, de un amigo que hizo un sistema para una librería y resulta que ellos por ejemplo, determinadas ofertas o paquetes de productos, les asignan sus propios códigos para la venta.
Ya que pareces conocer mucho, siguiendo el código que mostré ¿cómo harías para que aparezca el texto o número en la imagen de código de barras?
Entiendo que me dices que antes de asignar la imagen de codebar, ponga otra imagen antes para que pueda hacer bien el cambio. Estaba viendo un artículo en ingles de Visual Basic 2005, en donde dice que al colocar una imagen en un picturebox, ésta se bloquea hasta que se cierra el formulario ¿Esto quieres darme a entender? Acá el link del artículo:
https://support.microsoft.com/en-us/help/309482/image-file-is-locked-when-you-set-the-picturebox-image-property-to-a-f

Además, como dije antes: el hecho de generar la imagen es opcional. Te adjunto la imagen de la idea de mi form, con su respectiva ventana de parámetros
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Andres Leonardo
Val: 3.117
Oro
Ha mantenido su posición en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

Problema con código de barras iTexSharp

Publicado por Andres Leonardo (1798 intervenciones) el 19/12/2018 21:09:26
Hola Amigo ..

claro respecto a este

Empaquetados sus productos con su respectivo código de barras, pero ¿qué tal con los negocios pequeños o los artesanos? He oído el caso por ejemplo, de un amigo que hizo un sistema para una librería y resulta que ellos por ejemplo, determinadas ofertas o paquetes de productos, les asignan sus propios códigos para la venta.

Entiendo por eso te digo tu generas el codigo de barra por ejemplo
Codigo --- Producto
15465Adasd --- Sombrero de paja Toquilla color Trigo

en realidad el codigo es 15465Adasd , luego que el codigo de barras se vean las Barritas ... esta bien pero eso no es una imagen es nada mas un texto que dice 15465Adasd pero con la fuente codigo de barras....

mira por ejemplo acabo de bajar una fuente en excel .. l a 39 que es un tipo de fuente de codigo dfe barras , pues mira en la celda A esta el codigo del producto de mi ejemplo y en el B esta el mismo codigo ,. fijate en el valor de la formula,, pero si ves la fuente que la presenta no es comic, ni arial ni nada es solo la fuente codigo de barra y con esto ya lo reconoce .. si le doy bucar ese codigo lo encontrata por que eso es en alfanumerico .. solo que se presenta como codigo de barras

por ende no deberias ponerlo como un picture si no como textbox pero con la fuente tipo codigo de barras y listo .....

codebar
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Carlos
Val: 5
Ha aumentado su posición en 15 puestos en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

Problema con código de barras iTexSharp

Publicado por Carlos (3 intervenciones) el 19/12/2018 21:52:30
Gracias de nuevo por tu tiempo. Ahora, esa fuente es exclusiva para Excel, pero recuerda que estoy trabajando en Visual Basic; aunque no he leído tanto sobre el tema, si tengo una idea de lo que me hablas, pero en realidad no entiendo cuál es tu punto. Me imagino que es para informarme, no?
Para resumir la respuesta que necesito, anteriormente me dijiste que antes de generar la siguiente imagen superponga otra sobre el picturebox ¿es así?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Andres Leonardo
Val: 3.117
Oro
Ha mantenido su posición en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

Problema con código de barras iTexSharp

Publicado por Andres Leonardo (1798 intervenciones) el 19/12/2018 22:34:01
Amigo te lo digo para que evites el dolor de cabeza de guardar una imagen cuando puedes solo presentarlo leyendo el campo codigo y presentarlo en un label... el cofigo lo determinas tu .... , por ahoira te mando un ejempklo de VB2010 mostrando el codebar en un label

espero te ayude a incorporarlo en tu proyecto ..... y asi lo puedas utilizar... mira que uso la misma fuente...

Si tienes una duda avisame
codebar3
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar