quarta-feira, 14 de outubro de 2009
Como gerar códigos de barras com java
Olá a todos novamente!
Estou aqui para apresentar um post bastante interessante, sobre como gerar códigos de barras com java.
Inicialmente para fazer isso, nós precisaremos da biblioteca "barbecue.jar".
A Barbecue é uma biblioteca java open-source que fornece meios para criar códigos de barras para impressão e visualização em suas aplicações.
Vocês poderão encontrar a documentação dessa biblioteca em:
http://barbecue.sourceforge.net/apidocs
Assim como efetuar o download.
Inicialmente nós deveremos possuir o arquivo barbecue.jar e inseri-lo dentro do nosso projeto.
Feito isto nós já temos a possibilidade de utilizar as várias opções que esta maravilhosa biblioteca nos disponibiliza.
O código que mostrarei logo abaixo terá como função gerar um código de barras e salva-lo como uma imagem no diretório raiz do computador.
public void GeraCodigoBarras(String value) {
try {
01. net.sourceforge.barbecue.Barcode barcode = BarcodeFactory.createCode128(value);
02. barcode.setDrawingText(false);
03. BufferedImage image = new BufferedImage(100, 150,BufferedImage.TYPE_BYTE_GRAY);
04. Graphics2D g = (Graphics2D) image.getGraphics();
05. g.setBackground(Color.BLUE);
06. barcode.draw(g, 10, 56);
07. File f = new File("c:/barras.jpg");
08. File f1 = new File("c:/barras.png");
09. File f2 = new File("c:/barras.png");
10. BarcodeImageHandler.saveJPEG(barcode, f);
11. BarcodeImageHandler.savePNG(barcode, f1);
12. BarcodeImageHandler.saveGIF(barcode, f2);
} catch (Exception ex) {
ex.getMessage();
}
}
Como podem ver, o valor do código de barras é passado como parametro, sendo ele uma String.
Na linha 1 nós criamos um objeto do tipo barcode. Este objeto provem de uma classe abstrata que extende a classe JComponent do swing e implementa a interface Printable do pacote print do awt.
É aqui que nós devemos setar qual é o modelo padrão do nosso código de barras. Por default ele vem com vários modelos podendo serem inseridos novos.
No comando "BarcodeFactory.createCode128(value);" é que podemos ver isto.
Ou seja, com isso estou dizendo que eu quero que meu código de barras seja criado com o modelo 128.
Exemplos de criação com outros modelos são:
BarcodeFactory.createEAN128(value) ;
BarcodeFactory.createEAN13(value);
BarcodeFactory.create3of9(value, false);
E por aí vai(Verifiquem na documentação).
Por default quando geramos um código de barras toda a numeração dele é inserida logo abaixo da imagem.
A linha de comando número 2 é responsavel por dizer que a numeração não deverá ser impressa junto com a imagem do código. Mas aí fica a critério do desenvolvedor. Caso queiram que a numeração venha junto com a imagem, não escrevam a linha 2 ou declare-a como true.
Nas linhas 3 à 6 nós desenhamos a imagem que será salva.
Nas linhas 10,11 e 12 nós estamos salvando a imagem nos respectivos formatos que vocês podem ver.
Este método recebe num parâmetro o objeto barcode já desenhado e no outro um objeto File que mostrará o caminho para onde a imagem deverá ser salva.
Com isso caros amigos nós teremos o nosso código de barras salvo em uma imagem.
Com a classe Barcode nós também conseguimos visualizar o código de barras antes de salva-lo.
Com o método creatImage que nos retorna um objeto do tipo Image, nós conseguimos visualizar este código de barras sem que pra isso tenhamos que salva-lo em disco.
Image image= barcode.createImage(90, 10);
//Com o objeto Image em mãos podemos converte-lo em um ImageIcon e apresenta-lo em um JLabel
Bem amigos, por hoje irei ficando por aqui!
Mais uma vez espero ter ajudado!
Abraço a todos!
segunda-feira, 12 de outubro de 2009
Lendo xml com java
Olá a todos!
Na minha primeira postagem eu vou tratar de um assunto que é muito importante na vida de todo programador, e que me torrou o juizo por um certo tempo.
Como ler um arquivo xml, capturando seus dados e os convertendo em um objeto java.
Então vamos lá!
Primeiramente nós montaremos um esqueleto de um xml sem shema nem encoding

