iText - Tabela Aninhada
Neste capítulo, veremos como adicionar uma tabela aninhada a uma tabela em um documento PDF usando a biblioteca iText.
Adicionando tabelas aninhadas em um PDF
Você pode criar um documento PDF vazio instanciando o Documentclasse. Ao instanciar esta classe, você precisa passar por umPdfDocumentobjeto como parâmetro, para seu construtor. Então, para adicionar uma tabela ao documento, você precisa instanciar oTable classe e adicionar este objeto ao documento usando o add() método.
Para adicionar uma tabela a esta tabela, você precisa criar outra tabela (tabela aninhada) e passá-la para o objeto de célula usando o add() método do Cell classe.
A seguir estão as etapas para inserir uma tabela na célula de uma tabela.
Etapa 1: Criação de um objeto PdfWriter
o PdfWriterclasse representa o DocWriter para um PDF. Esta classe pertence ao pacotecom.itextpdf.kernel.pdf. O construtor desta classe aceita uma string, representando o caminho do arquivo onde o PDF será criado.
Instancie a classe PdfWriter passando um valor de string (representando o caminho onde você precisa criar um PDF) para seu construtor, conforme mostrado abaixo.
// Creating a PdfWriter
String dest = "C:/itextExamples/addingNestedTable.pdf";
PdfWriter writer = new PdfWriter(dest);
Quando um objeto desse tipo é passado para um PdfDocument (classe), cada elemento adicionado a este documento será gravado no arquivo especificado.
Etapa 2: Criar um objeto PdfDocument
o PdfDocumentclass é a classe que representa o documento PDF no iText. Esta classe pertence ao pacotecom.itextpdf.kernel.pdf. Para instanciar esta classe (no modo de escrita), você precisa passar um objeto da classe PdfWriter para seu construtor.
Instancie a classe PdfDocument passando o objeto PdfWriter criado acima para seu construtor, conforme mostrado abaixo.
// Creating a PdfDocument
PdfDocument pdfDoc = new PdfDocument(writer);
Depois que um objeto PdfDocument é criado, você pode adicionar vários elementos como página, fonte, anexo de arquivo e manipulador de eventos usando os respectivos métodos fornecidos por sua classe.
Etapa 3: Criação do objeto Documento
o Document classe do pacote com.itextpdf.layouté o elemento raiz ao criar um PDF autossuficiente. Um dos construtores desta classe aceita um objeto da classe PdfDocument.
Instancie o Document classe passando o objeto da classe PdfDocument criado nas etapas anteriores, conforme mostrado abaixo.
// Creating a Document
Document document = new Document(pdfDoc);
Etapa 4: Criando um objeto Tabela
o Tableclasse representa uma grade bidimensional preenchida com células, ordenadas em linhas e colunas. Pertence ao pacotecom.itextpdf.layout.element.
Instancie o Table classe como mostrado abaixo.
// Creating a table
float [] pointColumnWidths = {200F, 200F};
Table table = new Table(pointColumnWidths);
Etapa 5: Criação da célula
Criar uma cell objeto instanciando o Cell classe do pacote com.itextpdf.layout, como mostrado abaixo.
// Adding cell to the table
Cell contact = new Cell(); // Creating a cell
Etapa 6: Criação de tabela aninhada
Depois de criar o cell, crie uma tabela aninhada e preencha suas células, conforme mostrado abaixo.
// Creating nested table for contact
float [] pointColumnWidths2 = {150f, 150f};
Table nestedTable = new Table(pointColumnWidths2);
// Populating row 1 and adding it to the nested table
Cell nested1 = new Cell();
nested1.add("Phone");
nestedTable.addCell(nested1);
Cell nested2 = new Cell();
nested2.add("9848022338");
nestedTable.addCell(nested2);
// Populating row 2 and adding it to the nested table
Cell nested3 = new Cell();
nested3.add("email");
nestedTable.addCell(nested3);
Cell nested4 = new Cell();
nested4.add("[email protected]");
nestedTable.addCell(nested4);
// Populating row 3 and adding it to the nested table
Cell nested5 = new Cell();
nested5.add("Address");
nestedTable.addCell(nested5);
Cell nested6 = new Cell();
nested6.add("Hyderabad");
nestedTable.addCell(nested6);
Etapa 7: Adicionar tabela aninhada à célula
Agora, adicione a tabela aninhada criada acima à célula da tabela pai (contêiner) usando o add() método do Cellclasse. E, adicione esta célula à tabela pai usando oaddCell() método do Table classe, conforme mostrado abaixo.
contact.add(nestedTable);
table.addCell(contact);
Etapa 8: Adicionando tabela ao documento
Adicione o table objeto criado na etapa anterior usando o add() método do Document classe, conforme mostrado abaixo.
// Adding list to the document
document.add(table);
Etapa 9: Fechando o Documento
Feche o documento usando o close() método do Document classe, conforme mostrado abaixo.
// Closing the document
document.close();
Exemplo
O programa Java a seguir demonstra como adicionar uma tabela a uma célula de uma tabela (tabela aninhada) em um documento PDF usando a biblioteca iText. Ele cria um documento PDF com o nomeaddingNestedTable.pdf, adiciona uma tabela a ele, insere outra tabela em uma de suas células e a salva no caminho C:/itextExamples/.
Salve este código em um arquivo com o nome AddNestedTable.java.
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.layout.Document;
import com.itextpdf.layout.element.Cell;
import com.itextpdf.layout.element.Table;
public class a4AddNestedTablesPdf {
public static void main(String args[]) throws Exception {
// Creating a PdfWriter object
String dest = "C:/itextExamples/addingNestedTable.pdf";
PdfWriter writer = new PdfWriter(dest);
// Creating a PdfDocument object
PdfDocument pdfDoc = new PdfDocument(writer);
// Creating a Document object
Document doc = new Document(pdfDoc);
// Creating a table
float [] pointColumnWidths1 = {150f, 150f};
Table table = new Table(pointColumnWidths1);
// Populating row 1 and adding it to the table
Cell cell1 = new Cell();
cell1.add("Name");
table.addCell(cell1);
Cell cell2 = new Cell();
cell2.add("Raju");
table.addCell(cell2);
// Populating row 2 and adding it to the table
Cell cell3 = new Cell();
cell3.add("Id");
table.addCell(cell3);
Cell cell4 = new Cell();
cell4.add("1001");
table.addCell(cell4);
// Populating row 3 and adding it to the table
Cell cell5 = new Cell();
cell5.add("Designation");
table.addCell(cell5);
Cell cell6 = new Cell();
cell6.add("Programmer");
table.addCell(cell6);
// Creating nested table for contact
float [] pointColumnWidths2 = {150f, 150f};
Table nestedTable = new Table(pointColumnWidths2);
// Populating row 1 and adding it to the nested table
Cell nested1 = new Cell();
nested1.add("Phone");
nestedTable.addCell(nested1);
Cell nested2 = new Cell();
nested2.add("9848022338");
nestedTable.addCell(nested2);
// Populating row 2 and adding it to the nested table
Cell nested3 = new Cell();
nested3.add("email");
nestedTable.addCell(nested3);
Cell nested4 = new Cell();
nested4.add("[email protected]");
nestedTable.addCell(nested4);
// Populating row 3 and adding it to the nested table
Cell nested5 = new Cell();
nested5.add("Address");
nestedTable.addCell(nested5);
Cell nested6 = new Cell();
nested6.add("Hyderabad");
nestedTable.addCell(nested6);
// Adding table to the cell
Cell cell7 = new Cell();
cell7.add("Contact");
table.addCell(cell7);
Cell cell8 = new Cell();
cell8.add(nestedTable);
table.addCell(cell8);
// Adding table to the document
doc.add(table);
// Closing the document
doc.close();
System.out.println("Nested Table Added successfully..");
}
}
Compile e execute o arquivo Java salvo no prompt de comando usando os seguintes comandos -
javac AddNestedTable.java
java AddNestedTable
Após a execução, o programa acima cria um documento PDF exibindo a seguinte mensagem.
Nested Table Added successfully..
Se você verificar o caminho especificado, poderá encontrar o documento PDF criado, conforme mostrado abaixo.