Codigo de Barras

36 respostas
samea

Oi pessoal estou com um problema, tenho que gerar um codigo de barras a partir de um numero de matricula, bom o problema maior é que eu não sei como gerar codigo de barras em java, pesquisando eu lhe o tutorial do Daniel Gonçalves sobre o assunto, e vi outro exemplo no GUJ também. O artigo do Daniel é muito bom mas eu não sei muito por isso, estou com muitas duvidas e a primeira é de quando eu criar o meu projeto ele tem que ser dinamic web project ou java project mesmo, estou perguntando isso porque vi em um exemplo aqui no GUJ que tenho que criar além das classes Java, jsp e html.
Se alguem poder me dar uma dicas mais do inicio mesmo da criação do projeto eu ficaria grata.
Obrigada pela atenção.
bjokas

36 Respostas

Fernando_Generoso_da

Eu utilizo essa api para gerar código de barras:

Fernando

M

Quanto a ser web ou swing ai vai da tua necessidade tanto um quanto o outro você poderá gerar código de barras.

Se esses códigos de barras são para controle interno acredito que você precise usar código de barras Code39 ou Code128 dependendo da sua necessidade. Recentemente eu fiz algo usando código de barras com Code39 usando a api barbecue sem problemas.

samea

Eu estava imaginando uma coisa totalmente diferente para o codigo de barra,
pensei que teria um “imagem” para cada numero, quer dizer uma barra para represntar cada dos
dez digitos utilizados [telefone removido]
e os meus numeros seriam transformados nessa imagens na hora de imprimir na tela
seriam 10 diferentes imagens de linhas cada uma representaria um numero.

mas vc naum pode postar um exemplo ai, naum consegui fazer
com o do tutotial doDaniel Gonçalves, eu
sou iniciante!!

M

você deu uma olhada no barbecue?

Vou procurar o projeto que eu usei e ja posto aqui

M
/**
     * Método responsável por gerar código de barras Code39
     * @param value Valor que será transformado em código de barras
     */
    public void GeraCodigoBarras(String value){
        try{
            Barcode barcode = BarcodeFactory.create3of9(value, false);

            BufferedImage image = new BufferedImage(220, 130, BufferedImage.TYPE_BYTE_GRAY);

            Graphics2D g = (Graphics2D) image.getGraphics();
            g.setBackground(Color.BLUE);

            barcode.draw(g, 10, 56);

            
           File f = new File(value + ".jpg");

            // Let the barcode image handler do the hard work
            BarcodeImageHandler.saveJPEG(barcode, f);
        }catch(Exception ex){
            ex.getMessage();
        }
    }

Esse método gera o código de barras a partir do parâmetro que você passa, no seu caso seria o número de matrícula. Do jeito que está ai não mostra na tela apenas cria um arquivo jpg no diretório raíz do sistema mas se você quiser imprimir é só manipuar um pouco o método que você consegue :)

É só pra você ter uma idéia de como funciona, e vá até o site da api barbecue e baixe o jar e adicione a sua aplicação você precisará de alguns imports.

samea

Obrigada.

M

Qualquer duvida tamo ae x)

samea

Eu ainda consegui, e estou com uma pequena duvida.
Onde esta sendo criado as barras do codigo de barras??
Da pra mim criar apenas essas barras, quer dizer tem como eu criar
10 barras diferentes uma da outra???
onde cada uma represente um numero
E se eu fosse criar apenas essas barras que objetos elas seriam???
Image, boolean, que objeto??
Vc pode me tirar essa duvidas??

obrigada pela atenção

M

as barras são criadas nessa linha:

Barcode barcode = BarcodeFactory.create3of9(value, false);

onde value é o valor que você vai passar, pode ser tanto numérico quanto char

o Barbecue cria o código de barras integral você passa o codigo que quer que seja gerado o código de barras e o método acima faz o trabalho.

Para criar o código de barras é um objeto do tipo Barcode.

Vale lembrar que você precisa adicionar o jar do barbecue na sua app.

T