Pronto, com a estrutura reconhecida, nós podemos motar classes que terão como função guardar esses respectivos valores.
Então supondo que as classes devem ter construtores e seus respectivos gets and sets ,faremos:
public class Tag1{
private String filho1;
private String filho2;
private String filho3;
.
.
.
}
public class Tag2{
private double filho1;
private double filho2;
private double filho3;
.
.
.
}
Partindo para a captura dos dados, nós faremos da seguinte forma:
public void leituraXML(String fileName){
Tag1 t1 = new Tag1();
Tag2 t2 = new Tag2();
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse(new File(fileName));
NodeList nodes = document.getElementsByTagName("Tag paiA");
if (nodes.getLength() == 1) {
nodes = nodes.item(0).getChildNodes();
for (int i = 0; i < align="justify">Node node = nodes.item(i);
String name = node.getNodeName();
String value = node.getTextContent();
if (name.equals("Tag filha1"){
t1.setFilho1(value);
continue;
}
if(name.equals("Tag filha2")) {
t1.setFilho2(value);
continue;
}
if(name.equals("Tag filha3")) {
t1.setFilho3(value);
t1.setFilho3(value);
continue;
}
}
}
}
// agora pegaremos os dados da outra tagPai
nodes = document.getElementsByTagName("Tag paiB");
if (nodes.getLength() == 1) {
nodes = nodes.item(0).getChildNodes();
for (int i = 0; i < node =" nodes.item(i);" name =" node.getNodeName();" value =" node.getTextContent();" color="#3333ff">if (name.equals("Tag filha1"){
nodes = nodes.item(0).getChildNodes();
for (int i = 0; i < node =" nodes.item(i);" name =" node.getNodeName();" value =" node.getTextContent();" color="#3333ff">if (name.equals("Tag filha1"){
double dado=Double.parseDouble(value);//Devemos fazer o parse pois tudo que vem do xml é um String
t2.setFilho1(dado);
continue;
}
if(name.equals("Tag filha2")) {
t2.setFilho1(dado);
continue;
}
if(name.equals("Tag filha2")) {
double dado=Double.parseDouble(value);
t2.setFilho2(dado);
continue;
}
if(name.equals("Tag filha3")) {
t2.setFilho2(dado);
continue;
}
if(name.equals("Tag filha3")) {
double dado=Double.parseDouble(value);
t1.setFilho3(value);
continue;
continue;
}
}
}
}
}
}
Notem que ele gera uma arvore com o xml.
Onde nós recebemos um NodeList, nós só precisamos setar o nome da Tag pai e ter acesso a todos os elementos que há dentro dela.
E assim funciona para o arquivo completo.
Existe mais um caso que eu gostaria de mostrar a todos vocês.
Suponhamos que agora nós temos o seguinte esqueleto

E queremos pegar tudo o que há na tag secundária.
Então, o que fazer?
nodes = document.getElementsByTagName("Tag secundaria");
if(nodes.getLength==1){
nodes = nodes.item(0).getChildNodes();
for (int i = 0; i node.getLength;i++){
Node node = nodes.item(i);
String name = node.getNodeName();
String value = node.getTextContent();
if (name.equals("Valor X")) {
objeto.setValorX(value);
continue;
}
if (name.equals("Valor Y")) {
objeto.setValorY(value);
continue;
}
if(name.equals("Valores")){
NodeList nodes1=nodes.item(i).getChildNodes();
NodeList nodes1=nodes.item(i).getChildNodes();
for(int y=0;y <>
Node nodeF1=nodes1.item(y);
String nameF1=nodeF1.getNodeName();
String valueF1=nodeF1.getTextContent();
if(nameF1.equals("Valor A")){
objeto.setValorA(valueF1);
continue;
}
if(nameF1.equals("Valor B")){
objeto.setValorB(valueF1);
continue;
}
objeto.setValorB(valueF1);
continue;
}
}
}
Com isso pessoal nós conseguimos capturar os valores que encontram-se dentros das tags do xml.
Lembrando que esses valores vêm sempre em Strings.
E é isso!
Espero que tenha ajudado...
Abraço a todos!
Assinar:
Postagens (Atom)