Professional Documents
Culture Documents
1 de 9
http://www.softblue.com.br/blog/home/postid/7/GERANDO_PDF_EM_JAVA
Diferenciais
Compartilhe:
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 car 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 congurar os elementos da pgina do documento, alm de como inserir textos, imagens e tabelas.
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://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 ca assim:
A classe PageSize possui diversas constantes para tamanhos comuns de pginas (LETTER, NOTE, A0, A1, A2,
etc.). possvel tambm denir o tamanho manualmente, desta forma:
1
2
Mailing List
Liberdade total
Estude quando e como
quiser. Disponibilidade do
contedo 24h por dia, 7 dias
por semana.
Matrcula no expira
Pagamento nico, sem
mensalidades, e acesso
vitalcio a todo o contedo,
mesmo aps a concluso do
curso.
Cursos sempre atualizados
Acesso s atualizaes dos
cursos de forma automtica.
Tire suas dvidas
Suporte eciente para
esclarecer suas dvidas no
decorrer do curso.
Padro de qualidade
Atendimento diferenciado e
material de alta qualidade,
feito por quem entende do
assunto.
Certicado
Sistema de medidas
importante destacar como funcionam as medidas utilizadas pelo iText. Se voc quiser especicar 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 dene as pginas do documento como tendo tamanho 21,0x29,7
cm, o que equivale ao tamanho A4.
Pagamento
05/04/2014 00:21
2 de 9
http://www.softblue.com.br/blog/home/postid/7/GERANDO_PDF_EM_JAVA
Para denir margens nas pginas do documento, basta que elas sejam especicadas no construtor da classe
Document, como feito a seguir:
Lembre-se de especicar as margens em pontos, e no no sistema mtrico! O cdigo acima dene 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:
1
2
3
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 nal da insero dos dados no documento, o mesmo seja fechado atravs do
mtodo close(). E outro detalhe importante: todas as modicaes no documento (como congurao 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:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
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;
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 especicou para o documento e tambm gerencia
automaticamente as quebras de linha. Observe o cdigo abaixo, que gera dois blocos de texto como sada:
05/04/2014 00:21
3 de 9
1
2
3
4
5
http://www.softblue.com.br/blog/home/postid/7/GERANDO_PDF_EM_JAVA
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:
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:
Pronto! Voc j tem um ttulo para o seu PDF! Observe como cou o resultado:
Alinhamento
Muitas vezes o alinhamento esquerda no o suciente. O iText proporciona outras formas de alinhamento do
texto. Observe:
p1.setAlignment(Element.ALIGN_CENTER);
O mtodo setAlignment() permite especicar um alinhamento para o bloco. Neste caso, p1 ser alinhado no
centro da linha. Observe:
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 p1 ser adicionado ao documento, ser deixado um espao em branco extra de 20 pontos.
Observe:
05/04/2014 00:21
4 de 9
http://www.softblue.com.br/blog/home/postid/7/GERANDO_PDF_EM_JAVA
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:
1
2
3
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 ca o resultado:
Tabelas
O iText possui tambm suporte criao de tabelas. Observe uma tabela simples abaixo que contm algumas
palavras reservadas do Java:
01
02
03
04
05
06
07
08
09
10
11
Vamos tentar entender o que signica 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 especicar 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
05/04/2014 00:21
5 de 9
http://www.softblue.com.br/blog/home/postid/7/GERANDO_PDF_EM_JAVA
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 nal ca assim:
1
2
table.setWidthPercentage(60.0f);
table.setHorizontalAlignment(Element.ALIGN_RIGHT);
No exemplo acima, estamos denindo que a tabela deve ocupar apenas 60% da largura do documento. Tambm
estamos denindo que ela deve ser alinhada direita. Observe o resultado:
1
2
3
4
header.setBackgroundColor(BaseColor.YELLOW);
header.setBorderWidthBottom(2.0f);
header.setBorderColorBottom(BaseColor.BLUE);
header.setBorder(Rectangle.BOTTOM);
05/04/2014 00:21
6 de 9
http://www.softblue.com.br/blog/home/postid/7/GERANDO_PDF_EM_JAVA
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 ocial da API para ter maiores informaes.
Comentrios
bommesmo
Enviado em 30/12/2012 s 14:58:20 horas, por bom
Parabns, ajudou-me muito no meu trabalho da faculdade!! Obrigado!
Enviado em 14/11/2012 s 19:55:05 horas, por Jos Cordeiro
Andr, no sei o que pode estar acontecendo, pois nunca tive esse problema. Sugiro que voc procure na
documentao do iText, mais precisamente na classe Image, que deve ter alguma coisa por l. Abrao!
Enviado em 01/11/2012 s 13:31:12 horas, por Carlos Tosin
Bom dia a todos.
Ao adicionar uma imagem no pdf notei que a mesma est redimensionando (no cando no tamanho original)
como fao para deix-la no tamanho original ?
E parabns pelo tutorial muito til.
Enviado em 01/11/2012 s 10:44:53 horas, por Andr Souza
Bom artigo, mas lembrando que existe a opo de utilizar plugins nas IDE's como o Jasper e IReport que facilitam
muito a parte visual.
Enviado em 01/10/2012 s 15:01:56 horas, por Henrique
Muito bom mesmo o artigo. tudo o que eu precisava. Parabns pela apresentao e pela didtica.
Enviado em 05/09/2012 s 20:21:58 horas, por GALVANI LUPPI
timo tpico e perfeita explicao, ajudaram muito.
Obrigado.
Enviado em 03/09/2012 s 05:45:05 horas, por Maurcio Cayres
Danilo, no sei o que pode estar acontecendo. Apenas com estas informaes difcil saber. Se com o debug voc
no conseguiu descobrir, recomendo que voc grave algumas mensagens de log em arquivo para que o cdigo
que voc executa a partir do JAR d a voc mais informaes sobre o que est acontecendo. Abrao!
Enviado em 30/08/2012 s 16:42:07 horas, por Carlos Tosin
ola, estou com um problema dentro da ide que no caso e o netbeans funciona direitinho mas quando eu construo
05/04/2014 00:21
7 de 9
http://www.softblue.com.br/blog/home/postid/7/GERANDO_PDF_EM_JAVA
05/04/2014 00:21
8 de 9
http://www.softblue.com.br/blog/home/postid/7/GERANDO_PDF_EM_JAVA
05/04/2014 00:21
9 de 9
http://www.softblue.com.br/blog/home/postid/7/GERANDO_PDF_EM_JAVA
use o POI para ler um .doc e use o iText para gerar o PDF.
Enviado em 24/05/2010 s 16:29:10 horas, por Carlos Tosin
Muito boa a explicao. Parabns.
Uma pergunta com esta API no possvel buscar um documento .doc por exemplo, e transform-lo em PDF?
Enviado em 24/05/2010 s 16:10:40 horas, por Mlory Zolino
05/04/2014 00:21