samea:
Eu estava imaginando uma coisa totalmente diferente para o codigo de barra,
pensei que teria um “imagem” para cada numero, quer dizer uma barra para represntar cada dos
dez digitos utilizados [telefone removido]
e os meus numeros seriam transformados nessa imagens na hora de imprimir na tela
seriam 10 diferentes imagens de linhas cada uma representaria um numero.

Códigos de barras não funcionam exatamente assim. Eles costumam combinar alguns dígitos em algumas combinações de barras. Veja este site:
http://www.makebarcode.com/specs/speclist.html
E é por isso que é um pouco mais complicado do que você achou.

samea
Ai  valeu as dicas pessoal, mas é muito mais complicado do que eu pensava!

Bom mas no tutorial do Daniel Gonçalves ele diz que os fontes estão

em  barcode2d-fontes.jar, so que não esse fontes em lugar nenhum para download

alguem sabe se ha o download de fonttes???

Ou tem algum tutorial mais simplificado que ensine de formas mais detalhada.

É que eu não sou profissional, como ja disse antes estou começando

a desenvolver em java a pouco tempo.

Por favor postem tutotrias que ensinem a desenvolver o codigo ou codigos fontes

eu ja baixei o barcode, eu tenho que chamar ele dentro da classe prinicpal como

no look and feel???

quero dizer para que eu use o look and feel eu tenho que chamar ele assim:

try{

UIManager.setLookAndFeel(com.birosoft.liquid.LiquidLookAndFeel);

SwingUtilities.updateComponentTreeUI(this);

}catch(Exception erro) {

JOptionPane.showMessageDialog(null,erro);

}

Eu também vou ter que fazer isso para o barcode.
Por favor me ajudem postem tutorias, fonte, tudo.

M

Olha, se você usar o barbecue não vai precisar fazer nada só colocar o jar na sua aplicação e chamar os métodos certos. Mas se você quiser criar na mão ai sim você vai precisar das imagens.

Você não precisa chamar na sua classe principal só faz o import necessário na classe que você vai usar os métodos.

samea

Ah!
Entende Markin, e consegui baixar o barbecue-1.1.jar
so ta dadndo um erro nessa linha aqui;

BarcodeImageHandler.saveJPEG(barcode, f);

ele não me da essa opção as unicas opções que ele me da são:

BarcodeImageHandler.class;

essa:

BarcodeImageHandler.getImage(barcode);

essa:

BarcodeImageHandler.outputBarcodeAsJPEGImage(barcode, f);

e essa:

BarcodeImageHandler.this;

o que eu tenho que fazer???

M

você fez o import da classe BarcodeImageHandler? :slight_smile:

Fernando_Generoso_da

aproveitando o tópico, 2 coisas:

  • Como vocês enviam para a impressora o código de barra? que formato? que impressora utilizam?
  • Conhecem algum emulador de impressora de Código de barras, tipo emuladores de impressão fiscal??

Fernando

samea

sim eu ja importei o import net.sourceforge.barbecue.BarcodeImageHandler;
mas não me da essa opção.

M

Ué… deveria dar ^^ vou ver como ta meu código aqui não me lembro mais

M

acabei de testar aqui tem essa opção normalmente o.o

M

se for possível posta o seu método aqui :slight_smile:

samea
Eu criei essa telinha por que quero que o que contenha no meu codigo seja esses dados valor data matricula moeda e medição o codigo é esse da tela que chama o metodo que vc me passou quando eu clicar no botão de gerar Codigo de barras a unica coisa que eu mudei no seu metodo foi que eu coloquei um valor no value ai esta a minha classe e o seu metodo me ajuda ai or favor.
/**
 * 
 */
package aguas.amazonas;

import GeraArquivo;
import Itau;

import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JSeparator;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;

/**
 * @author Sâmea Brazão
 *
 */
public class Principal extends JFrame implements ActionListener{
	private Object Aguas;// = null;
	
	/*public Aguas(){
		initComponents();
	}*/
	private JLabel lvalor, ltitulo, lmatricula, ldata, lmoeda, lmedicao;
	private JTextField tvalor, tmatricula, tdata, tmoeda, tmedicao, tresultado;
	private JButton CmdNossoNumero, CmdLinhaLegivel, CmdCodigoBarras;
	private JScrollPane js;
	private JSeparator slinha;
	
