O iText é uma biblioteca de código fonte aberto que nos permite criar e manipular documentos PDF. Atualmente ele está disponível para Java, .NET e Android. Como o código é aberto o iText está disponível nas licenças LGPL e MPL.
Basta colocar o jar no classpath do Eclipse e usar a ferramenta na IDE. Para fazer isso, basta clicar com o botão direito do mouse no nome do projeto e selecione as propriedades. Após isso, selecione a aba “Java Build Path” e “Libraries”. Por fim, clique em “Add jar” selecionando o jar salvo. A Figura 1 mostra a janela do Java Build Path.

Nas próximas seções veremos melhor os blocos básicos de construção utilizados no iText. Esses objetos são considerados como sendo de alto nível e permite que possamos gerar documentos PDF sem nos preocuparmos com a sintaxe do PDF.
No restante do artigo conceitualizaremos e exemplificaremos os seguintes blocos básicos de construção utilizados no iText: Paragraph, List e ListItem.
Paragraph
O objeto Paragraph é como o objeto Phrase com algumas propriedades a mais e um objeto NEWLINE. A classe Paragraph é derivada da classe Phrase. A diferença entre Phrase e Paragraph é como a diferença no HTML entre que é utilizado como um elemento único, e que é um incorporador de elementos. O Paragraph ainda define alinhamento de texto, diferente endentações e espaços antes e após o parágrafo.
Segue na Listagem 1 um exemplo de como utilizar o objeto Paragraph.
import java.io.FileOutputStream;
import java.io.IOException;
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Element;
import com.itextpdf.text.Font;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.Phrase;
import com.itextpdf.text.Font.FontFamily;
import com.itextpdf.text.pdf.PdfWriter;
public class ObjetoParagraph {
public static final String RESULT =
"C:\\Users\\higor\\Desktop\\proj_iText\\arqPDFexemplo5.pdf";
public static final Font BOLD_UNDERLINED = new
Font(FontFamily.TIMES_ROMAN, 12, Font.BOLD | Font.UNDERLINE);
public static final Font NORMAL = new Font(FontFamily.TIMES_ROMAN, 12);
public static void main(String[] args) throws DocumentException,
IOException {
Document document = new Document();
PdfWriter.getInstance(document, new FileOutputStream(RESULT));
document.open();
Paragraph p = new Paragraph();
p.add(new Phrase("Titulo: ", BOLD_UNDERLINED));
p.add("Teste de Titulo");
p.setAlignment(Element.ALIGN_JUSTIFIED);
p.setIndentationLeft(18);
p.setFirstLineIndent(-18);
p.add(" ");
p.add(new Phrase("Titulo 2: ", BOLD_UNDERLINED));
p.add("Teste de Titulo 2");
document.add(p);
document.close();
}
}Tente alterar os valores setados e veja a diferença que ocorre no PDF gerado. O método setAlignment() seta o alinhamento do texto. Isto faz com que o iText altere os espaços entre palavras e caracteres. O iText ainda disponibiliza quatro tipos de alinhamento, são eles: o Element.LEFT, Element.ALIGN_CENTER, e Element.RIGHT que é similar ao Element.ALIGN_JUSTIFIED. Outro método bastante utilizado é para modificar a endentação. Para isso temos três métodos, são eles: setIndentationLeft(), setIndentationRight() e setFirstLineIndent(). O método setIndentationLeft() é utilizado para alterar a endentação para esquerda. O método setIndentationRight() faz a mesma coisa que o método setIndentationLeft(), porém com a margem direita. Por fim, o método setFirstLineIndent() altera a endentação esquerda da primeira linha o que fica bastante interessante no visual do texto.
Outra funcionalidade interessante dos parágrafos é a possibilidade de adicionar um espaço extra antes ou depois do parágrafo. Para isso, podemos utilizar o método setSpacingAfter() e setSpacingBefore().
List e ListItem
O objeto List é uma sequência de Paragraphs chamados ListItem. Por sua vez, ListItem é um paragrafo que pode ser adicionado a uma List. A classe ListItem estende a classe Paragraph. A principal diferença é que todo ListItem tem uma variável Chunk que age como uma lista de símbolos.
Na Listagem 2 segue um exemplo simples de como utilizar o objeto List.
import java.io.FileOutputStream;
import java.io.IOException;
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Font;
import com.itextpdf.text.List;
import com.itextpdf.text.ListItem;
import com.itextpdf.text.Font.FontFamily;
import com.itextpdf.text.pdf.PdfWriter;
public class ObjetoList {
public static final String RESULT =
"C:\\Users\\higor\\Desktop\\proj_iText\\arqPDFexemplo7.pdf";
public static final Font BOLD_UNDERLINED = new
Font(FontFamily.TIMES_ROMAN, 12, Font.BOLD | Font.UNDERLINE);
public static final Font NORMAL = new Font(FontFamily.TIMES_ROMAN, 12);
public static void main(String[] args) throws DocumentException,
IOException {
Document document = new Document();
PdfWriter.getInstance(document, new FileOutputStream(RESULT));
document.open();
List list = new List();
ListItem item = new ListItem("Teste List", BOLD_UNDERLINED);
ListItem listItem = new ListItem("Teste ListItem");
item.add(listItem);
list.add(item);
document.add(list);
document.close();
}
}Segue na Listagem 3 outra forma de criar List e ListItem.
List list = new List(true, 20);
list.add(new ListItem("Primeira Linha"));
list.add(new ListItem("Essa linha tem o intuito de ser um pouco maior que uma linha apenas.
Por isso estamos nos alongando neste texto para ver o que acontece, será que uma nova linha é
criada ou teremos tudo numa mesma linha?"));
list.add(new ListItem("Terceira Linha"));
Vale ressaltar que não é necessário criar uma instância de ListItem. Podemos também adicionar itens como String diretamente para um List. Um ListItem será criado internamente. Como exercício o leitor poderá testar o exemplo dado criando diversos ListItem e adicionando ao List criado na primeira linha.
Também existem outros tipos de listas como RomanList, GreekList, e ZapfDingbatsNumberList. Para utilizarmos esses tipos de lista basta criar uma lista com, por exemplo, "List list = new RomanList()". ZapfDingbatsNumberList é fortemente recomendado para ser utilizado em listas mais longas.
Segue na Listagem 4 um exemplo utilizando RomanList.
import java.io.FileOutputStream;
import java.io.IOException;
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Font;
import com.itextpdf.text.List;
import com.itextpdf.text.ListItem;
import com.itextpdf.text.Font.FontFamily;
import com.itextpdf.text.RomanList;
import com.itextpdf.text.pdf.PdfWriter;
public class ObjetoRomanList {
public static final String RESULT =
"C:\\Users\\higor\\Desktop\\proj_iText\\arqPDFexemplo7.pdf";
public static final Font BOLD_UNDERLINED = new
Font(FontFamily.TIMES_ROMAN, 12, Font.BOLD | Font.UNDERLINE);
public static final Font NORMAL = new Font(FontFamily.TIMES_ROMAN, 12);
public static void main(String[] args) throws DocumentException,
IOException {
Document document = new Document();
PdfWriter.getInstance(document, new FileOutputStream(RESULT));
document.open();
List list = new RomanList();
ListItem item1 = new ListItem("Teste ListItem 1", BOLD_UNDERLINED);
ListItem item2 = new ListItem("Teste ListItem 2", BOLD_UNDERLINED);
ListItem item3 = new ListItem("Teste ListItem 3");
item1.add(item3);
list.add(item1);
list.add(item2);
document.add(list);
document.close();
}
}Neste artigo vimos uma introdução aos blocos básicos de construção utilizados no iText.
Novamente peço aos leitores para continuarem enviando suas dicas de assuntos. Também agradeço pelos muitos elogios e também dicas para melhorarmos cada vez mais.
- Eclipse Foundation Tutorial
- LOWAGIE, B. iText in Action, Second Edition. Manning, 2011.
- iText PDF Library.