Você está na página 1de 5

Logo | Hospedagem de sites | Registro de domnios | Crie seu site | Crie sua loja virtual | Crie seu blog

| Parceiros: Conecte ao mundo

O Seu portal de TI!


Banco de dados
MySQL Oracle

HOME

CURSOS ONLINE

ANUNCIE

CONTATO

FRUM

Desenv. Web
Postgre

Design

Linguagem

Marketing

Tendncias

Busca:

SQL Server

Usando a API iText para gerar documentos PDF em Java


Voc est em: ForumWeb Linguagem Java Artigos

Compartilhe este artigo!

Usando a API iText para gerar documentos PDF em Java


Quinta-Feira, 01 de Julho de 2010 s 10:45

Sobre o autor

Entre em contato...

O formato PDF muito utilizado porque se trata de uma forma fcil de distribuir documentos, alm de ser possvel visualiz-los em qualquer plataforma. Como documentos PDF so amplamente utilizados, existem diversas maneiras de ger-los. E claro que o Java no poderia ficar de fora! Atravs do uso da API iText, voc pode criar seus prprios arquivos PDF atravs do Java. O objetivo deste artigo mostrar como gerar documentos PDF em Java, usando a API iText. Voc aprender como configurar os elementos da pgina do documento, alm de como inserir textos, imagens e tabelas.

Redao Forum Web Equipe de desenvolvimento do ForumWeb.com.br, responsvel pelas dicas e dow nloads do site. Site do autor: http://w w w .forumw eb.com.br

Outros artigos do autor


JQUERY Contador de caracteres usando jQuery SQL SERVER SQL Server Denali Concatenao de strings com CONCAT() SQL SERVER SQL Server Denali Funo EOMONTH() SQL SERVER SQL Server Denali Funes Analticas LAG() e LEAD() SQL SERVER SQL Server Denali Funes FIRST_VALUE() e LAST_VALUE() SQL SERVER SQL Server Denali funo CUME_DIST()

A API iText
O iText a API utilizada para gerar PDFs. Ela gratuita e open source. Para utilizar o iText em sua aplicao Java, entre no site http://www.itextpdf.com e baixe o arquivo .JAR referente ao iText 5.0.2. Depois basta adicionar o iText ao classpath da sua aplicao e utilizar as funcionalidades desta API, que vai possibilitar que voc gere os seus documentos PDF. O iText funciona com a verso 5 do Java ou superior. Documento hora de comearmos a aprendar a usar o iText! E a primeira classe que voc deve conhecer a classe Document. Ela representa o documento PDF, e para criar um documento PDF do tamanho A4 no modo retrato, o cdigo fica assim:

D o c u m e n td o c=n e wD o c u m e n t ( P a g e S i z e . A 4 ) ;

Artigos relacionados
JAVA Enviando e-mail com JavaMail usando o Gmail JAVA Instalando o NETBEANS 6.9 no Windows

A classe PageSize possui diversas constantes para tamanhos comuns de pginas (LETTER, NOTE, A0, A1, A2, etc.). possvel tambm definir o tamanho manualmente, desta forma:

R e c t a n g l er e c t=n e wR e c t a n g l e ( 5 9 5 ,8 4 1 ) ; D o c u m e n td o c=n e wD o c u m e n t ( r e c t ) ;

JAVA Instalao e configurao do Java 6 SDK no Windows Vista JAVA Memory leak em Java

Neste caso, usada a classe Rectangle, que representa as dimenses de um retngulo.

Sistema de medidas

JAVA Criando arquivos ZIP em Java JAVA Parseando XML com o DOM em JAVA

importante destacar como funcionam as medidas utilizadas pelo iText. Se voc quiser especificar as medidas das pginas dos documentos ou das margens, voc deve ter em mente que voc deve utilizar pontos. Como estamos mais acostumados a trabalhar na escala mtrica, voc pode escrever um cdigo que faa a converso da escala mtrica para pontos. A relao : 2,54cm = 72 pontos. No exemplo anterior, o uso de 595x841 pontos define as pginas do documento como tendo tamanho 21,0x29,7 cm, o que equivale ao tamanho A4.

JAVA Hello Word no JavaFx JAVA Conceitos de Programao Orientada a Objetos em Java

Margens das Pginas


Para definir margens nas pginas do documento, basta que elas sejam especificadas no construtor da classe Document, como feito a seguir:

D o c u m e n td o c=n e wD o c u m e n t ( P a g e S i z e . A 4 ,7 2 ,7 2 ,7 2 ,7 2 ) ;

