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.