La idea es simple, hacer una secuencia de carácteres un código de barras con una de las tantas librerías en java para ello, como barcode4j
Hacernos con la dependencia:
- Desde su pagina de sourceforge podemos descargarnos el jar por versiones, link
- Desde el repositorio de maven Maven repository, podemos descargar el jar como incluirlo en una dependencia en nuestro pom
Empezar a codear:
- Creando un objeto de barcode4j que generará el codigo de barras:
- Code39Bean codebean = new Code39Bean();
- Al momento de crearlo, tomará por defecto estos valores:
- De aquí nos importará setear: doQuietzone, moduleWidth, wideZone
- Setear el codebean:
- moduleWidth define el ancho del módulo
- recibe un 'double', que podemos obtener a través de funcion de la clase de barcode4j UnitConv:
- esta funcion es in2mm convierte pulgadas en milimetros (inches to milimetres) y le pasamos por cada pulgada la profundidad que definamos(dpi)
- final int dpi = 150;
- double ancho = UnitConv.in2mm(1.0f / dpi);
- codebean.setModuleWidth(ancho);
- esta funcion es in2mm convierte pulgadas en milimetros (inches to milimetres) y le pasamos por cada pulgada la profundidad que definamos(dpi)
- recibe un 'double', que podemos obtener a través de funcion de la clase de barcode4j UnitConv:
- wideZone Define el factor por el cual las barras anchas son más anchas que las barras estrechas
- codebean.setWideFactor(3)
- doQuietzone Establece si una zona tranquila debe ser incluida o no
- codebean.doQuietZone(false);
- moduleWidth define el ancho del módulo
- Y este objeto codebean generá con el método generateBarcode el código de barras como una imagen, recibiendo como parametros:
- un objeto BitmapCanvasProvider a tráves de su constructor con muchos parámetros:
- un OutputStream que contenga la ruta donde se va a crear la imagen.
- el tipo MIME del formato de salida deseado, le pasamos el string "image/x-png"
- la resolucion, puediendo reutilizar el int que se determina al principio
- el tipo de imagen deseada, una constante de la clase BufferedImage.TYPE_BYTE_BINARY
- un boolean para determinar si habilitar el anti-aliasing
- un entero fijar la orientación( solo puede ser en grados 0, 90, 180, 270, -90, -180 o -270 )
1 2
BitmapCanvasProvider canvas = new BitmapCanvasProvider(out, "image/x-png", dpi, BufferedImage.TYPE_BYTE_BINARY, false, 0);
- la secuencia de caracteres a convertir en codigo de barras en forma de String
- un objeto BitmapCanvasProvider a tráves de su constructor con muchos parámetros:
Todo el código completito para poner en main y salir andando:
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 | System.out.println("Creando su código de barras"); // Creando el bean de barcode Code39Bean codebean = new Code39Bean(); // Se declara los pixels por pulgada = dpi (Dots Per Inch) final int dpi = 150; // Configurando el generador de barcode /** hace la distancia entre las barras, del ancho exacto a 1 pixel **/ double ancho = UnitConv.in2mm(1.0f / dpi); /** Establece el ancho del módulo estrecho **/ codebean.setModuleWidth(ancho); /** Define el factor por el cual las barras anchas son más anchas que las barras estrechas **/ codebean.setWideFactor(3); /** Establece si una zona tranquila debe ser incluida o no **/ codebean.doQuietZone(false); // Abriendo el archivo de salida String directorio = "resources/images/"; File carpeta = new File(directorio); if(!carpeta.exists()){ carpeta.mkdirs(); } String nombreArchivo = "codigoBarras.png"; File miFile = new File(directorio + nombreArchivo); OutputStream out = null; BitmapCanvasProvider canvas; try { out = new FileOutputStream(miFile); // Configurando el 'canvas provider' para un PNG monocromatico canvas = new BitmapCanvasProvider(out, //el outputstream para escribir "image/x-png", //el tipo MIME del formato de salida deseado dpi, //la resolución de imagen deseada BufferedImage.TYPE_BYTE_BINARY, //el tipo de imagen deseado false, //true si se debe habilitar el anti-aliasing 0); // Orientation debe ser 0, 90, 180, 270, -90, -180 or -270 // Generando el codigo de barras codebean.generateBarcode(canvas, "LegenDar10"); // Cerrando el fin de la generacion canvas.finish(); } catch(IOException ioe){ System.err.println("Ha ocurrido un error: " + ioe.getMessage()); } finally { try { out.close(); } catch (IOException e) { System.err.println("No se ha podido cerrar el outputstream " + e.getMessage()); } } System.out.println("Imagen creada exitosamente en " + miFile.getAbsoluteFile()); System.out.println("fin del programa =)"); System.exit(0); |
El resultado:
No hay comentarios:
Publicar un comentario