Gerar Arquivos PDF a partir de Aplicativos Java Dinamicamente

10
Gerar Arquivos PDF a partir de Aplicativos Java Dinamicamente Um guia passo-a-passo para iText, uma biblioteca de software livre que facilita a criação de PDF Amit Tuli , Software Engineer, IBM India Software Labs Resumo: Se seu aplicativo precisar gerar documentos PDF dinamicamente, você precisa da biblioteca iText. A biblioteca iText de software livre facilita muito a criação de PDF. Este artigo introduz iText e fornece um guia passo-a-passo para usá-la para gerar documentos PDF a partir de aplicativos de tecnologia Java™ . Criamos um aplicativo de amostra para um melhor entendimento de iText. Data: 24/Jan/2006 Nível: Intermediário Atividade: 4875 visualizações Comentários: 1 ( Visualizar ou incluir comentários) Média de classificação (baseada em 9 votos) Muitos aplicativos exigem geração dinâmica de documentos PDF. Esses aplicativos variam de bancos gerando extratos de clientes para entrega por e-mail até leitores comprando capítulos de livros específicos e recebendo- os no formato PDF. A lista é interminável. Neste artigo, vamos usar a biblioteca Java iText para gerar documentos PDF. Vou direcioná-lo por meio de um aplicativo de amostra para que você possa praticar e entender melhor. Familiarizar-se com iText iText é uma biblioteca Java disponível gratuitamente em Lowagie.com (consulte Recursos). A biblioteca iText é poderosa e suporta a geração de documentos HTML, RTF e XML, além de gerar PDFs. É possível escolher diversas fontes para que sejam usadas no documento. Além disso, a estrutura de iText permite gerar qualquer um dos tipos de documentos acima mencionados com o mesmo código. A biblioteca iText contém classes para gerar texto PDF em diversas fontes, gerar tabelas em documento PDF, incluir marcas d'água nas páginas, etc. Há muito mais recursos disponíveis com iText. Não seria possível demonstrar todos eles em um único artigo. Vamos cobrir o básico necessário para geração de PDF. Vamos usar o Eclipse para desenvolvimento de nosso aplicativo de amostra. Sendo um IDE de software livre, o Eclipse está disponível gratuitamente e é bem potente. É possível fazer download do Eclipse agora (consulte Recursos). A API de iText: Visão Mais Próxima com.lowagie.text.Document é a classe principal para a geração de documento PDF. Essa é a primeira classe a ser instanciada. Uma vez que o documento é criado, é necessário um escritor para escrever neste documento. com.lowagie.text.pdf.PdfWriter é um escritor de PDF. Algumas das outras classes comumente usadas são 11/12/2010 Gerar Arquivos PDF a partir de Aplicativo… ibm.com/developerworks/…/os-javapdf/ 1/10

Transcript of Gerar Arquivos PDF a partir de Aplicativos Java Dinamicamente

Page 1: Gerar Arquivos PDF a partir de Aplicativos Java Dinamicamente

Gerar Arquivos PDF a partir de Aplicativos JavaDinamicamenteUm guia passo-a-passo para iText, uma biblioteca de software livre que facilita a criação de PDF

Amit Tuli, Software Engineer, IBM India Software Labs

Resumo: Se seu aplicativo precisar gerar documentos PDF dinamicamente, você precisa da biblioteca iText. Abiblioteca iText de software livre facilita muito a criação de PDF. Este artigo introduz iText e fornece um guiapasso-a-passo para usá-la para gerar documentos PDF a partir de aplicativos de tecnologia Java™ . Criamosum aplicativo de amostra para um melhor entendimento de iText.

Data: 24/Jan/2006 Nível: Intermediário Atividade: 4875 visualizações Comentários: 1 (Visualizar ou incluir comentários)

Média de classificação (baseada em 9 votos)

