[Métodos] Generar codigos de barras y codigos QR - Codigo de barras en una imagen con Barcode4j


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);
          Este double ancho va a tomar un valor de 0.16933333743363618, reemplazando el valor por defecto de 0.1899999976158142
    • wideZone Define el factor por el cual las barras anchas son más anchas que las barras estrechas
      • codebean.setWideFactor(3)
      este valor por defecto era de 2.5
    • doQuietzone Establece si una zona tranquila debe ser incluida o no
      • codebean.doQuietZone(false);
      no se bien que es este factor pero por defecto era true
  • 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:
      1. un OutputStream que contenga la ruta donde se va a crear la imagen.
      2. el tipo MIME del formato de salida deseado, le pasamos el string "image/x-png"
      3. la resolucion, puediendo reutilizar el int que se determina al principio
      4. el tipo de imagen deseada, una constante de la clase BufferedImage.TYPE_BYTE_BINARY
      5. un boolean para determinar si habilitar el anti-aliasing
      6. 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

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