	private void setCenter(JFrame frame)
    {
        Dimension paneSize = frame.getSize();
        Dimension screenSize = frame.getToolkit().getScreenSize();
        frame.setLocation((screenSize.width - paneSize.width) / 2, (screenSize.height - paneSize.height) / 2);
    }
	public Principal(){
		{
	    	try{
	            UIManager.setLookAndFeel("com.birosoft.liquid.LiquidLookAndFeel");
	            SwingUtilities.updateComponentTreeUI(this);
	           }catch(Exception erro) {
	              JOptionPane.showMessageDialog(null,erro);
	           }


	        setSize(400, 360);
	        setResizable(false);
	        setTitle("Gerador de Código de Barras");
	        setCenter(this);
	        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	        Container cp = getContentPane();
	        cp.setLayout(null);
	        
	        ltitulo = new JLabel(" Parâmetros para gerar Código de Barras");
	        ltitulo.setFont(new Font("Dialog", Font.BOLD, 12));//definidndo a fonte
	        js = new JScrollPane(ltitulo);
	        js.setBounds(10, 05, 240, 21);
	        //js.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
	        cp.add(js);
	        
	        slinha = new JSeparator();
	        js = new JScrollPane(slinha);
	        js.setBounds(10, 27,370, 05);
	        //js.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
	        cp.add(js);
	        
	        lvalor = new JLabel("  Valor do Débito");
	        lvalor.setFont(new Font("Dialog", Font.BOLD, 12));
	        js = new JScrollPane(lvalor);
	        js.setBounds(10, 40, 100, 20);
	        cp.add(js);
	        
	        tvalor = new JTextField("00,00");
	        js = new JScrollPane(tvalor);
	        js.setBounds(140, 40, 70, 25);
	        cp.add(js);
	        
	        lmoeda = new JLabel(" Codigo da moeda");
	        lmoeda.setFont(new Font("Dialog", Font.BOLD, 12));
	        js = new JScrollPane(lmoeda);
	        js.setBounds(10, 80, 110, 20);
	        cp.add(js);
	        
	        tmoeda = new JTextField("9");
	        js = new JScrollPane(tmoeda);
	        js.setBounds(140, 80, 30, 25);
	        cp.add(js);
	        
	        lmedicao = new JLabel(" Medição");
	        lmedicao.setFont(new Font("Dialog", Font.BOLD, 12));
	        js = new JScrollPane(lmedicao);
	        js.setBounds(10, 120, 60, 20);
	        cp.add(js);
	        
	        tmedicao = new JTextField("00000");
	        js = new JScrollPane(tmedicao);
	        js.setBounds(140, 120, 70, 25);
	        cp.add(js);
	        
	        ldata = new JLabel(" Data");
	        ldata.setFont(new Font("Dailog", Font.BOLD, 12));
	        js = new JScrollPane(ldata);
	        js.setBounds(10, 160, 35, 20);
	        cp.add(js);
	        
	        tdata = new JTextField("00/00/0000");
	        js = new JScrollPane(tdata);
	        js.setBounds(140, 160, 80, 25);
	        cp.add(js);
	        
	        lmatricula = new JLabel(" Nº da Matricula");
	        lmatricula.setFont(new Font("Dialog", Font.BOLD, 12));
	        js = new JScrollPane(lmatricula);
	        js.setBounds(10, 195, 100, 25);
	        cp.add(js);
	        
	        tmatricula = new JTextField("0000000000000000");
	        js = new JScrollPane(tmatricula);
	        js.setBounds(140, 195, 130, 25);
	        cp.add(js);
	        
	        slinha.setBounds(10, 230, 370, 20);
	        cp.add(slinha);
	        
	        
	        CmdNossoNumero = new JButton("Nosso Numero");
	        CmdNossoNumero.setBounds(10, 250, 118, 25);
	        CmdNossoNumero.addActionListener(this);
	        CmdNossoNumero.setToolTipText("Indica o noss CNPJ");
	        cp.add(CmdNossoNumero);
	        
	        CmdLinhaLegivel = new JButton("Linha Legivel");
	        CmdLinhaLegivel.setBounds(135, 250, 108, 25);
	        CmdLinhaLegivel.addActionListener(this);
	        CmdLinhaLegivel.setToolTipText("Mostra a linha Legivel");
	        cp.add(CmdLinhaLegivel);
	        
	        CmdCodigoBarras = new JButton("Código de Barras");
	        CmdCodigoBarras.setBounds(250, 250, 135, 25);
	        CmdCodigoBarras.addActionListener(this);
	        CmdCodigoBarras.setToolTipText("Número gerado para o codigo de barras");
	        cp.add(CmdCodigoBarras);
	        
	        tresultado = new JTextField();
	        js = new JScrollPane(tresultado);
	        js.setBounds(10, 280, 375, 35);
	        cp.add(js);     
	        

		}
	}
	@Override
	public void actionPerformed(ActionEvent e) {
		if(e.getSource() == CmdNossoNumero){
			tresultado.setText("00000000");
			/*GeraArquivo gera = new GeraArquivo(tvalor.getText(), t.getText(), tmoeda.getText(), txtDataVenc.getText(), txtAgCedente.getText(), txtCodCedente.getText(), txtCodMoeda.getText());
			Aguas = new Object(gera.getFileName());
			txtSaida.setText(Aguas.getNossoNumero());*/
			   
		}
		
		if(e.getSource() == CmdLinhaLegivel){
			GeraArquivo gera = new GeraArquivo(tvalor.getText(), tmoeda.getText(), tmedicao.getText(), tdata.getText(), tmatricula.getText());
			//Aguas = new Object(gera.getFileName());
			Aguas = gera.getFileName();
			//tresultado.setText(Aguas.getLinhaDigitavel());
			
		}
		if(e.getSource() == CmdCodigoBarras){
			tresultado = GeraCodigoBarras.main(null);
			
		}
	}
	public static void main(String[] args) {
		Principal app = new Principal();
		app.show();
		
	}

}

