Class PdfPTable

java.lang.Object
com.lowagie.text.pdf.PdfPTable
All Implemented Interfaces:
Element, LargeElement

public class PdfPTable extends Object implements LargeElement
This is a table that can be put at an absolute position but can also be added to the document as the class Table. In the last case when crossing pages the table always break at full rows; if a row is bigger than the page it is dropped silently to avoid infinite loops.

A PdfPTableEvent can be associated to the table to do custom drawing when the table is rendered.

  • Field Details

    • BASECANVAS

      public static final int BASECANVAS
      The index of the original PdfcontentByte.
      See Also:
    • BACKGROUNDCANVAS

      public static final int BACKGROUNDCANVAS
      The index of the duplicate PdfContentByte where the background will be drawn.
      See Also:
    • LINECANVAS

      public static final int LINECANVAS
      The index of the duplicate PdfContentByte where the border lines will be drawn.
      See Also:
    • TEXTCANVAS

      public static final int TEXTCANVAS
      The index of the duplicate PdfContentByte where the text will be drawn.
      See Also:
    • rows

      protected ArrayList<PdfPRow> rows
    • totalHeight

      protected float totalHeight
    • currentRow

      protected PdfPCell[] currentRow
    • currentRowIdx

      protected int currentRowIdx
    • defaultCell

      protected PdfPCell defaultCell
    • totalWidth

      protected float totalWidth
    • relativeWidths

      protected float[] relativeWidths
    • absoluteWidths

      protected float[] absoluteWidths
    • tableEvent

      protected PdfPTableEvent tableEvent
    • headerRows

      protected int headerRows
      Holds value of property headerRows.
    • widthPercentage

      protected float widthPercentage
      Holds value of property widthPercentage.
    • isColspan

      protected boolean isColspan
    • runDirection

      protected int runDirection
    • spacingBefore

      protected float spacingBefore
      The spacing before the table.
    • spacingAfter

      protected float spacingAfter
      The spacing after the table.
    • complete

      protected boolean complete
      Indicates if the PdfPTable is complete once added to the document.
      Since:
      iText 2.0.8
    • rowCompleted

      protected boolean rowCompleted
      Keeps track of the completeness of the current row.
      Since:
      2.1.6
    • horizontalAlignment

      private int horizontalAlignment
      Holds value of property horizontalAlignment.
    • skipFirstHeader

      private boolean skipFirstHeader
      Holds value of property skipFirstHeader.
    • skipLastFooter

      private boolean skipLastFooter
      Holds value of property skipLastFooter.
      Since:
      2.1.6
    • lockedWidth

      private boolean lockedWidth
      Holds value of property lockedWidth.
    • splitRows

      private boolean splitRows
      Holds value of property splitRows.
    • extendLastRow

      private boolean[] extendLastRow
      Holds value of property extendLastRow.
    • headersInEvent

      private boolean headersInEvent
      Holds value of property headersInEvent.
    • splitLate

      private boolean splitLate
      Holds value of property splitLate.
    • keepTogether

      private boolean keepTogether
      Defines if the table should be kept on one page if possible
    • footerRows

      private int footerRows
      Holds value of property footerRows.
  • Constructor Details

    • PdfPTable

      protected PdfPTable()
    • PdfPTable

      public PdfPTable(float[] relativeWidths)
      Constructs a PdfPTable with the relative column widths.
      Parameters:
      relativeWidths - the relative column widths
    • PdfPTable

      public PdfPTable(int numColumns)
      Constructs a PdfPTable with numColumns columns.
      Parameters:
      numColumns - the number of columns
    • PdfPTable

      public PdfPTable(PdfPTable table)
      Constructs a copy of a PdfPTable.
      Parameters:
      table - the PdfPTable to be copied
  • Method Details

    • shallowCopy

      public static PdfPTable shallowCopy(PdfPTable table)
      Makes a shallow copy of a table (format without content).
      Parameters:
      table - the PdfTable to copy
      Returns:
      a shallow copy of the table
    • beginWritingRows

      public static PdfContentByte[] beginWritingRows(PdfContentByte canvas)
      Gets and initializes the 4 layers where the table is written to. The text or graphics are added to one of the 4 PdfContentByte returned with the following order:
      • PdfPtable.BASECANVAS - the original PdfContentByte. Anything placed here will be under the table.
      • PdfPtable.BACKGROUNDCANVAS - the layer where the background goes to.
      • PdfPtable.LINECANVAS - the layer where the lines go to.
      • PdfPtable.TEXTCANVAS - the layer where the text go to. Anything placed here will be over the table.

      The layers are placed in sequence on top of each other.

      Parameters:
      canvas - the PdfContentByte where the rows will be written to
      Returns:
      an array of 4 PdfContentByte
      See Also:
    • endWritingRows

      public static void endWritingRows(PdfContentByte[] canvases)
      Finishes writing the table.
      Parameters:
      canvases - the array returned by beginWritingRows()
    • copyFormat

      protected void copyFormat(PdfPTable sourceTable)
      Copies the format of the sourceTable without copying the content.
      Parameters:
      sourceTable - the PdfTable to copy the format of
      Since:
      2.1.6 private is now protected
    • setWidths

      public void setWidths(float[] relativeWidths) throws DocumentException
      Sets the relative widths of the table.
      Parameters:
      relativeWidths - the relative widths of the table.
      Throws:
      DocumentException - if the number of widths is different than the number of columns
    • setWidths

      public void setWidths(int[] relativeWidths) throws DocumentException
      Sets the relative widths of the table.
      Parameters:
      relativeWidths - the relative widths of the table.
      Throws:
      DocumentException - if the number of widths is different than the number of columns
    • calculateWidths

      protected void calculateWidths()
      Since:
      2.1.6 private is now protected
    • setWidthPercentage

      public void setWidthPercentage(float[] columnWidth, Rectangle pageSize) throws DocumentException
      Sets the percentage width of the table from the absolute column width.
      Parameters:
      columnWidth - the absolute width of each column
      pageSize - the page size
      Throws:
      DocumentException - on error
    • getTotalWidth

      public float getTotalWidth()
      Gets the full width of the table.
      Returns:
      the full width of the table
    • setTotalWidth

      public void setTotalWidth(float totalWidth)
      Sets the full width of the table.
      Parameters:
      totalWidth - the full width of the table.
    • setTotalWidth

      public void setTotalWidth(float[] columnWidth) throws DocumentException
      Sets the full width of the table from the absolute column width.
      Parameters:
      columnWidth - the absolute width of each column
      Throws:
      DocumentException - if the number of widths is different than the number of columns
    • calculateHeights

      public float calculateHeights(boolean firsttime)
      Calculates the heights of the table.
      Parameters:
      firsttime - if true, the heights of the rows will be recalculated. This takes time; normally the heights of the rows are already calcultated, so in most cases, it's save to use false as parameter.
      Returns:
      the total height of the table. Note that it will be 0 if you didn't specify the width of the table with setTotalWidth().
      Since:
      2.1.5 added a parameter and a return type to an existing method, and made it public
    • calculateHeightsFast

      public void calculateHeightsFast()
      Calculates the heights of the table.
    • getDefaultCell

      public PdfPCell getDefaultCell()
      Gets the default PdfPCell that will be used as reference for all the addCell methods except addCell(PdfPCell).
      Returns:
      default PdfPCell
    • addCell

      public PdfPCell addCell(PdfPCell cell)
      Adds a cell element.
      Parameters:
      cell - the cell element
    • skipColsWithRowspanAbove

      private void skipColsWithRowspanAbove()
      When updating the row index, cells with rowspan should be taken into account. This is what happens in this method.
      Since:
      2.1.6
    • obtainCell

      PdfPCell obtainCell(int row, int col)
    • rowSpanAbove

      boolean rowSpanAbove(int currRow, int currCol)
      Checks if there are rows above belonging to a rowspan.
      Parameters:
      currRow - the current row to check
      currCol - the current column to check
      Returns:
      true if there's a cell above that belongs to a rowspan
      Since:
      2.1.6
    • addCell

      public PdfPCell addCell(String text)
      Adds a cell element.
      Parameters:
      text - the text for the cell
    • addCell

      public PdfPCell addCell(PdfPTable table)
      Adds a nested table.
      Parameters:
      table - the table to be added to the cell
    • addCell

      public PdfPCell addCell(Image image)
      Adds an Image as Cell.
      Parameters:
      image - the Image to add to the table. This image will fit in the cell
    • addCell

      public PdfPCell addCell(Phrase phrase)
      Adds a cell element.
      Parameters:
      phrase - the Phrase to be added to the cell
    • writeSelectedRows

      public float writeSelectedRows(int rowStart, int rowEnd, float xPos, float yPos, PdfContentByte[] canvases)
      Writes the selected rows to the document. canvases is obtained from beginWritingRows().
      Parameters:
      rowStart - the first row to be written, zero index
      rowEnd - the last row to be written + 1. If it is -1 all the rows to the end are written
      xPos - the x write coordinate
      yPos - the y write coordinate
      canvases - an array of 4 PdfContentByte obtained from beginWrittingRows()
      Returns:
      the y coordinate position of the bottom of the last row
      See Also:
    • writeSelectedRows

      public float writeSelectedRows(int colStart, int colEnd, int rowStart, int rowEnd, float xPos, float yPos, PdfContentByte[] canvases)
      Writes the selected rows and columns to the document. This method does not clip the columns; this is only important if there are columns with colspan at boundaries. canvases is obtained from beginWritingRows(). The table event is only fired for complete rows.
      Parameters:
      colStart - the first column to be written, zero index
      colEnd - the last column to be written + 1. If it is -1 all the columns to the end are written
      rowStart - the first row to be written, zero index
      rowEnd - the last row to be written + 1. If it is -1 all the rows to the end are written
      xPos - the x write coordinate
      yPos - the y write coordinate
      canvases - an array of 4 PdfContentByte obtained from beginWritingRows()
      Returns:
      the y coordinate position of the bottom of the last row
      See Also:
    • writeSelectedRows

      public float writeSelectedRows(int rowStart, int rowEnd, float xPos, float yPos, PdfContentByte canvas)
      Writes the selected rows to the document.
      Parameters:
      rowStart - the first row to be written, zero index
      rowEnd - the last row to be written + 1. If it is -1 all the rows to the end are written
      xPos - the x write coordinate
      yPos - the y write coordinate
      canvas - the PdfContentByte where the rows will be written to
      Returns:
      the y coordinate position of the bottom of the last row
    • writeSelectedRows

      public float writeSelectedRows(int colStart, int colEnd, int rowStart, int rowEnd, float xPos, float yPos, PdfContentByte canvas)
      Writes the selected rows and columns to the document. This method clips the columns; this is only important if there are columns with colspan at boundaries. The table event is only fired for complete rows.
      Parameters:
      colStart - the first column to be written, zero index
      colEnd - the last column to be written + 1. If it is -1 all the columns to the end are written
      rowStart - the first row to be written, zero index
      rowEnd - the last row to be written + 1. If it is -1 all the rows to the end are written
      xPos - the x write coordinate
      yPos - the y write coordinate
      canvas - the PdfContentByte where the rows will be written to
      Returns:
      the y coordinate position of the bottom of the last row
    • size

      public int size()
      Gets the number of rows in this table.
      Returns:
      the number of rows in this table
    • getTotalHeight

      public float getTotalHeight()
      Gets the total height of the table.
      Returns:
      the total height of the table
    • getRowHeight

      public float getRowHeight(int idx)
      Gets the height of a particular row.
      Parameters:
      idx - the row index (starts at 0)
      Returns:
      the height of a particular row
    • redistributeRowspanHeight

      private void redistributeRowspanHeight()
    • getRowHeight

      public float getRowHeight(int idx, boolean firsttime)
      Gets the height of a particular row.
      Parameters:
      idx - the row index (starts at 0)
      firsttime - is this the first time the row heigh is calculated?
      Returns:
      the height of a particular row
      Since:
      5.0.0
    • getRowspanHeight

      public float getRowspanHeight(int rowIndex, int cellIndex)
      Gets the maximum height of a cell in a particular row (will only be different from getRowHeight is one of the cells in the row has a rowspan > 1).
      Parameters:
      rowIndex - the row index
      cellIndex - the cell index
      Returns:
      the height of a particular row including rowspan
      Since:
      2.1.6
    • getHeaderHeight

      public float getHeaderHeight()
      Gets the height of the rows that constitute the header as defined by setHeaderRows().
      Returns:
      the height of the rows that constitute the header and footer
    • getFooterHeight

      public float getFooterHeight()
      Gets the height of the rows that constitute the footer as defined by setFooterRows().
      Returns:
      the height of the rows that constitute the footer
      Since:
      2.1.1
    • deleteRow

      public boolean deleteRow(int rowNumber)
      Deletes a row from the table.
      Parameters:
      rowNumber - the row to be deleted
      Returns:
      true if the row was deleted
    • deleteLastRow

      public boolean deleteLastRow()
      Deletes the last row in the table.
      Returns:
      true if the last row was deleted
    • deleteBodyRows

      public void deleteBodyRows()
      Removes all of the rows except headers
    • getNumberOfColumns

      public int getNumberOfColumns()
      Returns the number of columns.
      Returns:
      the number of columns.
      Since:
      2.1.1
    • getHeaderRows

      public int getHeaderRows()
      Gets the number of the rows that constitute the header.
      Returns:
      the number of the rows that constitute the header
    • setHeaderRows

      public void setHeaderRows(int headerRows)
      Sets the number of the top rows that constitute the header. This header has only meaning if the table is added to Document and the table crosses pages.
      Parameters:
      headerRows - the number of the top rows that constitute the header
    • getChunks

      public ArrayList<Element> getChunks()
      Gets all the chunks in this element.
      Specified by:
      getChunks in interface Element
      Returns:
      an ArrayList
    • type

      public int type()
      Gets the type of the text element.
      Specified by:
      type in interface Element
      Returns:
      a type
    • isContent

      public boolean isContent()
      Description copied from interface: Element
      Checks if this element is a content object. If not, it's a metadata object.
      Specified by:
      isContent in interface Element
      Returns:
      true if this is a 'content' element; false if this is a 'metadata' element
      Since:
      iText 2.0.8
      See Also:
    • isNestable

      public boolean isNestable()
      Description copied from interface: Element
      Checks if this element is nestable.
      Specified by:
      isNestable in interface Element
      Returns:
      true if this element can be nested inside other elements.
      Since:
      iText 2.0.8
      See Also:
    • process

      public boolean process(ElementListener listener)
      Processes the element by adding it (or the different parts) to an ElementListener.
      Specified by:
      process in interface Element
      Parameters:
      listener - an ElementListener
      Returns:
      true if the element was processed successfully
    • getWidthPercentage

      public float getWidthPercentage()
      Gets the width percentage that the table will occupy in the page.
      Returns:
      the width percentage that the table will occupy in the page
    • setWidthPercentage

      public void setWidthPercentage(float widthPercentage)
      Sets the width percentage that the table will occupy in the page.
      Parameters:
      widthPercentage - the width percentage that the table will occupy in the page
    • getHorizontalAlignment

      public int getHorizontalAlignment()
      Gets the horizontal alignment of the table relative to the page.
      Returns:
      the horizontal alignment of the table relative to the page
    • setHorizontalAlignment

      public void setHorizontalAlignment(int horizontalAlignment)
      Sets the horizontal alignment of the table relative to the page. It only has meaning if the width percentage is less than 100%.
      Parameters:
      horizontalAlignment - the horizontal alignment of the table relative to the page
    • getRow

      public PdfPRow getRow(int idx)
      Gets a row with a given index (added by Jin-Hsia Yang).
      Parameters:
      idx - the position of the row to get
      Returns:
      the row at position idx
    • getRows

      public ArrayList<PdfPRow> getRows()
      Gets an arraylist with all the rows in the table.
      Returns:
      an arraylist
    • getRows

      public ArrayList<PdfPRow> getRows(int start, int end)
      Gets an arraylist with a selection of rows.
      Parameters:
      start - the first row in the selection
      end - the first row that isn't part of the selection
      Returns:
      a selection of rows
      Since:
      2.1.6
    • adjustCellsInRow

      protected PdfPRow adjustCellsInRow(int start, int end)
      Calculates the extra height needed in a row because of rowspans.
      Parameters:
      start - the index of the start row (the one to adjust)
      end - the index of the end row on the page
      Returns:
      a PdfRow
      Since:
      2.1.6
    • getTableEvent

      public PdfPTableEvent getTableEvent()
      Gets the table event for this page.
      Returns:
      the table event for this page
    • setTableEvent

      public void setTableEvent(PdfPTableEvent event)
      Sets the table event for this table.
      Parameters:
      event - the table event for this table
    • getAbsoluteWidths

      public float[] getAbsoluteWidths()
      Gets the absolute sizes of each column width.
      Returns:
      he absolute sizes of each column width
    • getEventWidths

      float[][] getEventWidths(float xPos, int firstRow, int lastRow, boolean includeHeaders)
    • isSkipFirstHeader

      public boolean isSkipFirstHeader()
      Tells you if the first header needs to be skipped (for instance if the header says "continued from the previous page").
      Returns:
      Value of property skipFirstHeader.
    • setSkipFirstHeader

      public void setSkipFirstHeader(boolean skipFirstHeader)
      Skips the printing of the first header. Used when printing tables in succession belonging to the same printed table aspect.
      Parameters:
      skipFirstHeader - New value of property skipFirstHeader.
    • isSkipLastFooter

      public boolean isSkipLastFooter()
      Tells you if the last footer needs to be skipped (for instance if the footer says "continued on the next page")
      Returns:
      Value of property skipLastFooter.
      Since:
      2.1.6
    • setSkipLastFooter

      public void setSkipLastFooter(boolean skipLastFooter)
      Skips the printing of the last footer. Used when printing tables in succession belonging to the same printed table aspect.
      Parameters:
      skipLastFooter - New value of property skipLastFooter.
      Since:
      2.1.6
    • getRunDirection

      public int getRunDirection()
      Returns the run direction of the contents in the table.
      Returns:
      One of the following values: PdfWriter.RUN_DIRECTION_DEFAULT, PdfWriter.RUN_DIRECTION_NO_BIDI, PdfWriter.RUN_DIRECTION_LTR or PdfWriter.RUN_DIRECTION_RTL.
    • setRunDirection

      public void setRunDirection(int runDirection)
      Sets the run direction of the contents of the table.
      Parameters:
      runDirection - One of the following values: PdfWriter.RUN_DIRECTION_DEFAULT, PdfWriter.RUN_DIRECTION_NO_BIDI, PdfWriter.RUN_DIRECTION_LTR or PdfWriter.RUN_DIRECTION_RTL.
    • isLockedWidth

      public boolean isLockedWidth()
      Getter for property lockedWidth.
      Returns:
      Value of property lockedWidth.
    • setLockedWidth

      public void setLockedWidth(boolean lockedWidth)
      Uses the value in setTotalWidth() in Document.add().
      Parameters:
      lockedWidth - true to use the value in setTotalWidth() in Document.add()
    • isSplitRows

      public boolean isSplitRows()
      Gets the split value.
      Returns:
      true to split; false otherwise
    • setSplitRows

      public void setSplitRows(boolean splitRows)
      When set the rows that won't fit in the page will be split. Note that it takes at least twice the memory to handle a split table row than a normal table. true by default.
      Parameters:
      splitRows - true to split; false otherwise
    • setSpacingBefore

      public void setSpacingBefore(float spacing)
      Sets the spacing before this table.
      Parameters:
      spacing - the new spacing
    • setSpacingAfter

      public void setSpacingAfter(float spacing)
      Sets the spacing after this table.
      Parameters:
      spacing - the new spacing
    • spacingBefore

      public float spacingBefore()
      Gets the spacing before this table.
      Returns:
      the spacing
    • spacingAfter

      public float spacingAfter()
      Gets the spacing after this table.
      Returns:
      the spacing
    • isExtendLastRow

      public boolean isExtendLastRow()
      Gets the value of the last row extension.
      Returns:
      true if the last row will extend; false otherwise
    • setExtendLastRow

      public void setExtendLastRow(boolean extendLastRows)
      When set the last row on every page will be extended to fill all the remaining space to the bottom boundary.
      Parameters:
      extendLastRows - true to extend the last row; false otherwise
    • setExtendLastRow

      public void setExtendLastRow(boolean extendLastRows, boolean extendFinalRow)
      When set the last row on every page will be extended to fill all the remaining space to the bottom boundary; except maybe the final row.
      Parameters:
      extendLastRows - true to extend the last row on each page; false otherwise
      extendFinalRow - false if you don't want to extend the final row of the complete table
      Since:
      iText 5.0.0
    • isExtendLastRow

      public boolean isExtendLastRow(boolean newPageFollows)
      Gets the value of the last row extension, taking into account if the final row is reached or not.
      Parameters:
      newPageFollows - true if a new page follows, false otherwise
      Returns:
      true if the last row will extend; false otherwise
      Since:
      iText 5.0.0
    • isHeadersInEvent

      public boolean isHeadersInEvent()
      Gets the header status inclusion in PdfPTableEvent.
      Returns:
      true if the headers are included; false otherwise
    • setHeadersInEvent

      public void setHeadersInEvent(boolean headersInEvent)
      When set the PdfPTableEvent will include the headers.
      Parameters:
      headersInEvent - true to include the headers; false otherwise
    • isSplitLate

      public boolean isSplitLate()
      Gets the property splitLate.
      Returns:
      the property splitLate
    • setSplitLate

      public void setSplitLate(boolean splitLate)
      If true the row will only split if it's the first one in an empty page. It's true by default. It's only meaningful if setSplitRows(true).
      Parameters:
      splitLate - the property value
    • getKeepTogether

      public boolean getKeepTogether()
      Getter for property keepTogether
      Returns:
      true if it is tried to keep the table on one page; false otherwise
    • setKeepTogether

      public void setKeepTogether(boolean keepTogether)
      If true the table will be kept on one page if it fits, by forcing a new page if it doesn't fit on the current page. The default is to split the table over multiple pages.
      Parameters:
      keepTogether - whether to try to keep the table on one page
    • getFooterRows

      public int getFooterRows()
      Gets the number of rows in the footer.
      Returns:
      the number of rows in the footer
    • setFooterRows

      public void setFooterRows(int footerRows)
      Sets the number of rows to be used for the footer. The number of footer rows are subtracted from the header rows. For example, for a table with two header rows and one footer row the code would be:
       table.setHeaderRows(3);
       table.setFooterRows(1);
       
      Row 0 and 1 will be the header rows and row 2 will be the footer row.
      Parameters:
      footerRows - the number of rows to be used for the footer
    • completeRow

      public void completeRow()
      Completes the current row with the default cell. An incomplete row will be dropped but calling this method will make sure that it will be present in the table.
    • flushContent

      public void flushContent()
      Description copied from interface: LargeElement
      Flushes the content that has been added.
      Specified by:
      flushContent in interface LargeElement
      Since:
      iText 2.0.8
      See Also:
    • isComplete

      public boolean isComplete()
      Description copied from interface: LargeElement
      Indicates if the element is complete or not.
      Specified by:
      isComplete in interface LargeElement
      Returns:
      indicates if the element is complete according to the user.
      Since:
      iText 2.0.8
      See Also:
    • setComplete

      public void setComplete(boolean complete)
      Description copied from interface: LargeElement
      If you invoke setComplete(false), you indicate that the content of the object isn't complete yet; it can be added to the document partially, but more will follow. If you invoke setComplete(true), you indicate that you won't add any more data to the object.
      Specified by:
      setComplete in interface LargeElement
      Parameters:
      complete - false if you'll be adding more data after adding the object to the document.
      Since:
      iText 2.0.8
      See Also: