Sei sulla pagina 1di 6

[Dicas-L] Gerando PDF utilizando Java

Pgina 1

Visite tambm: Segurana Linux UnderLinux VivaOLinux LinuxSecurity NoticiasLinux BR-Linux SoftwareLivre. org [mais]

ok

Busca

HOME

ARQUIVO

COLUNAS

CURSOS

ARTIGOS

HOT LINKS

ENVIAR DICA

F.A.Q.

CADASTRO

CONTATO

RSS

Voc est aqui: Home Arquivo Dicas-L

Inverso de URLs

Outras ofertas
TV LCD
TV Plasma
DVD Player
Navcity NC430
a partir de

Sony Bravia
KDL55 EX505 LCD
55
" Full de
HD,
a partir

R$ 499,00

R$ 4.399,00

Aprenda Ingls em Casa


Metodo inovador e criativo, para
quem tem pouco tempo. Veja os
depoimentos de nossos alunos.
Saiba mais

A SSINE

Submarino.com.br

L ISTA DICAS-L
OK

Receba diariamente por email as dicas


de informtica publicadas neste site
Para se descadastrar, clique aqui.
Carlos J E Campos
Info
APF e COBOL Material,
Exemplos e Artigos
www.carloscamposinfo. com

GERANDO PDF

UTILIZANDO

JAVA

Colaborao: Carlos Tosin


Data de Publicao: 01 de junho de 2010

UML-Orientao a
Objetos
Consultoria e
Treinamento com
Enterprise Architect
www.oatsolutions .com. br

Model Driven
Development
Ferramenta de
modelagem e gerao
de software com base
em templates

Tutorial Api Pdf


Descubra a Central de Agncias Oficial do Google AdWords, Aqui!
google.com .br/adwords/webexpert

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.

www.infopar.com

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.

Software Scrum
Grtis
Ferramenta Web para
Gerncia de Projetos
geis Scrum - Free

A API I TEXT

www.scrumhalf.com .br

Curso Online de
Dephi
3 x R$29 ,97 SUPORTE
100% Incluso. Estude
em casa, com
certificao!

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:/ /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:

www.treinaweb.com .br

Document doc = new Document(PageSize.A4);


Procure pela casa ou
apartamento ideal
venda ou para aluguel
na busca inteligente do
Imohoo
Buscar imveis

A classe PageSize possui diversas constantes para tamanhos comuns de pginas (LETTER ,
NOTE, A 0, A1, A 2, etc.). possvel tambm definir o tamanho manualmente, desta forma:
Rectangle rect = new Rectangle(595, 841);
Document doc = new Document(rect );
Neste caso, usada a classe Rectangle, que representa as dimenses de um retngulo.
Sistema de medidas

Encontre imveis,
apartamentos e casas
a venda no Imobilien
Saiba mais
Roupas, moda e bolsas
femininas no
MuccaShop.
Anncios classificados
e buscador de
classificados carros,
classificados casas e
classificados emprego

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,

http://www.dicas-l.com.br/arquivo/gerando_pdf_utilizando_java.php

02/04/2011 18:34:47

[Dicas-L] Gerando PDF utilizando Java

Pgina 2

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 .
Margens das Pginas
Para definir margens nas pginas do documento, basta que elas sejam especificadas no
construtor da classe Document, como feito a seguir:
Document doc = new Document(PageSize.A4, 72, 72, 72, 72 );
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:
OutputStream os = new FileOutputStream("out.pdf");
PdfWriter.getInstance(doc, os);
doc.open ();
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:
import
import
import
import
import
import

java.io.FileOutputStream;
java.io.OutputStream;
com.itextpdf.text .Document;
com.itextpdf.text .PageSize;
com.itextpdf.text .Paragraph ;
com.itextpdf.text .pdf.PdfWriter ;