essa é o metodo que vc mandou como eu já disse só mudei o valor do objeto value.

/**
 * 
 */
package aguas.amazonas;

import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;

import javax.swing.JTextField;

import net.sourceforge.barbecue.Barcode;
import net.sourceforge.barbecue.BarcodeFactory;
import net.sourceforge.barbecue.BarcodeImageHandler;

public class GeraCodigoBarras {
	public void  GeraCodigoBarras(String value){  
 	   value = "1234";
        try{  
            Barcode barcode = BarcodeFactory.create3of9(value, false);  
  
            BufferedImage image = new BufferedImage(220, 130, BufferedImage.TYPE_BYTE_GRAY);  
 
           Graphics2D g = (Graphics2D) image.getGraphics();  
            g.setBackground(Color.BLUE);  
  
            barcode.draw(g, 10, 56);  
  
              
           File f = new File(value + ".jpg");  
  
           // Let the barcode image handler do the hard work  
          //BarcodeImageHandler.saveJPEG(barcode, f);  
        }catch(Exception ex){  
            ex.getMessage();  
        }  
    } 
	public static JTextField main(String[] args) {
		GeraCodigoBarras app = new GeraCodigoBarras();
		return null;
		
	}

}
Ai vc pode ver que eu importei o
import net.sourceforge.barbecue.BarcodeImageHandler;

Me ajuda ai por favor!
bjokas

M

Amanhã de manhã vou dar uma olhada em todo seu código e tentar descobrir o que há de erro :slight_smile:

M

Olha copiei tua classe GeraCodigoBarras e tirei o comentário da linha BarcodeImageHandler e deu tudo certo aqui, até com os mesmos imports que você fez e tá tudo normal não tá dando erro em nada o.o

M

Bom copiei tudo aqui do seu código e encontrei algumas coisas que podem ser o motivo de estar dando errado. Na parte:

if(e.getSource() == CmdCodigoBarras){ tresultado = GeraCodigoBarras.main(null); }
Você não ta chamando o método GeraCodigoBarras dentro da classe GeraCodigoBarras faz um teste assim. Vai na tua classe GeraCodigoBarras e tira o void. Entendeu? Assim você terá um construtor da classe com parâmetro string ai na chamada do método vc passa uma string vazia como parametro, ja que vc ta atribuindo o valor de value dentro do próprio método.

Entendeu?

samea

