Este artigo tem a intenção de dar continuidade ao artigo “Gerando PDF: iText” mostrando mais algumas funcionalidades avançadas. Essa API do iText possui uma série de classes para a manipulação e geração de arquivos no formato PDF que contenham código de barras.

Nosso primeiro passo deve ser adicionar o jar, como no artigo anterior (//www.devmedia.com.br/post-18843-Gerando-PDF--iText.html), do iText ao seu projeto (para os nossos exemplos podemos usar um aplicação Java Project normal).

O jar pode ser baixado em:

http://sourceforge.net/projects/itext/files/iText/iText5.0.5/iText-5.0.5.jar/download

Após fazer o download, devemos adicionar ao  "Java Build Path" da aplicação, clique nas propriedades do seu projeto, e adicionar como "Add External Jar" em "Libraries".

O iText dá suporte aos principais tipos de código de barra existentes, como Barcode39, BarcodeEAN (EAN13, EAN8, UPCA, UPCE), EANSUP, Barcode128 (128, 128_UCC, 128_RAW), etc.

Se dá início ao processo com um objeto do tipo de código de barra desejado. Após isso, deve-se usar o método setCode para selecionar o valor desejado do próprio código de barras e no fim é usado o método createImageWithBarcode. Finalmente acrescenta-se o conteúdo (o código de barra) em um documento.

A seguir apresentamos um código simples para geração de um barcode EAN com valor hardcode 9740201615443:


PdfContentByte cb = writer.getDirectContent();

BarcodeEAN codeEAN = new BarcodeEAN();

codeEAN.setCodeType(codeEAN.EAN13);

codeEAN.setCode("9740201615443");

Image imageEAN = codeEAN.createImageWithBarcode(cb, null, null);

document.add(new Phrase(new Chunk(imageEAN, 0, 0)));


É essencial perceber que todas as classes de código de barras implementam a classe Barcode (abstrata). Existem classes para os principais tipos de códigos de barra, como também métodos para manipulação dos próprios. Abaixo temos alguns exemplos de imports para utilizarmos os mais variados tipos de códigos de barra:

import com.itextpdf.text.pdf.Barcode;

import com.itextpdf.text.pdf.BarcodeEAN;

import com.itextpdf.text.pdf.BarcodeEANSUPP;

import com.itextpdf.text.pdf.BarcodeInter25;

import com.itextpdf.text.pdf.Barcode128;

import com.itextpdf.text.pdf.Barcode39;

import com.itextpdf.text.pdf.BarcodePostnet;


No código abaixo podemos ver uma classe simples que gera um arquivo PDF no Drive C:


package devmedia;

import java.io.FileOutputStream;


import com.itextpdf.text.Chunk;

import com.itextpdf.text.Document;

import com.itextpdf.text.Image;

import com.itextpdf.text.PageSize;

import com.itextpdf.text.Phrase;

import com.itextpdf.text.pdf.BarcodeEAN;

import com.itextpdf.text.pdf.PdfContentByte;

import com.itextpdf.text.pdf.PdfWriter;


public class CodigoDeBarras {


   public static void main(String[] args) {


       Document document = new Document(PageSize.A4, 50, 50, 50, 50);


       try {


           PdfWriter writer = PdfWriter

                   .getInstance(

                           document,

                           new FileOutputStream(

                                   "C:\\Codigo_Barra_iText.pdf"));


           document.open();


           PdfContentByte cb = writer.getDirectContent();


           BarcodeEAN codeEAN = new BarcodeEAN();


           codeEAN.setCodeType(codeEAN.EAN13);


           codeEAN.setCode("9740201615443");


           Image imageEAN = codeEAN.createImageWithBarcode(cb, null, null);


           document.add(new Phrase(new Chunk(imageEAN, 0, 0)));


       }


       catch (Exception de) {


           de.printStackTrace();


       }


       document.close();


   }


}

Após a execução dessa classe, olhe em seu Drive C e busque pelo pdf de nome “Codigo_Barra_iText”.


Apresentamos, assim, um dos recursos muito utilizados em geração de arquivos de formato PDF, e bastante comum em sistemas web que geram boletos de contendo códigos de barra.


Outros Formatos:


A API iText, além de proporcionar a geração e manipulação de arquivos no formato PDF, permite também outros formatos, como HTML, XML e Rtf.

Para nosso próximo exemplo precisamos baixar o jar itext-2-1-3.jar no link:

http://www.jarfinder.com/index.php/jars/versionInfo/38462. E adicionar ao Build Path da aplicação conforme nosso primeiro exemplo do artigo.

Para a geração de documentos HTML, existe a classe HtmlWriter. Ela foi implementada pelos criadores do iText apenas por motivos de debug na elaboração da API como maneira de auxiliar na compreensão de geração de documentos no formato PDF.Paulo Soares e Bruno Lowagie, os idealizadores do iText, deixam claro no tutorial da API, e retificam que existem outras APIs de geração HTML bem mais elaboradas, mas que essa funcionalidade do iText pode ser um grande diferencial na geração de documentos em vários formatos.

A criação de um documento HTML é bastante simples. Precisamos usar a classe HtmlWriter, que se encontra no pacote com.lowagie.text.html .  A geração do documento segue os mesmos procedimentos já vistos nos exemplos anteriores:


HtmlWriter.getInstance(document, new FileOutputStream("C:\\DocumentoHTML.html"));


É importante saber, que é possivel adicionar metadados a sua página HTML, com uso dos métodos addTitle, addAuthor, addSubject e addKeywords. Além disso, existem metadados específicos para o formato, como addCreator e addHeader.

                           

A respeito da criação  de documentos Rtf, esse formato segue o mesmo padrão de arquivos PDF e HTML, com a utilização, principalmente da classe RtfWriter2. É notório que a classe  RtfWriter2 subsititui a classe RtfWriter. Não existem pontos comuns de share code entre as duas classes.  A classe RtfWriter tem o status de depreciada.

Finalmente, abaixo nosso tão esperado exemplo, uma classe que gera um documento HTML:


package devmedia;

import java.io.FileOutputStream;


import java.io.IOException;

import com.lowagie.text.Document;

import com.lowagie.text.DocumentException;

import com.lowagie.text.Paragraph;

import com.lowagie.text.html.HtmlWriter;


public class GeneratorOthers {


   public static void main(String[] args) {


       Document document = new Document();


       try {


           HtmlWriter.getInstance(document,


           new FileOutputStream("C:\\DocumentoHTML.html"));


           document.addTitle("Java ");


           document.addAuthor("Davi Gomes da costa");


           document.addSubject("Artigo iText");


           document.addKeywords("Metadata, iText");


           document.addHeader("Expires", "0");


           document.addCreator("iText geração HTML");


           document.open();


           document.add(new Paragraph("Java Linha de Código"));


       } catch (DocumentException de) {


           System.err.println(de.getMessage());


       } catch (IOException ioe) {


           System.err.println(ioe.getMessage());


       }


       document.close();


   }


}


Para maiores informações sobre essa fantástica API veja as referências.




Referências:

http://itextpdf.com/
http://prdownloads.sourceforge.net/itext/