Software Guru Conference & Expo 2014

Generación de códigos de barras

Les comparto una prueba de concepto que realice para implementar la generación de códigos de barras en una aplicación de escritorio.

El conocer bien el api de java es una ventaja enorme cuando te enfrentas con los problemas diarios del trabajo (claro si es que trabajas como un umpa lumpa de IT). Pero también es necesario saber donde buscar tanto proyectos como fragmentos de código que te puedan ser útiles.

Les comento lo que me paso un buen amigo (El típico amigo emprendedor) llega de urgencia conmigo porque acaba de poner su changarro de venta de quesos, y este cerro un trato con un cliente, el cual le exige que sus quesos tengan un código de barras para que el los pueda agregar de manera más fácil en su inventario.

Una ves que me comento esto, como nunca había desarrollado algo similar, me dedique a buscar un proyecto open source que implementara algo relacionado. Donde acostumbro a buscar este tipo de proyectos es en:

y en Sorce Forge me encontré una librería ( javabar ) muy fácil de usar que me gusto mucho, y ahora si comencemos a ver como generar los códigos de barras.

    1. Primero que nada descargar la librería de javabar.jar

    2. Incluir la librería en el classpath o al IDE.

    3. A jugar con la librería.

Primero debemos saber que existen varios estándares para códigos de barras, el que utilice en el ejemplo es el UPCA ( Universal Product Code ) .

Establecemos la instancia para poder generar códigos bajo ese estándar:

          final BarCodeRenderer barCodeRenderer = new UPCABarCodeRenderer();

La librería javabar.jar contiene una interfaz BarCodeRender. La cual sus implementaciones nos permite mostrar el código generado, en este caso utilizamos UPCABarCodeRender.

BarCodeRender contiene el método render() el cual recibe como parámetros:

  • Graphics g: Superficie donde se generará el código.
  • String barCode: el valor del código. Este código para el estándar UPCA debe de ser solo digitos debe de ser un total de 11 digitos el digito checador se generará automaticamente para que cumpla con el estándar (12 digitos).
  • int narrowBarWidth: ancho de la barra.
  • int barHeight: altura de la barra
  • int textHeight: Altura del texto que será desplegado debajo del código de barras, si el valor de la altura es cero no se desplegará nada.
  • Ahora pintamos el código en un lienzo, en este caso lo pintamos sobre un JPanel y re definimos su método paint().

                    JPanel panel = new JPanel() {
                            public void paint(Graphics g) {
                                    Dimension size = getSize();
                                    g.setColor(getBackground());
                                    g.fillRect(0, 0, size.width, size.height);
                                    g.setColor(getForeground());
                                    g.translate(10, 10);
                                    barCodeRenderer.render(g, barCode, 1, 80, 12);
                            }
                    };

    Listo !! lo que queda es agregar el panel en donde lo queramos mostrar:

            frame.add(panel);

    Les dejo el código que realice para la prueba de concepto espero les sea útil.

AdjuntoTamaño
SampleBarCode.rar26.03 KB

Comentarios

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de OscarRyz

Alguna vez hice algo similar,

Alguna vez hice algo similar, pero todo consistía en ponerle el tipo de letra por algo como noseque9 ( no recuerdo como se llama ) pero era:

label = new JLabel();
label.setFont( new Font( "noseque9", Font.PLAIN, 42 ) );

El nombre de la letra lo saque del menú de word de letras.

Por lo que entiendo lo que hace el código que muestras es hacerlo a pie ( en vez de usar las letras del sistema ) +1

Imagen de Shadonwk

efectivamente hoy en día

efectivamente hoy en día basta con solo descargar la fuente (tipo de letra) lo metes en tu app como un recurso y mandas a imprimir una cadena de texto en esa fuente, es realmente muy sencillo. ;)

Imagen de francisco.santiagoj

QR Code

Que tal,

Estoy muy interesado en la creación de alguna aplicación de preferencia Web que sirva para leer códigos de Barra para la administración de unos tanques que utilizamos en la empresa donde trabajo, la idea es tener un control de que tanque va a que lugar osea que tanque tiene nuestro cliente, en que estado esta y todo eso, tendríamos los datos en una Base de datos en nuestro corporativo y los movimientos se realizaran en la planta. Estuve leyendo que el código QR esta muy en boga, ¿sabe si hay alguna api en JAVA que trabaje con este código?.

Saludos

Imagen de ezamudio

QR

Hay APIs para generar códigos QR y hay APIs para interpretarlos (obviamente que hay ambas funcionalides para Java). La cosa es que para interpretarlos, necesitas una webcam, para tomar la imagen del código y enviarlo al server; lo mejor en ese caso es hacer un applet o un programa Flash que use la webcam de la compu, detecte el código QR, lo interprete y ya solamente mande los datos contenidos en el código al servidor (o los ponga en una forma o campo oculto o lo que sea, pero que al server no llegue la imagen sino solamente los datos del código).

La gran diferencia entre los códigos QR y los unidimensionales, es que guardan cadenas alfanuméricas de bastante mayor longitud. Otra diferencia importante es que pueden ser interpretados por cámaras de menor resolución, como cámaras de celulares (no sé si fueron creados expresamente para eso o si fue una de las primeras aplicaciones prácticas que les encontraron). Los códigos unidimensionales necesitan una cámara de mayor resolución para poder detectar las diferencias tan sutiles en el grosor de las líneas.

Imagen de OscarRyz

@Shadownk Pues hoy día y

@Shadownk Pues hoy día y hace años, yo lo hice hace.... casí 6 años. Si alguién tuvo una caja de télefono Nextel el seguramente el código de barras lo escribí yo :) :) :)

Con los scanner normales, ese código se lee como texto y ya, es como si alguién escribiera muy rápido.

Los QR que dice Enrique, aaaahi si ya es algo reciente para que vean.

Imagen de ezamudio

scanners

Si vas a hacer una app web pero vertical (para un uso muy específico, por un grupo de gente reducido, tipo una intranet, etc), puedes usar códigos unidimensionales y ponerle a las compus un scanner de esos de plumita, hay unos USB y antes había unos que ni driver necesitaban, iban entre el teclado y la compu y simplemente cuando leías un código, lo mandaban por ese puerto como si lo hubieras tecleado.

Con los códigos unidimensionales tienes también la ventaja de que son numéricos y si no los puede leer el scanner, el usuario lo puede teclear manualmente.

Imagen de francisco.santiagoj

Código unidimensional

Me emocione al probar la api de I-nigma que lee los códigos QR, pero tienes razón para un aplicación pequeña que controlara la Ruta de los tanques la mejor opción es códigos unidimensionales, realmente no quiero invertir en software de Terceros creo que esta api si me la podría aventar yo. Lo que no sabría es como hacer mandar a la aplicaciones (un input text) el código del tanque... Con la aplicación de @davo ya vi como imprimir el código.

Saludos

necesito ayuda para esto de

necesito ayuda para esto de generar codigos de barras, por favor lo antes posible, hice todo lo que dice pero nada, al parecer hice algo mal o nese que pasa, podrian ayudarme?