public class PrimeiroPDF {


public static void main (String[] args ) throws Exception {
Document doc = null ;
OutputStream os = null ;
try {
//cria o documento tamanho A4, margens de 2,54 cm
doc = new Document(PageSize.A4, 72, 72, 72, 72);
//cria a stream de sada
os = new FileOutputStream(" out.pdf");
//associa a stream de sada ao
PdfWriter.getInstance(doc, os);
//abre o documento
doc.open ();
//adiciona o texto ao PDF
Paragraph p = new Paragraph(" Meu primeiro arquivo
PDF!");
doc.add(p);
} finally {
if (doc != null ) {
//fechamento do documento
doc.close();
}

http://www.dicas-l.com.br/arquivo/gerando_pdf_utilizando_java.php

02/04/2011 18:34:47

[Dicas-L] Gerando PDF utilizando Java

Pgina 3
if (os != null) {
//fechamento da stream de sada
os .close() ;
}
}
}
}

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:
Paragraph p1 = new Paragraph ("Meu primeiro arquivo PDF!");
doc.add(p1);
Paragraph p2 = new Paragraph ("Estou utilizando a classe
Paragraph para criar um bloco de texto na gerao do meu primeiro
arquivo PDF.");
doc.add(p2);

O construtor da classe Paragraph recebe o texto como parmetro. Depois basta chamar o mtodo
add() para adicionar o texto ao PDF.
Alterando a fonte Nem 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:
Font f = new Font (FontFamily.COURIER , 20, Font .BOLD );
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:
Paragraph p1 = new Paragraph ("Meu primeiro arquivo PDF!", f);
Pronto! Voc j tem um ttulo para o seu PDF! Observe como ficou o resultado :
[http://www.dicas-l.com.br/imagens/itext_ 01.jpg]
Alinhamento Muitas vezes o alinhamento esquerda no o suficiente. O iText proporciona
outras formas de alinhamento do texto. Observe:
p1.setAlignment (Element .ALIGN_CENTER);
O mtodo setAlignment() permite especificar um alinhamento para o bloco. Neste caso, p1 ser
alinhado no centro da linha. Observe:
[http://www.dicas-l.com.br/imagens/itext_ 02.jpg]
Espaamento Caso 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:
p1.setSpacingAfter(20 );
Neste exemplo, aps p 1 ser adicionado ao documento, ser deixado um espao em branco extra
de 20 pontos. Observe:
[http://www.dicas-l.com.br/imagens/itext_ 03.jpg]

IMAGENS

http://www.dicas-l.com.br/arquivo/gerando_pdf_utilizando_java.php

02/04/2011 18:34:47

[Dicas-L] Gerando PDF utilizando Java

Pgina 4

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:
Image img = Image.getInstance(" softblue.jpg") ;
img.setAlignment (Element .ALIGN_CENTER);
doc.add(img);
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. Observe como fica o resultado:
[http:/ / www.softblue.com.br/ public/ blog/ 7/ itext_04.jpg]

TABELAS
O iText possui tambm suporte criao de tabelas. Observe uma tabela simples abaixo que
contm algumas palavras reservadas do Java:
[http:/ / www.softblue.com.br/ public/ blog/ 7/ itext_05 .jpg]
O cdigo que gera a tabela acima o seguinte:
PdfPTable table = new PdfPTable (3);
PdfPCell header = new PdfPCell(new Paragraph("Algumas Palavaras
Reservadas do Java "));
header.setColspan(3);
table.addCell (header);
table.addCell ("abstract");
table.addCell ("extends") ;
table.addCell ("import");
table.addCell ("while");
table.addCell ("if");
table.addCell ("switch");
doc.add(table);
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 Colunas Como 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:
PdfPTable table = new PdfPTable (new float[] { 0.2f, 0.2f, 0.6f });
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. O resultado final fica assim :
[http:/ / www.softblue.com.br/ public/ blog/ 7/ itext_06.jpg]
Mudando o tamanho e alinhamento da tabela O 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:

http://www.dicas-l.com.br/arquivo/gerando_pdf_utilizando_java.php

02/04/2011 18:34:47

[Dicas-L] Gerando PDF utilizando Java

Pgina 5

table.setWidthPercentage(60.0f);
table.setHorizontalAlignment (Element .ALIGN_RIGHT);
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. Observe o
resultado:
[http:/ / www.softblue.com.br/ public/ blog/ 7/ itext_07 .jpg]
Customizando as bordas e cores possvel tambm customizarmos as bordas das clulas
e as cores das bordas e das clulas. Observe o cdigo abaixo:
header.setBackgroundColor(BaseColor .YELLOW);
header.setBorderWidthBottom(2.0f);
header.setBorderColorBottom(BaseColor.BLUE);
header.setBorder (Rectangle .BOTTOM);
Ele gera como resultado:
[http:/ / www.softblue.com.br/ public/ blog/ 7/ itext_08.jpg]
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.
Carlos Tosin instrutor oficial dos Cursos On-Line de Java (assista
uma vdeo-aula grtis) da Softblue, formado em Cincia da Computao
pela PUC-PR , ps-graduado em Desenvolvimento de Jogos para
Computador pela Universidade Positivo e Mestre em Informtica na
rea de Sistemas Distribudos, tambm pela PUC -PR. Trabalha
profissionalmente com Java h 7 anos e possui 4 anos de experincia
no desenvolvimento de sistemas para a IBM dos Estados Unidos,
utilizados a nvel mundial. Atua h mais de 2 anos com cursos e
treinamentos de profissionais em grandes empresas. Possui as
certificaes da Sun SCJP, SCJD, SCWCD , SCBCD , SCEA , IBM SOA e
ITIL Foundation.
Veja a relao completa dos artigos de Carlos Tosin

StumbleUpon

Digg

Del.icio.us Twitter Recomendar Contato

PDF

RSS

Imprimir

REFERNCIAS ADICIONAIS
Referncias adicionais sobre os assuntos abordados neste site podem ser encontradas em nossa
Bibliografia.

AVALIE

ESTA DICA

Avaliao: 3.1 / 5 (267 votos)


Tutorial Api Pdf
Descubra a Central de Agncias Oficial do Google AdWords, Aqui!
google.com .br/adwords/webexpert

OPINIO

DOS

L EITORES

http://www.dicas-l.com.br/arquivo/gerando_pdf_utilizando_java.php

02/04/2011 18:34:47

[Dicas-L] Gerando PDF utilizando Java

Pgina 6

Seja o primeiro a comentar este artigo


*Nome:
Email :
Me notifique sobre novos comentrios nessa pgina
Oculte meu email
*Texto:

Para publicar seu comentrio, digite o cdigo contido na imagem acima

Enviar
Powered by Scriptsmill Comments Script

Privacy Policy
O material veiculado neste site poder ser livremente distribudo
para fins no comerciais, segundo os termos da licena da

Creative Commons
.

http://www.dicas-l.com.br/arquivo/gerando_pdf_utilizando_java.php

02/04/2011 18:34:47