title: Fill the dynamic data with each row columns by column Using iText in Java
body: <ul>
  <li>Hi Every One</li>
  <li>I've a pdf report generated with iText containing a PdfPTable added to MultiColumnText, sometimes becomes so large that it will be split on more than one page,</li>
  <li><strong>Here am added sample Code, Its working as</strong></li>
  </ul>
  
  <p>Page -1</p>
  
  <p>--------------------------------------------------------------------------------------------------------------------------------------------------+
  | 1st - Emp1-NO | 2nd - Emp1-Name| 3rd - Emp1-Desig |</p>
  
  <p>| 4th - Emp2-NO | 5th - Emp2-Name| 6th - Emp2-Desig |</p>
  
  <p>| 7th - Emp3-NO | 8th - Emp3-Name| 9th - Emp3-Desig |</p>
  
  <p>--------------------------------------------------------------------------------------------------------------------------------------------------+</p>
  
  <ul>
  <li><p><strong>but i want fill the data as first No all rows then each columns i.e. column by column</strong></p></li>
  <li><p><strong>Like below</strong> </p></li>
  </ul>
  
  <p>Page -1</p>
  
  <p>--------------------------------------------------------------------------------------------------------------------------------------------------+
  | 1st - Emp1-NO | 4th - Emp1-Name| 7th - Emp1-Desig |</p>
  
  <p>| 2nd - Emp2-NO | 5th - Emp2-Name| 8th - Emp2-Desig |</p>
  
  <p>| 3rd - Emp3-NO | 6th - Emp3-Name| 9th - Emp3-Desig |</p>
  
  <p>--------------------------------------------------------------------------------------------------------------------------------------------------+</p>
  
  <p>**My Code is **</p>
  
  <pre><code>package com.ace.pdf;
  import java.io.ByteArrayOutputStream;
  import java.io.File;
  import java.io.FileOutputStream;
  import java.io.IOException;
  import java.io.OutputStream;
  import java.util.Calendar;
  import java.util.Date;
  import java.util.Locale;
  
  import com.itextpdf.text.BaseColor;
  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.Rectangle;
  import com.itextpdf.text.pdf.PdfNumber;
  import com.itextpdf.text.pdf.PdfPCell;
  import com.itextpdf.text.pdf.PdfPTable;
  import com.itextpdf.text.pdf.PdfPage;
  import com.itextpdf.text.pdf.PdfPageEventHelper;
  import com.itextpdf.text.pdf.PdfWriter;
  
  public class AttendanceTimeSheet {
      public static Font catFont = new Font(Font.FontFamily.TIMES_ROMAN, 12, Font.BOLD, BaseColor.BLACK);
      public static Font subSecFont = new Font(Font.FontFamily.TIMES_ROMAN, 10, Font.BOLD, BaseColor.BLUE);
      public static Font tableCellFont = new Font(Font.FontFamily.TIMES_ROMAN, 10, Font.BOLD);
      public static Font smallFont = new Font(Font.FontFamily.TIMES_ROMAN, 6, Font.NORMAL);
      public static Font smallFontofnames = new Font(Font.FontFamily.TIMES_ROMAN, 7, Font.BOLD);
      public static Font smallFontofcomp = new Font(Font.FontFamily.TIMES_ROMAN, 7, Font.BOLD);
      public static Font smallFontofstopped = new Font(Font.FontFamily.TIMES_ROMAN, 7, Font.BOLD);
      public static Font smallFontofGPS = new Font(Font.FontFamily.TIMES_ROMAN, 7, Font.BOLD);
      public static Font smallWhiteFont = new Font(Font.FontFamily.TIMES_ROMAN, 6, Font.NORMAL);
      public static Font smallFontUnderline = new Font(Font.FontFamily.TIMES_ROMAN, 10, Font.NORMAL);
      public static Font smallHeadersFont = new Font(Font.FontFamily.TIMES_ROMAN, 7, Font.BOLD);
      public static Font FontForAllBold = new Font(Font.FontFamily.TIMES_ROMAN, 7, Font.BOLD);
  
      public static Font headerBold = new Font(Font.FontFamily.TIMES_ROMAN, 5, Font.BOLD);
      public static Font headerBoldData = new Font(Font.FontFamily.TIMES_ROMAN, 5, Font.BOLD);
  
      public class Rotate extends PdfPageEventHelper {
          protected PdfNumber rotation = PdfPage.PORTRAIT;
  
          public void setRotation(PdfNumber rotation) {
              this.rotation = rotation;
          }
  
          public void onEndPage(PdfWriter writer, Document document) {
              //writer.addPageDictEntry(PdfName.ROTATE, rotation);
          }
      }
  
      public static void main(String[] args) throws IOException, DocumentException {
          new AttendanceTimeSheet().createPdf();
      }
  
      public void createPdf() throws IOException, DocumentException {
          ByteArrayOutputStream baos = new ByteArrayOutputStream();
          Rectangle pagesize = new Rectangle(842f, 595f);
          Document document = new Document(pagesize, 10f, 10f, 10f, 10f);
          try {
              OutputStream file = new FileOutputStream(new File("E:\\ExamplePDF\\AttSheet+" + new Date().getTime() + ".pdf"));
              PdfWriter writer = PdfWriter.getInstance(document, file);
              Rotate rotation = new Rotate();
              writer.setPageEvent(rotation);
              rotation.setRotation(PdfPage.SEASCAPE);
              document.open();
              Paragraph paraRepName = new Paragraph();
              paraRepName.add(new Paragraph("SHEET", catFont));
              paraRepName.setSpacingAfter(04);
              document.add(paraRepName);
              int pageNo = 1;
              PdfPTable headeTable = headerTable_Main();
              document.add(headeTable);           
              PdfPTable data_HeadeTable = headerTable_Data();
              document.add(data_HeadeTable);
              for (int rows = 1; rows &lt;= 10; rows++) {
                  //Here will dynamic data some List
                  PdfPTable rdTable = rawDataTable();
                  document.add(rdTable);
              }
              document.newPage();
              pageNo = pageNo + 1;
              Paragraph balnkParaSummary = new Paragraph();
              document.add(balnkParaSummary);
              document.close();
              System.out.println("Pdf created successfully..");
          } catch (DocumentException e) {
              e.printStackTrace();
          } catch (Exception e) {
              e.printStackTrace();
          }
          return;
      }
  
      private static PdfPTable headerTable_Main() throws DocumentException {
          PdfPTable table = new PdfPTable(7);
          table.setWidthPercentage(100);
          table.setWidths(new int[] { 20, 40, 10, 10, 10, 10, 10 });
          PdfPCell cell = new PdfPCell();
          for (int tblrow = 1; tblrow &lt;= 3; tblrow++) {
              String cellHead1 = "";
              String cellHead2 = "";
              String cellHead3 = "";
              String cellHead4 = "";
              String cellHead5 = "";
              String cellHead6 = "";
              String cellHead7 = "";
              if (tblrow == 1) {
                  cellHead1 = "Project : ACE";
                  cellHead2 = "";
                  cellHead3 = "Legend:";
                  cellHead4 = "AB = Absent";
                  cellHead5 = "R = Rest Day";
                  cellHead6 = "O = Off Day";
                  cellHead7 = "H = Holi Day";
              } else if (tblrow == 2) {
                  cellHead1 = "CLIENT : DOPMO";
                  cellHead2 = "";
                  cellHead3 = "";
                  cellHead4 = "AL = Annual Leave";
                  cellHead5 = "EL = Emg Leave";
                  cellHead6 = "L1 = ";
                  cellHead7 = "L2 = ";
              } else {
                  cellHead1 = "Period : ";
                  cellHead2 = "";
                  cellHead3 = "";
                  cellHead4 = "";
                  cellHead5 = "";
                  cellHead6 = "";
                  cellHead7 = "";
              }
  
              for (int i = 1; i &lt;= 7; i++) {
                  if (i == 1) {
                      cell = new PdfPCell(new Phrase(cellHead1, headerBold));
                      cell.setHorizontalAlignment(Element.ALIGN_LEFT);
                  } else if (i == 2) {
                      cell = new PdfPCell(new Phrase(cellHead2, headerBold));
                      cell.setHorizontalAlignment(Element.ALIGN_LEFT);
                  } else if (i == 3) {
                      cell = new PdfPCell(new Phrase(cellHead3, headerBold));
                      cell.setHorizontalAlignment(Element.ALIGN_LEFT);
                  } else if (i == 4) {
                      cell = new PdfPCell(new Phrase(cellHead4, headerBold));
                      cell.setHorizontalAlignment(Element.ALIGN_LEFT);
                  } else if (i == 5) {
                      cell = new PdfPCell(new Phrase(cellHead5, headerBold));
                      cell.setHorizontalAlignment(Element.ALIGN_LEFT);
                  } else if (i == 6) {
                      cell = new PdfPCell(new Phrase(cellHead6, headerBold));
                      cell.setHorizontalAlignment(Element.ALIGN_LEFT);
                  } else {
                      cell = new PdfPCell(new Phrase(cellHead7, headerBold));
                      cell.setHorizontalAlignment(Element.ALIGN_LEFT);
                  }
                  if (i &lt;= 3 || tblrow == 3) {
                      cell.setBorderWidthRight(0);
                      cell.setBorderWidthLeft(0);
                      cell.setBorderWidthTop(0);
                      cell.setBorderWidthBottom(0);
                      cell.setBorderColorBottom(BaseColor.WHITE);
                      cell.setBorderColorLeft(BaseColor.WHITE);
                      cell.setBorderColorRight(BaseColor.WHITE);
                      cell.setBorderColorTop(BaseColor.WHITE);
                  }
                  cell.setBackgroundColor(BaseColor.WHITE);
                  cell.setFixedHeight(8);
                  cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
                  cell.setUseAscender(true);
                  table.addCell(cell);
              }
          }
  
          return table;
      }
  
      private static PdfPTable headerTable_Data() throws DocumentException {
          PdfPTable table = new PdfPTable(33);
          table.setWidthPercentage(100);
          table.setWidths(new int[] { 10, 10, 02, 02, 02, 02, 02, 02, 02, 02, 02, 02, 02, 02, 02, 02, 02, 02, 02, 02, 02, 02, 02, 02, 02, 02, 02, 02,
                  02, 02, 02, 02, 02 });
          table.setSpacingBefore(05.0f);  
          PdfPCell cell = new PdfPCell();
          Date currentDate = new Date();
          Calendar cal = Calendar.getInstance();
          cal.setTime(currentDate);
          for (int tblRow = 1; tblRow &lt;= 2; tblRow++) {
              currentDate = new Date();
              cal = Calendar.getInstance();
              cal.setTime(currentDate);
              int dateNo = 1;
              int dateNos = 1;
              for (int i = 1; i &lt;= 33; i++) {
                  cal.set(Calendar.DATE, dateNos);
                  if (i == 1) {
                      if (tblRow != 1) {
                          cell = new PdfPCell(new Phrase("Name", smallHeadersFont));
                          cell.setHorizontalAlignment(Element.ALIGN_CENTER);
                      }
                  } else if (i == 2) {
                      if (tblRow != 1) {
                          cell = new PdfPCell(new Phrase("Role", smallHeadersFont));
                          cell.setHorizontalAlignment(Element.ALIGN_CENTER);
                      }
                  } else {
                      if (tblRow == 1) {
                          if (i &gt;= 3) {
                              cell = new PdfPCell(new Phrase(cal.getDisplayName(Calendar.DAY_OF_WEEK, Calendar.SHORT, Locale.US), headerBold));
                              if(cal.getDisplayName(Calendar.DAY_OF_WEEK, Calendar.SHORT, Locale.US) == "Fri"){
                                  cell.setBackgroundColor(BaseColor.BLUE);
                              }else{
                                  cell.setBackgroundColor(BaseColor.WHITE);
                              }
                              dateNos = dateNos + 1;
                          }
                      } else {
                          cell = new PdfPCell(new Phrase("" + dateNo, headerBold));
                          if(cal.getDisplayName(Calendar.DAY_OF_WEEK, Calendar.SHORT, Locale.US) == "Fri"){
                              cell.setBackgroundColor(BaseColor.BLUE);
                          }else{
                              cell.setBackgroundColor(BaseColor.WHITE);
                          }
                          dateNo = dateNo + 1;
                          dateNos = dateNos + 1;
                      }
  
                  }
                  cell.setFixedHeight(15);
                  cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
                  cell.setUseAscender(true);
                  table.addCell(cell);
  
              }
          }
  
          return table;
      }
  
      private static PdfPTable rawDataTable() throws DocumentException {
  
          PdfPTable table = new PdfPTable(33);
          table.setWidthPercentage(100);
          table.setWidths(new int[] { 10, 10, 02, 02, 02, 02, 02, 02, 02, 02, 02, 02, 02, 02, 02, 02, 02, 02, 02, 02, 02, 02, 02, 02, 02, 02, 02, 02,
                  02, 02, 02, 02, 02 });
          table.setSpacingBefore(0.0f);
          String head1;
          String head2;
          Date currentDate = new Date();
          Calendar cal = Calendar.getInstance();
          cal.setTime(currentDate);
  
          for (int j = 1; j &lt;= 2; j++) {
              currentDate = new Date();
              cal = Calendar.getInstance();
              cal.setTime(currentDate);
              if (j == 1) {
                  head1 = "Rajinikanth Developer";
                  head2 = "Designation ";
              } else {
                  head1 = "";
                  head2 = "";
              }
              PdfPCell cell = new PdfPCell();
              int dateNos = 1;
              for (int i = 1; i &lt;= 33; i++) {
                  cal.set(Calendar.DATE, dateNos);
  
                  if (i == 1) {
                      if (j == 2) {
                          cell = new PdfPCell(new Phrase("10:12", headerBoldData));
                          dateNos = dateNos + 1;
                      } else {
                          cell = new PdfPCell(new Phrase(head1, headerBoldData));
                      }
                  } else if (i == 2) {
                      if (j == 2) {
                          cell = new PdfPCell(new Phrase("10:13", headerBoldData));
                          dateNos = dateNos + 1;
                      } else {
                          cell = new PdfPCell(new Phrase(head2, headerBoldData));
                      }
                  } else {
                      if (j == 1) {
                          cell = new PdfPCell(new Phrase("10:11", headerBoldData));
                          dateNos = dateNos + 1;
  
                      } else {
                          cell = new PdfPCell(new Phrase("08:59", headerBoldData));
                          dateNos = dateNos + 1;
                      }
  
                  }
                  if (j == 1 &amp;&amp; i &lt;= 2) {
                      cell.setRowspan(2);
                  }
                  cell.setFixedHeight(15);
                  if(cal.getDisplayName(Calendar.DAY_OF_WEEK, Calendar.SHORT, Locale.US) == "Fri"){
                      cell.setBackgroundColor(BaseColor.BLUE);
                  }else{
                      cell.setBackgroundColor(BaseColor.WHITE);
                  }
                  cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
                  cell.setUseAscender(true);
                  table.addCell(cell);
  
              }
  
          }
  
          return table;
      }
  }
  </code></pre>
  
  <p>**sample PDF is **
  <a href="https://i.stack.imgur.com/pWeLb.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/pWeLb.png" alt="SamplePDF"></a></p>
  
  <p><strong>Question Updating</strong></p>
  
  <ol>
  <li><p>I have 150 Employees Data</p></li>
  <li><p>Each Employee Have Name &amp; InTime &amp; OutTime</p></li>
  <li><p>Please find the PDF Image</p></li>
  <li><p>I Need Help on Logic of cell fill as
  a. Print Employee Ids in 1st Column - 150 employees 
  b. Then already printed each row 2nd Column with Employee Name
  c. Then print with In time 3rd Column</p></li>
  </ol>
  
  <p>Simply From <a href="https://i.stack.imgur.com/rK5Ip.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/rK5Ip.png" alt="PDFIMAGE"></a>- First Print 3 rows with 1st Column [1066,1067,1069] Ids Then again Print again Exiting 3 rows 2nd Column[Name-ABCD, Name-XYZ, Name-PQR]..etc</p>
  
  <pre><code>    ConcurrentHashMap&lt;String,EmpHistory&gt; emp_HistoryList = new ConcurrentHashMap&lt;String, EmpHistory&gt;();
  emp_HistoryList = this.getHistoryData();
  for(EmpInfo emp : empInfoList){
      empHistory = emp_HistoryList.get(emp.getId());
      //Print all 105 Emps rows with IDs in 1st Column
      //Print each Emp row Name and IN time column
  }
  </code></pre>
  
  <p><strong>Question Update - 2</strong></p>
  
  <ul>
  <li>I am using Java with iText</li>
  <li>I need to put text in columns,</li>
  <li>I Created PDFTable as : <code>PdfPTable table = new PdfPTable(33);</code></li>
  <li>The problem is that PdfPTable fills the table row by row, that is, you first give the cell in column 1 of row 1, then column 2 of row 1, and so on, but I need to do it column by column, because that is how the data is being fed to me.</li>
  </ul>
  
  <p>I Need Like as : </p>
  
  <p><code>
  1 3 5
  2 4 6
  </code></p>
  
  <ul>
  <li>present code working as </li>
  </ul>
  
  <p><code>
  1 2 3
  4 5 6
  </code></p>
  
  <ul>
  <li>please may i know where i did changes from my example code</li>
  <li>please help on this, thanks in Advance.</li>
  </ul>