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
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
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
0