Muitos aplicativos exigem geração dinâmica de documentos PDF. Esses aplicativos variam de bancos gerandoextratos de clientes para entrega por e-mail até leitores comprando capítulos de livros específicos e recebendo-os no formato PDF. A lista é interminável. Neste artigo, vamos usar a biblioteca Java iText para gerardocumentos PDF. Vou direcioná-lo por meio de um aplicativo de amostra para que você possa praticar eentender melhor.

Familiarizar-se com iText

iText é uma biblioteca Java disponível gratuitamente em Lowagie.com (consulte Recursos). A biblioteca iText époderosa e suporta a geração de documentos HTML, RTF e XML, além de gerar PDFs. É possível escolherdiversas fontes para que sejam usadas no documento. Além disso, a estrutura de iText permite gerar qualquerum dos tipos de documentos acima mencionados com o mesmo código.

A biblioteca iText contém classes para gerar texto PDF em diversas fontes, gerar tabelas em documento PDF,incluir marcas d'água nas páginas, etc. Há muito mais recursos disponíveis com iText. Não seria possíveldemonstrar todos eles em um único artigo. Vamos cobrir o básico necessário para geração de PDF.

Vamos usar o Eclipse para desenvolvimento de nosso aplicativo de amostra. Sendo um IDE de software livre, oEclipse está disponível gratuitamente e é bem potente. É possível fazer download do Eclipse agora (consulteRecursos).

A API de iText: Visão Mais Próxima

com.lowagie.text.Document é a classe principal para a geração de documento PDF. Essa é a primeira classe aser instanciada. Uma vez que o documento é criado, é necessário um escritor para escrever neste documento.com.lowagie.text.pdf.PdfWriter é um escritor de PDF. Algumas das outras classes comumente usadas são

11/12/2010 Gerar Arquivos PDF a partir de Aplicativo…

ibm.com/developerworks/…/os-javapdf/ 1/10

Page 2: Gerar Arquivos PDF a partir de Aplicativos Java Dinamicamente

fornecidas abaixo:

com.lowagie.text.Paragraph -- Essa classe representa um parágrafo indentado.com.lowagie.text.Chapter -- Essa classe representa um capítulo no documento PDF. É criado usando-se um Paragraph como título e um int como um número de capítulo.com.lowagie.text.Font -- Essa classe contém todas as especificações de uma fonte, como família defonte, tamanho, estilo e cor. Diversas fontes são declaradas como constantes estáticas nessa classe.com.lowagie.text.List -- Essa classe representa uma lista, que, por sua vez, contém diversosListItems.com.lowagie.text.Table -- Essa classe representa uma tabela que contém células ordenadas em umaarray.

Fazendo Download e Configurando iText no Eclipse

Sendo uma biblioteca Java pura, iText é fornecida no formato de um arquivo JAR (consulte Recursos). Após tertransferido a biblioteca por download (vamos supor, no caminho C:\temp), as etapas a seguir irão configurar abiblioteca iText em um ambiente Eclipse:

1. Crie um novo projeto Java no Eclipse denominado iText.2. Clique como botão direito do mouse no projeto iText na visualização Package Explorer e selecione

Propriedades.3. Clique em Caminho de Construção Java. Na guia Bibliotecas, clique em Incluir JARs Externos.4. Navegue até o diretório C:\temp e selecione itext-1.3.jar nesse diretório.5. Clique em OK.

iText agora está configurada e o Eclipse está pronto para criar aplicativos Java para gerar documentos PDFdinâmicos.

Aplicativo de Amostra

O que pode demonstrar qualquer tecnologia melhor do que uma amostra funcional criada por suas própriasmãos? Agora que você possui as ferramentas (IDE do Eclipse) e bibliotecas (biblioteca iText) necessárias,estamos prontos para projetar e desenvolver um programa de amostra em execução.

Vamos criar um documento PDF simples que contenha alguns elementos básicos, como texto simples, textocolorido com fonte não-padrão, tabela, lista, capítulo, seção, etc. A finalidade desse aplicativo é familiarizar-secom a maneira de usar a biblioteca iText. Há diversas classes que executam diversos trabalhos para vocêrelacionados à geração de documento PDF. Não será possível cobrir todas essas classes. Os javadocs de iTextsão uma boa fonte de informações sobre como usar essas classes. Vamos começar a codificar.