Ei markin me desculpe não ter respndido antes mas é que não estava na minha maquia, estou na maquina de outa pessoa. Ei mas o problema continua, e é naquela linha será que estou com barbecue errado?
O importe eu fiz correto!
Me da uma idéia ai por favor!!!
Tem alguma coisa que esteja faltando eu fazer???
bjokas

M

Olha pra falar a verdade eu não sei o que pode ser ^^ pega meu msn e tento te ajudar. Depois vc posta o resultado aqui pra todos aproveitarem.

MSN: [email removido]

samea

Me add no bate-papo do gmail
[email removido]
bjokas

S

Alguem sabe como fazer o barbecue criar a imagem na vertical, em vez de horizontal?

S

Ae galera uma biblioteca alternativa para Barcode, gostei muito ela caiu certinho no que eu precisava, uma bilioteca que imprima na vertical, e ainda seja compativel com java 1.4 e não utiliza SWING, assim posso rodar ela na J9 da IBM no Windows mobile

http://www.bokai.com

R

Aproveitando o post…
Alguém sabe como gerar o código de barras sem que na imagem gerada NÃO apareça o número correspondente.
Preciso que apareça somente a imagem do código de barras.

Att, Renata

S

Renata neste ferramente que citei acima, é possivel, vc seta com true ou false, se quer ou nao que o numero seja exibido, ou de uma forma mais dificil vc pega a imagem e corta a parte onde tah o numero, apenas diminuindo o tamanho da imagem, como o numero vai sempre em baixo do codigo, diminua a altura da imagem e fecho.

S

E ae galera, há a ferramenta que citei acima é paga e seu tempo de usao é de 28 dias, agora estou atras de uma free, se alguem puder me dar uma dica, preciso de uma biblioteca que rode no java 1.4 e que não utilize swing, pois estrou trabalhando com SWT, alguem ai conhece?

É possivel fazer uso de alguma biblioteca do ireport para contrução de codigos de barras? Valeu!!

Diego_Pereira

Olá galera,

Alguém poderia me dar o link para baixar o pacote barcode2d-fontes.jar ???
É que estou tentando gerar código de barras e preciso do pacote.
Ou se alguém tiver um exemplo completo pode indicar também.
Vlw.

Jefries

Prciso saber como gerar colocar a imagem, em um label, assim que eu gerei a imagem como eu coloco ela num label onde eu possa imprimir???

ajinfotec

rapaz tenho mesmo roblema para resolver.

felipedick

Galera to tomando o seguinte erro tentando gerar um código de barras no IReport:

2010-17-06 04:17 [ERROR] - Erro durante a execucao do metodo -> GeradorRelatorio.gerarRelatorio(.) - net.sf.jasperreports.engine.JRException: Incompatible com.lowagie.text.pdf.BarcodeInter25 value assigned to parameter codBarras in the Guia_Pagto_Eventos_Contingenciais dataset.
2010-17-06 04:17 [ERROR] - Erro durante a execucao do metodo -> ContaSuprimentoConsultarAction.execute(....) - net.sf.jasperreports.engine.JRException: Incompatible com.lowagie.text.pdf.BarcodeInter25 value assigned to parameter codBarras in the Guia_Pagto_Eventos_Contingenciais dataset.

Alguém sabe me dizer porque???
Estou criando o código de barras da seguinte forma:

BarcodeInter25 b = new BarcodeInter25();

			StringBuffer stLinhaDigitavel = new StringBuffer();

			stLinhaDigitavel.append((formulario.getCoBarras()).substring(0,11));
			stLinhaDigitavel.append((formulario.getCoBarras()).substring(14,25));
			stLinhaDigitavel.append((formulario.getCoBarras()).substring(28,39));
			stLinhaDigitavel.append((formulario.getCoBarras()).substring(42,53));

			b.setCode(stLinhaDigitavel.toString());

e passando pro IReport assim:

parametros.put("codBarras", b);

Será que alguém pode ajudar???

lazaropj

Aonde vejo esse tutorial desse tal Daniel aí?

Quero um ABC sobre isso

Criado 3 de junho de 2009
Ultima resposta 3 de nov. de 2010
Respostas 36
Participantes 11