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


Siguiendo la secuencia de pasos para generar un código de barras con barcode4j, esta vez el desafio es hacerlo en un simple JFrame:

Ingredientes

  • Una clase main, donde correr el pequeño jar, ésta llama a las siguientes.
  • Una clase encargada de la generación del código de barras, que contenga un método que devuelva un File con la imagen.
  • Otra clase encargada de la ventana, que reciba un File y lo ponga en una etiqueta dentro del marco.
La estructura del proyecto debería verse así: (en el pom.xml solo incluyo la dependencia de barcode4j)


La generación de código

 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
package com.dar10comyr.blogspot.main.barco;

import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;

import org.krysalis.barcode4j.impl.code39.Code39Bean;
import org.krysalis.barcode4j.output.bitmap.BitmapCanvasProvider;
import org.krysalis.barcode4j.tools.UnitConv;

public class MiBarco {

    public File getBarcode(String ean){
        Code39Bean codebean = new Code39Bean();
        final int dpi = 150;

        double ancho = UnitConv.in2mm(1.0f / dpi);
        codebean.setModuleWidth(ancho);
        codebean.setWideFactor(3);
        codebean.doQuietZone(false);

        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);
            canvas = new BitmapCanvasProvider(out, "image/x-png", dpi, BufferedImage.TYPE_BYTE_BINARY, false, 0);
            codebean.generateBarcode(canvas, ean);
            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());
            }
        }
        return miFile;
    }
}

La ventana

 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
package com.dar10comyr.blogspot.main.barco;

import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class Ventana {
    JFrame marco;
    JLabel etiqueta;
    ImageIcon imagen;

    public Ventana(File archivo){
        marco = new JFrame();
        marco.setSize(350, 300);
        marco.setLocationRelativeTo(null);
        marco.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        BufferedImage myPicture;
        try {
            myPicture = ImageIO.read(archivo);
            imagen = new ImageIcon(myPicture);
            etiqueta = new JLabel(imagen);
            marco.add(etiqueta);
        } catch (IOException e) {
            e.printStackTrace();
        }
        marco.setVisible(true);
    }
}

El main para correr todo =)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
package com.dar10comyr.blogspot.main.barco;

import java.io.File;

public class Main {
    public static void main(String[] args){
        MiBarco bar = new MiBarco();
        File imagen = bar.getBarcode("34198987");
        new Ventana(imagen);
    }
}

El resultado final

No hay comentarios:

Publicar un comentario