Lembre-se de especificar as margens em pontos, e no no sistema mtrico! O cdigo acima define que o tamanho das pginas ser A4 com margens de 2,54cm na esquerda, direita, em cima e embaixo. Preparando o documento para receber dados Aps a criao do objeto que representa o documento, necessrio seguir mais alguns passos antes de iniciarmos a insero dos dados. O cdigo que representa este passo mostrado a seguir:

Indique este artigo


Indique este artigo Para

O u t p u t S t r e a mo s=n e wF i l e O u t p u t S t r e a m ( " o u t . p d f " ) ; P d f W r i t e r . g e t I n s t a n c e ( d o c ,o s ) ; d o c . o p e n ( ) ;

Seu email

Vamos tentar entender o que mostrado neste cdigo. Primeiramente, devemos criar uma stream de sada, indicando o destino do documento PDF. Neste caso estamos interessados em gerar o documento em um arquivo, portanto criamos um FileOutputStream, indicando qual ser o nome do arquivo de sada. Na sequncia, necessrio chamar o mtodo getInstance() da classe PdfWriter, para que ele associe o documento stream de sada. O ltimo passo antes de iniciarmos a criao do documento, abri-lo. Isto feito atravs da chamada ao mtodo open(). importante que, ao final da insero dos dados no documento, o mesmo seja fechado atravs do mtodo close(). E outro detalhe importante: todas as modificaes no documento (como configurao de margens e tamanho de pginas) devem ser feitas antes da chamada ao mtodo close(). Gerando seu primeiro PDF em Java Agora voc j sabe tudo o que precisa para comear a escrever o seu primeiro arquivo PDF usando o iText. O cdigo abaixo mostra um exemplo completo da gerao de um arquivo PDF simples, usando o que voc viu nesta parte inicial:

Personalize sua m ensagem

Cdigo

Indicar

Dicas relacionadas
Calculadora em Java Calculadora em Java (console) Como usar o mtodo format da classe NumberFormat para formatar um valor de pontoflutuante de acordo com as configuraes regionais Adicionando ou subtraindo dias de uma data e hora usando o mtodo add() da classe Calendar Adicionar ou subtrair horas da data atual Como substituir caracteres em uma string Como inverter (reverter) um array Como substituir substrings em uma string

i m p o r tj a v a . i o . F i l e O u t p u t S t r e a m ; i m p o r tj a v a . i o . O u t p u t S t r e a m ; i m p o r tc o m . i t e x t p d f . t e x t . D o c u m e n t ; i m p o r tc o m . i t e x t p d f . t e x t . P a g e S i z e ; i m p o r tc o m . i t e x t p d f . t e x t . P a r a g r a p h ; i m p o r tc o m . i t e x t p d f . t e x t . p d f . P d f W r i t e r ; p u b l i cc l a s sP r i m e i r o P D F{ p u b l i cs t a t i cv o i dm a i n ( S t r i n g [ ]a r g s )t h r o w sE x c e p t i o n{ D o c u m e n td o c=n u l l ; O u t p u t S t r e a mo s=n u l l ; t r y{ / / c r i aod o c u m e n t ot a m a n h oA 4 ,m a r g e n sd e2 , 5 4 c m d o c=n e wD o c u m e n t ( P a g e S i z e . A 4 ,7 2 ,7 2 ,7 2 ,7 2 ) ; / / c r i aas t r e a md es a d a o s=n e wF i l e O u t p u t S t r e a m ( " o u t . p d f " ) ;

Arquivos relacionados
Por enquanto, nenhum arquivo para download.

/ / a s s o c i aas t r e a md es a d aa o P d f W r i t e r . g e t I n s t a n c e ( d o c ,o s ) ; / / a b r eod o c u m e n t o d o c . o p e n ( ) ; / / a d i c i o n aot e x t oa oP D F P a r a g r a p hp=n e wP a r a g r a p h ( " M e up r i m e i r oa r q u i v oP D F ! " ) ; d o c . a d d ( p ) ; }f i n a l l y{ i f( d o c! =n u l l ){ / / f e c h a m e n t od od o c u m e n t o d o c . c l o s e ( ) ; } i f( o s! =n u l l ){ / / f e c h a m e n t od as t r e a md es a d a o s . c l o s e ( ) ; } } } }

Este o esqueleto bsico de cdigo que voc ir utilizar ao criar seus arquivos PDF, mudando apenas o contedo. Na sequncia voc ver mais detalhes sobre a classe Paragraph.

Textos
A forma mais fcil de adicionar textos ao PDF utilizar a classe Paragraph. Esta classe permite que voc adicione blocos de texto ao documento. O texto inserido na pgina como se voc estivesse utilizando um editor de textos. O iText respeita as margens que voc especificou para o documento e tambm gerencia automaticamente as quebras de linha. Observe o cdigo abaixo, que gera dois blocos de texto como sada:

