iText - Tabella annidata

In questo capitolo vedremo come aggiungere una tabella nidificata a una tabella in un documento PDF utilizzando la libreria iText.

Aggiunta di tabelle nidificate in un PDF

È possibile creare un documento PDF vuoto istanziando il file Documentclasse. Durante la creazione di un'istanza di questa classe, è necessario superare un filePdfDocumentoggetto come parametro, al suo costruttore. Quindi, per aggiungere una tabella al documento, è necessario creare un'istanza del fileTable class e aggiungi questo oggetto al documento usando il add() metodo.

Per aggiungere una tabella a questa tabella, è necessario creare un'altra tabella (tabella nidificata) e passarla all'oggetto cella utilizzando il add() metodo del Cell classe.

Di seguito sono riportati i passaggi per inserire una tabella nella cella di una tabella.

Passaggio 1: creazione di un oggetto PdfWriter

Il PdfWriterclass rappresenta il DocWriter per un PDF. Questa classe appartiene al pacchettocom.itextpdf.kernel.pdf. Il costruttore di questa classe accetta una stringa, che rappresenta il percorso del file in cui deve essere creato il PDF.

Istanziare la classe PdfWriter passando un valore stringa (che rappresenta il percorso in cui è necessario creare un PDF) al suo costruttore, come mostrato di seguito.

// Creating a PdfWriter 
String dest = "C:/itextExamples/addingNestedTable.pdf"; 
PdfWriter writer = new PdfWriter(dest);

Quando un oggetto di questo tipo viene passato a un PdfDocument (classe), ogni elemento aggiunto a questo documento verrà scritto nel file specificato.

Passaggio 2: creazione di un oggetto PdfDocument

Il PdfDocumentclass è la classe che rappresenta il documento PDF in iText. Questa classe appartiene al pacchettocom.itextpdf.kernel.pdf. Per istanziare questa classe (in modalità di scrittura), è necessario passare un oggetto della classe PdfWriter al suo costruttore.

Istanziare la classe PdfDocument passando l'oggetto PdfWriter creato sopra al suo costruttore, come mostrato di seguito.

// Creating a PdfDocument  
PdfDocument pdfDoc = new PdfDocument(writer);

Una volta creato un oggetto PdfDocument, è possibile aggiungere vari elementi come pagina, font, file allegati e gestore eventi utilizzando i rispettivi metodi forniti dalla sua classe.

Passaggio 3: creazione dell'oggetto Documento

Il Document classe del pacchetto com.itextpdf.layoutè l'elemento principale durante la creazione di un PDF autosufficiente. Uno dei costruttori di questa classe accetta un oggetto della classe PdfDocument.

Istanziare il file Document class passando l'oggetto della classe PdfDocument creato nei passaggi precedenti, come mostrato di seguito.

// Creating a Document   
Document document = new Document(pdfDoc);

Passaggio 4: creazione di un oggetto tabella

Il Tableclass rappresenta una griglia bidimensionale piena di celle, ordinate in righe e colonne. Appartiene al pacchettocom.itextpdf.layout.element.

Istanziare il file Table classe come mostrato di seguito.

// Creating a table 
float [] pointColumnWidths = {200F, 200F}; 
Table table = new Table(pointColumnWidths);

Passaggio 5: creazione della cella

Creare un cell oggetto istanziando il file Cell classe del pacchetto com.itextpdf.layout, come mostrato di seguito.

// Adding cell to the table 
Cell contact = new Cell();    // Creating a cell

Passaggio 6: creazione di una tabella nidificata

Dopo aver creato il file cell, crea una tabella nidificata e popola le sue celle, come mostrato di seguito.

// 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);

Passaggio 7: aggiunta di una tabella nidificata alla cella

Ora aggiungi la tabella nidificata creata sopra alla cella della tabella padre (contenitore) usando il add() metodo del Cellclasse. E aggiungi questa cella alla tabella genitore usando iladdCell() metodo del Table classe, come mostrato di seguito.

contact.add(nestedTable); 
table.addCell(contact);

Passaggio 8: aggiunta di una tabella al documento

Aggiungi il table oggetto creato nel passaggio precedente utilizzando il add() metodo del Document classe, come mostrato di seguito.

// Adding list to the document 
document.add(table);

Passaggio 9: chiusura del documento

Chiudere il documento utilizzando il file close() metodo del Document classe, come mostrato di seguito.

// Closing the document 
document.close();

Esempio

Il seguente programma Java dimostra come aggiungere una tabella a una cella di una tabella (tabella nidificata) in un documento PDF utilizzando la libreria iText. Crea un documento PDF con il nomeaddingNestedTable.pdf, aggiunge una tabella, inserisce un'altra tabella in una delle sue celle e la salva nel percorso C:/itextExamples/.

Salva questo codice in un file con il 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..");     
   } 
}

Compilare ed eseguire il file Java salvato dal prompt dei comandi utilizzando i seguenti comandi:

javac AddNestedTable.java 
java AddNestedTable

Al momento dell'esecuzione, il programma di cui sopra crea un documento PDF che mostra il seguente messaggio.

Nested Table Added successfully..

Se verifichi il percorso specificato, puoi trovare il documento PDF creato, come mostrato di seguito.