Учебники

iText — Вложенный Стол

В этой главе мы увидим, как добавить вложенную таблицу в таблицу в документе PDF с помощью библиотеки iText.

Добавление вложенных таблиц в PDF

Вы можете создать пустой PDF-документ, создав экземпляр класса Document . При создании экземпляра этого класса вам необходимо передать объект PdfDocument в качестве параметра его конструктору. Затем, чтобы добавить таблицу в документ, вам нужно создать экземпляр класса Table и добавить этот объект в документ с помощью метода add () .

Чтобы добавить таблицу в эту таблицу, необходимо создать другую таблицу (вложенную таблицу) и передать ее объекту ячейки с помощью метода add () класса Cell .

Ниже приведены шаги для вставки таблицы в ячейку таблицы.

Шаг 1: Создание объекта PdfWriter

Класс PdfWriter представляет DocWriter для PDF. Этот класс принадлежит пакету com.itextpdf.kernel.pdf . Конструктор этого класса принимает строку, представляющую путь к файлу, в котором должен быть создан PDF.

Создайте экземпляр класса PdfWriter, передав строковое значение (представляющее путь, по которому вам нужно создать PDF), в его конструктор, как показано ниже.

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

Когда объект этого типа передается в PdfDocument (класс), каждый элемент, добавленный в этот документ, будет записан в указанный файл.

Шаг 2: Создание объекта PdfDocument

Класс PdfDocument — это класс, который представляет документ PDF в iText. Этот класс принадлежит пакету com.itextpdf.kernel.pdf. Чтобы создать экземпляр этого класса (в режиме записи), вам нужно передать объект класса PdfWriter его конструктору.

Создайте экземпляр класса PdfDocument, передав вышеупомянутый созданный объект PdfWriter его конструктору, как показано ниже.

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

После создания объекта PdfDocument вы можете добавить различные элементы, такие как страница, шрифт, вложение файла и обработчик события, используя соответствующие методы, предоставляемые его классом.

Шаг 3: Создание объекта Document

Класс Document пакета com.itextpdf.layout является корневым элементом при создании самодостаточного PDF. Один из конструкторов этого класса принимает объект класса PdfDocument.

Создайте экземпляр класса Document , передав объект класса PdfDocument, созданный на предыдущих шагах, как показано ниже.

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

Шаг 4: Создание объекта Table

Класс Table представляет собой двумерную сетку, заполненную ячейками, упорядоченными по строкам и столбцам. Он принадлежит пакету com.itextpdf.layout.element .

Создайте класс Table, как показано ниже.

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

Шаг 5: Создание ячейки

Создайте объект ячейки, создав экземпляр класса Cell пакета com.itextpdf.layout , как показано ниже.

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

Шаг 6: Создание вложенной таблицы

После создания ячейки создайте вложенную таблицу и заполните ее ячейки, как показано ниже.

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

Шаг 7: Добавление вложенной таблицы в ячейку

Теперь добавьте созданную выше вложенную таблицу в ячейку родительской (контейнерной) таблицы, используя метод add () класса Cell . И добавьте эту ячейку в родительскую таблицу, используя метод addCell () класса Table , как показано ниже.

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

Шаг 8: Добавление таблицы в документ

Добавьте объект таблицы, созданный на предыдущем шаге, с помощью метода add () класса Document , как показано ниже.

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

Шаг 9: Закрытие документа

Закройте документ с помощью метода close () класса Document , как показано ниже.

// Closing the document 
document.close();

пример

Следующая программа на Java демонстрирует, как добавить таблицу в ячейку таблицы (вложенная таблица) в документе PDF с помощью библиотеки iText. Он создает документ PDF с именем добавлениеNestedTable.pdf , добавляет к нему таблицу, вставляет другую таблицу в одну из ее ячеек и сохраняет ее по пути C: / itextExamples / .

Сохраните этот код в файле с именем 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..");     
   } 
}    

Скомпилируйте и выполните сохраненный файл Java из командной строки, используя следующие команды:

javac AddNestedTable.java 
java AddNestedTable 

После выполнения вышеуказанная программа создает документ PDF, отображающий следующее сообщение.

Nested Table Added successfully..

Если вы проверите указанный путь, вы можете найти созданный PDF-документ, как показано ниже.