P a r a g r a p hp 1=n e wP a r a g r a p h ( " M e up r i m e i r oa r q u i v oP D F ! " ) ; d o c . a d d ( p 1 ) ;

P a r a g r a p hp 2=n e wP a r a g r a p h ( " E s t o uu t i l i z a n d oac l a s s eP a r a g r a p hp a r ac r i a ru mb l o c od et e x t on ag e r a od om e up r i d o c . a d d ( p 2 ) ;

O construtor da classe Paragraph recebe o texto como parmetro. Depois basta chamar o mtodo add() para adicionar o texto ao PDF. Alterando a fonteNem sempre a fonte utilizada por padro pelo iText a fonte que voc deseja nos seus documentos. Logo, possvel que voc altere a fonte dos textos que voc adiciona ao PDF. A fonte representada pela classe com.itextpdf.text.Font. Basta criar um objeto desta classe com a fonte desejada e associ-lo ao texto. Observe o exemplo:

F o n tf=n e wF o n t ( F o n t F a m i l y . C O U R I E R ,2 0 ,F o n t . B O L D ) ;

O cdigo acima cria uma fonte da famlia Courier, tamanho 20, itlica. O enum FontFamily e a classe Font possuem tambm outras constantes para voc explorar. A associao entre a fonte e o texto feita no construtor da classe Paragraph, desta forma:

P a r a g r a p hp 1=n e wP a r a g r a p h ( " M e up r i m e i r oa r q u i v oP D F ! " ,f ) ;

Pronto! Voc j tem um ttulo para o seu PDF! Alinhamento Muitas vezes o alinhamento esquerda no o suficiente. O iText proporciona outras formas de alinhamento do texto. Observe:

p 1 . s e t A l i g n m e n t ( E l e m e n t . A L I G N _ C E N T E R ) ;

O mtodo setAlignment() permite especificar um alinhamento para o bloco. Neste caso, p1

ser alinhado no centro da linha. EspaamentoCaso voc deseje ter um controle maior sobre o espaamento utilizado antes e depois de um bloco de texto, voc pode utilizar os mtodos setSpacingBefore() e setSpacingAfter(). Observe:

p 1 . s e t S p a c i n g A f t e r ( 2 0 ) ;

Neste exemplo, aps p1 ser adicionado ao documento, ser deixado um espao em branco extra de 20 pontos.

Imagens
Da mesma forma que textos, imagens tambm podem ser inseridas no documento PDF. A maneira mais fcil de fazer isto atravs da classe com.itextpdf.text.Image. Ela utilizada desta forma:

I m a g ei m g=I m a g e . g e t I n s t a n c e ( " s o f t b l u e . j p g " ) ; i m g . s e t A l i g n m e n t ( E l e m e n t . A L I G N _ C E N T E R ) ; d o c . a d d ( i m g ) ;

Basta chamar o mtodo getInstance() da classe, passando o caminho da imagem que deve ser carregada, e depois adicionar a imagem ao documento atravs do mtodo add(). Os mtodos setAlignment(), setSpacingBefore() e setSpacingAfter() j vistos anteriormente tambm podem ser aplicados s imagens.

Tabelas
O iText possui tambm suporte criao de tabelas. Observe a seguir algumas palavras reservadas do Java: abstract, extends, import, while, if, switch. O cdigo que gera a tabela acima o seguinte:

P d f P T a b l et a b l e=n e wP d f P T a b l e ( 3 ) ; P d f P C e l lh e a d e r=n e wP d f P C e l l ( n e wP a r a g r a p h ( " A l g u m a sP a l a v a r a sR e s e r v a d a sd oJ a v a " ) ) ; h e a d e r . s e t C o l s p a n ( 3 ) ; t a b l e . a d d C e l l ( h e a d e r ) ; t a b l e . a d d C e l l ( " a b s t r a c t " ) ; t a b l e . a d d C e l l ( " e x t e n d s " ) ; t a b l e . a d d C e l l ( " i m p o r t " ) ; t a b l e . a d d C e l l ( " w h i l e " ) ; t a b l e . a d d C e l l ( " i f " ) ; t a b l e . a d d C e l l ( " s w i t c h " ) ; d o c . a d d ( t a b l e ) ;

Vamos tentar entender o que significa este cdigo. Ao trabalhar com tabelas no iText, voc basicamente vai usar duas classes: PdfPTable e PdfPCell. A primeira representa a tabela, enquanto a ltima representa uma clula da tabela. A chamada new PdfPTable(3) cria uma tabela com 3 colunas, de forma que a largura das colunas a mesma. Veremos na sequncia como especificar larguras diferentes para cada coluna. Depois criamos um objeto da classe PdfPCell, que ir representar o cabealho da nossa tabela. No construtor do PdfPCell voc pode passar um objeto Paragraph contendo o texto que ser colocado na clula. Uma caracterstica importante do cabealho que ele deve ocupar as 3 colunas da tabela. Por este motivo ns usamos o mtodo setColspan(3). Toda vez que desejamos adicionar uma clula tabela, chamamos o mtodo addCell(). Neste mtodo podemos passar tanto objetos PdfPCell como os textos de cada clula diretamente (neste caso o prprio iText gera o objeto PdfPCell internamente). Perceba que em nenhum momento voc diz em qual linha ou coluna da tabela a clula ser inserida. O iText vai inserindo as clulas de cima para baixo e da esquerda para a direita. O gerenciamento da criao de novas linhas feito de forma automtica. Depois de preparar a tabela, basta adicion-la ao documento atravs da chamada doc.add(table). Definindo a Largura das ColunasComo vimos anteriormente, ao construirmos uma tabela informando apenas o nmero de colunas, o iText deixa todas as colunas com o mesmo

tamanho, o que nem sempre o ideal. A melhor forma de especificar a largura das colunas da tabela usar a forma relativa. Ela funciona assim: voc indica qual o tamanho da coluna com relao largura total da tabela. Observe:

P d f P T a b l et a b l e=n e wP d f P T a b l e ( n e wf l o a t [ ]{0 . 2 f ,0 . 2 f ,0 . 6 f} ) ;

Ao passar um array de nmeros no construtor da PdfPTable, voc est indicando um tamanho relativo para cada coluna. Como o array tem 3 elementos, a tabela ter trs colunas. Agora voc deve pensar da seguinte forma: todas as colunas da tabela juntas representam 100%. E, neste caso, a primeira coluna representa 20%, a segunda 20% e a terceira 60%. Perceba que as duas primeiras colunas tero o mesmo tamanho, e a terceira coluna ser trs vezes maior que cada coluna anterior. Mudando o tamanho e alinhamento da tabelaO iText permite tambm que voc especifique qual o tamanho e o alinhamento da tabela com relao do documento. Isto feito atravs dos mtodos setWidthPercentage() e setHorizontalAlignment(). Observe:

t a b l e . s e t W i d t h P e r c e n t a g e ( 6 0 . 0 f ) ; t a b l e . s e t H o r i z o n t a l A l i g n m e n t ( E l e m e n t . A L I G N _ R I G H T ) ;

No exemplo acima, estamos definindo que a tabela deve ocupar apenas 60% da largura do documento. Tambm estamos definindo que ela deve ser alinhada direita. Customizando as bordas e cores possvel tambm customizarmos as bordas das clulas e as cores das bordas e das clulas. Observe o cdigo abaixo:

h e a d e r . s e t B a c k g r o u n d C o l o r ( B a s e C o l o r . Y E L L O W ) ; h e a d e r . s e t B o r d e r W i d t h B o t t o m ( 2 . 0 f ) ; h e a d e r . s e t B o r d e r C o l o r B o t t o m ( B a s e C o l o r . B L U E ) ; h e a d e r . s e t B o r d e r ( R e c t a n g l e . B O T T O M ) ;

O mtodo setBackgroundColor() define a cor de fundo da clula. O mtodo setBorderWitdhBottom() define a largura da linha da borda inferior. O mtodo setBorderColorBottom() define a cor da borda inferior. E o mtodo setBorder() define em que parte das clula a borda deve existir. Usando Rectangle.BOTTOM, estamos definindo que existe apenas uma borda inferior na clula. importante que voc saiba que existem variantes dos mtodos que definem a largura e cor da linha da borda. Utilizamos neste exemplo os mtodo setBorderWidthBottom() e setBorderColorBottom(), para a borda inferior, mas possvel tambm usar os mtodos equivalentes top, left e right (para borda superior, esquerda e direita, respectivamente.

Concluso
Este artigo introduziu a API iText, usada para gerar documentos PDF em Java. O que est descrito aqui apenas uma viso inicial de algumas funcionalidades importantes do iText. Mas muita coisa alm do que est descrito aqui pode ser feita. Consulte a pgina oficial da API para ter maiores informaes. Autor/Fonte: Carlos Tosin - www.dicas-l.com.br

Tags: Java API iText Classe Objetos PDF Biblioteca Arquivos

Qual a sua opinio?


Comente e interaja! Nome Ttulo Cdigo

Email

Mensagem Comentar

Site (Opcional. Deve conter http://)

Você também pode gostar