Esse artigo faz parte da revista Java Magazine edição 64. Clique aqui para ler todos os artigos desta edição

e; COLOR: red; FONT-FAMILY: Verdana; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial">

rdana">iText e JODConverter:

O iText é um projeto que permite criar novos arquivos PDF ou manipular existentes. Ele possui uma API considerada de baixo nível e é utilizado por várias ferramentas de geração de relatório. Utilizamos o iText para elaborar um simples algoritmo de criação de PDF a partir de um arquivo TXT. Também o utilizamos para criar arquivos PDF a partir de imagens JPG, GIF, PNG ou TIFF.

O JODConverter é uma API que facilita o uso do UNO (Universal Network Objects), que por sua vez, é uma API disponibilizada pelo Open Office para acessar remotamente suas funcionalidades. O UNO permite utilizar os algoritmos de conversão para PDF do Open Office, possibilitando converter arquivos de vários formatos como DOC, RTF, ODT, XLS, ODS, etc. O UNO é uma API de baixo nível, dessa forma, utilizamos o JODConverter que tem por objetivo, criar uma casca sobre o UNO facilitando a execução da conversão de documentos.

 

Portable Document Format (PDF) é um formato de arquivo criado pela Adobe Systems. O formato permite capturar e visualizar informações consistentes – a partir de quase todo aplicativo ou sistema operacional – e compartilhá-las praticamente com qualquer pessoa, em qualquer lugar. Por este motivo, tornou-se um formato muito popular para troca de documentos pela Internet, em um ambiente heterogêneo. O formato também é popular por agregar funcionalidades de assinatura digital, formulários e multimídia, e exibi-los de forma portável entre diferentes sistemas operacionais. Dessa forma, tornou-se muito comum para uma aplicação web exibir dados para o usuário no formato PDF. Seja em relatórios, seja em documentos importantes, como notas fiscais ou recibos.

Uma crítica comum que o PDF enfrentava tradicionalmente, era a de ser um formato de arquivo proprietário – apesar de ser, em grande parte, baseado no padrão PostScript. Mas a Adobe recentemente abriu a especificação do PDF, que foi ratificado em julho deste ano pelo padrão ISO 32000-1.

Neste artigo será demonstrado como utilizar Java para criar documentos PDF, a partir de documentos de suítes de escritório, imagens ou arquivos de texto. Isto será útil para aplicações que possuem documentos armazenados nesses formatos, mas desejam exibir o documento de maneira portável em um formato popular e read-only.

 

Ferramentas utilizadas

Iremos utilizar a biblioteca iText para converter arquivos TXT e imagens. Para converter documentos do Microsoft Office (ou Open Office) iremos utilizar o JODConverter.

O código fonte do artigo está disponível para download em formato ZIP no site da Java Magazine. Dentro do ZIP é possível encontrar todos os JAR’s necessários para rodar os exemplos com sucesso. Feito o download, inclua todos os JAR’s presentes na pasta lib no classpath da aplicação.

Caso o leitor queira, pode fazer o download dos projetos nos seus respectivos sites. Para efetuar o download, acesse o site da biblioteca iText e do projeto JODConverter (veja a seção de links no final do artigo). Inclua o único JAR do iText e todos os JAR’s presentes na pasta lib da distribuição do JODConverter no classpath.

 

Interface para conversão de documentos

Para tornar a conversão de documentos extensível e adaptável criamos a interface da Listagem 1. O contrato dessa interface é receber um array de bytes de um documento em formato específico e transforma-lo em PDF. Caso algum problema ocorra na conversão, uma exceção do tipo ImpossivelConverterDocumentoException será lançada.

O propósito da interface ConversaoParaPDF é não acoplar a aplicação com as API’s utilizadas. Isso permite que possamos mudar os algoritmos de conversão sem grandes impactos. Outro benefício é a possibilidade do uso de polimorfismo, como veremos mais adiante.

 

Listagem 1. ConversaoParaPDF.java - Interface a ser implementada pelos algoritmos de conversão.

public interface ConversaoParaPDF {       

  public byte[] converterDocumento(byte[] documentoParaConverter)

      throws ImpossivelConverterDocumentoException;

}

 

Conversão de arquivos de texto

Para converter um arquivo TXT para PDF utilizaremos uma biblioteca muito famosa no universo Java. O iText é uma biblioteca que permite criar arquivos PDF do zero ou abrir existentes e manipulá-los. Ele é utilizado por várias “engines” Java de geração de relatórios.

O algoritmo de conversão é muito simples. Lemos o arquivo TXT linha a linha, e então, inserimos no documento do iText um parágrafo para cada linha. Se a linha for vazia, adicionamos um parágrafo em branco.

Veja o algoritmo na Listagem 2. A classe ConversaoAPartirDeTexto implementa a interface ConversaoParaPDF e o método converterDocumento() apenas trata as exceções do iText, repassando a execução para o método converterInternamente().

 

Listagem 2. ConversaoAPartirDeTexto.java – Conversão de arquivos TXT para PDF utilizando o iText.

import java.io.*;

import com.lowagie.text.*;

import com.lowagie.text.pdf.*;

import br.com.jm.conversor.pdf.*;

...

Quer ler esse conteúdo completo? Tenha acesso completo