A primeira etapa é criar um documento. Um documento para todos os elementos de um documento PDF.

Lista 1. Instanciação do Objeto do Documento

11/12/2010 Gerar Arquivos PDF a partir de Aplicativo…

ibm.com/developerworks/…/os-javapdf/ 2/10

Page 3: Gerar Arquivos PDF a partir de Aplicativos Java Dinamicamente

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

O primeiro argumento é o tamanho da página. Os próximos argumentos são as margens esquerda, direita,superior e inferior, respectivamente. O tipo desse documento ainda não foi definido. Depende do tipo de escritorcriado. Para nossa amostra, escolhemos com.lowagie.text.pdf.PdfWriter. Outros editores são HtmlWriter,RtfWriter, XmlWriter e muitos outros. Seus nomes explicam seus propósitos de forma auto-suficiente.

Lista 2. Criação de Objeto PdfWriter

PdfWriter writer = PdfWriter.getInstance(document, \new FileOutputStream("C:\\ITextTest.pdf"));document.open();

O primeiro argumento é a referência ao objeto do documento e o segundo argumento é o nome absoluto doarquivo no qual a saída será gravada. Em seguida, abrimos o documento para escrever

Agora, vamos incluir algum texto na primeira página do documento. Qualquer texto é incluído com a ajuda decom.lowagie.text.Paragraph. É possível criar um parágrafo padrão com seu texto e as configurações-padrão defonte, cor, tamanho, etc. Caso contrário, você pode fornecer sua própria fonte. Vamos ver ambas a opções.

Lista 3. Criação de Objeto de Parágrafo

document.add(new Paragraph("First page of the document."));

document.add(new Paragraph("Some more text on the \first page with different color and font type.",

FontFactory.getFont(FontFactory.COURIER, 14, Font.BOLD, new Color(255, 150, 200))));

Abaixo é fornecida a saída de amostra do código acima. Incluir document.close(); no final do código acimapara fechar o documento.

Figura 1. Saída de Amostra do Código Acima

11/12/2010 Gerar Arquivos PDF a partir de Aplicativo…

ibm.com/developerworks/…/os-javapdf/ 3/10

Page 4: Gerar Arquivos PDF a partir de Aplicativos Java Dinamicamente

Você acabou de ver como incluir texto simples no documento PDF. Em seguida, precisamos incluir algunselementos complexos no documento. Vamos começar com a criação de um novo capítulo. Um capítulo é umaseção especial, que começa com uma nova página e tem um número exibido por padrão.

Lista 4. Criação do Objeto Capítulo

Paragraph title1 = new Paragraph("Chapter 1", FontFactory.getFont(FontFactory.HELVETICA, \ 18, Font.BOLDITALIC, new Color(0, 0, 255)));Chapter chapter1 = new Chapter(title1, 1);chapter1.setNumberDepth(0);

No código acima, criamos um novo objeto capítulo, chapter1, com o título "This is Chapter 1". Configurar aprofundidade do número para 0 não exibirá o número do capítulo na página.

Uma seção é um subelemento de um capítulo. No código a seguir, criamos uma seção com o título "This isSection 1 in Chapter 1". Para incluir algum texto sob esta seção, criamos outro objeto parágrafo,someSectionText, e incluímos o mesmo no objeto seção.

Lista 5. Criação do Objeto Seção

Paragraph title11 = new Paragraph("This is Section 1 in Chapter 1", FontFactory.getFont(FontFactory.HELVETICA, 16, \ Font.BOLD, new Color(255, 0, 0)));Section section1 = chapter1.addSection(title11);Paragraph someSectionText = new Paragraph("This \text comes as part of section 1 of chapter 1.");

section1.add(someSectionText);someSectionText = new Paragraph("Following is a 3 X 2 table.");

11/12/2010 Gerar Arquivos PDF a partir de Aplicativo…

ibm.com/developerworks/…/os-javapdf/ 4/10

Page 5: Gerar Arquivos PDF a partir de Aplicativos Java Dinamicamente

section1.add(someSectionText);

Antes de incluirmos a tabela, vamos dar uma olhada na aparência de nosso documento. Inclua as duas linhas aseguir para fechar o documento, em seguida, compile e execute o programa para gerar o documento PDF:document.add(chapter1);document.close();.

Figura 2. Saída de Amostra do Capítulo

Em seguida, criamos um objeto da tabela. Uma tabela contém uma array de linhas e colunas. Uma célula de umalinha pode se estender por mais de uma coluna. De forma semelhante, uma célula de uma coluna pode seestender por mais de uma linha. Assim, uma tabela 3 x 2 não precisa ter exatamente seis células.

Lista 6. Criação do Objeto da Tabela

Table t = new Table(3,2);t.setBorderColor(new Color(220, 255, 100));t.setPadding(5);t.setSpacing(5);t.setBorderWidth(1);Cell c1 = new Cell("header1");c1.setHeader(true);t.addCell(c1);c1 = new Cell("Header2");t.addCell(c1);c1 = new Cell("Header3");t.addCell(c1);t.endHeaders();t.addCell("1.1");t.addCell("1.2");

11/12/2010 Gerar Arquivos PDF a partir de Aplicativo…

ibm.com/developerworks/…/os-javapdf/ 5/10

Page 6: Gerar Arquivos PDF a partir de Aplicativos Java Dinamicamente

t.addCell("1.3");section1.add(t);

No código acima, criamos um objeto da tabela, t, com três colunas e duas linhas. Em seguida, configuramos acor da borda da tabela. O preenchimento é usado para o espaçamento entre texto na célula e os limites dacélula. O espaçamento é o espaço entre os limites de células vizinhas. Em seguida, criamos três objetos célula,com texto diferente. Continuamos incluindo as mesmas na tabela. São incluídas na primeira linha, começando naprimeira coluna, seguindo para a próxima coluna na mesma linha. Quando a linha estiver completa, a próximacélula é incluída na primeira coluna da linha seguinte. Uma célula também pode ser incluída na tabela fornecendoapenas o texto da célula, como t.addCell("1.1");. No final, o objeto da tabela é incluído no objeto daseção.

Por fim, vamos ver como incluir uma lista no documento PDF. Uma lista contém diversos ListItems. Uma listapode ser numerada ou não. Passar o primeiro argumento como true significa que você deseja criar a listanumerada.

Lista 7. Criação do Objeto Lista

List l = new List(true, false, 10);l.add(new ListItem("First item of list"));l.add(new ListItem("Second item of list"));section1.add(l);

Estávamos incluindo tudo no objeto capítulo 1 . Como não há mais nenhum elemento para ser incluído nocapítulo 1, está na hora de incluir o capítulo 1 no principal documento. Também vamos fechar o objetodo documento aqui já que terminamos com nosso aplicativo de amostra.

Lista 8. Inclusão de um Capítulo no Documento Principal

document.add(chapter1);document.close();

Executando o Aplicativo de Amostra

1. Faça download do aplicativo de amostra, j-itextsample.jar (consulte Download).2. Descompacte j-itextsample.jar em um diretório. Se extraí-lo no C:\temp, por exemplo, isso coloca os

arquivos de origem e de classe em C:\temp\com\itext\test.

11/12/2010 Gerar Arquivos PDF a partir de Aplicativo…

ibm.com/developerworks/…/os-javapdf/ 6/10

Page 7: Gerar Arquivos PDF a partir de Aplicativos Java Dinamicamente

3. Abra um prompt de comandos e vá para o diretório C:\temp.4. Configure o caminho de classe de seu sistema nesse prompt de comandos. Inclua C:\temp\itext-

1.3.jar no caminho de classe do sistema. No Windows®, execute o comando setclasspath=C:\temp\itext-1.3.jar;%classpath%.

5. Execute o aplicativo com o comando java com.itext.test.ITextTest.

O programa irá gerar o documento ITextTest.pdf em C:\. Uma captura de tela da segunda página do documentoPDF é fornecida abaixo.

Figura 3. Captura de Tela de Documento PDF

Conclusão

Você acaba de ver alguns elementos básicos de geração de PDF. A beleza da iText é que a mesma sintaxe deelemento pode ser usada em diferentes tipos de escritores. Além disso, a saída do escritor pode serredirecionada para o console (no caso de escritores de XML e HTML), o fluxo de saída de servlets (em casode uma resposta a pedidos da Web para documentos PDF) ou qualquer outro tipo de OutputStream. iTexttambém é útil nessas situações em que a resposta é a mesma, mas o tipo de resposta varia entre PDF, RTF,HTML e XML. A iText permite criar marcas d'água, criptografar o documento e outros embelezamentos dasaída.

Download

Descrição Nome Tamanho Método de downloadSample code os-javapdf-itextsample.jar 3.2KB HTTP

11/12/2010 Gerar Arquivos PDF a partir de Aplicativo…

ibm.com/developerworks/…/os-javapdf/ 7/10

Page 8: Gerar Arquivos PDF a partir de Aplicativos Java Dinamicamente

Informações sobre métodos de download

Recursos

Aprender

Obter informações adicionais sobre iText.

Tutorial: iText by Example contém, como seu nome sugere, tutoriais, assim como uma lista de recursos daiText.

Visite Eclipse.org para obter informações abrangentes sobre o programa e como usá-lo.

"Introdução à Plataforma Eclipse" (developerWorks, novembro de 2002) fornece um histórico e umavisão geral do Eclipse, incluindo detalhes sobre como instalar o Eclipse e plug-ins.

Fique atualizado com Eventos Técnicos e Webcasts do developerWorks.

Visite Zona de Software Livre do developerWorks para obter informações extensivas sobre comoexecutar ações, sobre ferramentas e atualizações de projetos para ajudá-lo a se desenvolver comtecnologias de software livre e usá-las com produtos IBM.

Obter produtos e tecnologias

Solicite o SEK para Linux, um conjunto de dois DVDs que contém o software de período experimentalIBM mais recente para Linux a partir do DB2®, Lotus®, Rational®, Tivoli®e WebSphere®.

Inove seu próximo projeto de desenvolvimento de software livre com software de avaliação da IBM,disponível para download ou em DVD.

Discutir

Envolva-se com a comunidade do developerWorks participando de Blogs do developerWorks.

Sobre o autor

Amit Tuli é um engenheiro da software de equipe dos Laboratórios de Software da IBM Índia. Atualmente, estátrabalhando no IBM WebSphere Business Integration para um projeto de telecomunicações no Grupo deSoluções de ISL. Tem cinco anos de experiência técnica em Java e em programação do lado do servidor emdiversas plataformas. Também trabalhou no Laboratório de Pesquisa da Índia no projeto IBM WebFountainSDK. Sua área de conhecimento inclui projetar e desenvolver aplicativos distribuídos independentes até de n-camadas.

11/12/2010 Gerar Arquivos PDF a partir de Aplicativo…

ibm.com/developerworks/…/os-javapdf/ 8/10

Page 9: Gerar Arquivos PDF a partir de Aplicativos Java Dinamicamente

Marcas Registradas | Termos e condições do My developerWorks11/12/2010 Gerar Arquivos PDF a partir de Aplicativo…

ibm.com/developerworks/…/os-javapdf/ 9/10

Page 10: Gerar Arquivos PDF a partir de Aplicativos Java Dinamicamente

11/12/2010 Gerar Arquivos PDF a partir de Aplicativo…

ibm.com/developerworks/…/os-javapdf/ 10/10