Class Table

  • All Implemented Interfaces:
    WithHorizontalAlignment, Element, LargeElement

    public class Table
    extends TableRectangle
    implements LargeElement, WithHorizontalAlignment
    A Table is a Rectangle that contains Cells, ordered in some kind of matrix.

    Tables that span multiple pages are cut into different parts automatically. If you want a table header to be repeated on every page, you may not forget to mark the end of the header section by using the method endHeaders().

    The matrix of a table is not necessarily an m x n-matrix. It can contain holes or cells that are bigger than the unit. Believe me or not, but it took some serious thinking to make this as user friendly as possible. I hope you will find the result quite simple (I love simple solutions, especially for complex problems). I didn't want it to be something as complex as the Java GridBagLayout.

    Example:

     // Remark: You MUST know the number of columns when constructing a Table. //         The number of rows is not
     important.
     Table table = new Table(3);
     table.setBorderWidth(1);
     table.setBorderColor(new Color(0, 0, 255));
     table.setPadding(5);
     table.setSpacing(5);
     Cell cell = new Cell("header"); cell.setHeader(true); cell.setColspan(3);
     table.addCell(cell);
     table.endHeaders();
     cell = new Cell("example cell with colspan 1 and rowspan 2"); cell.setRowspan(2); cell.setBorderColor(new Color(255,
     0, 0));
     table.addCell(cell);
     table.addCell("1.1");
     table.addCell("2.1");
     table.addCell("1.2");
     table.addCell("2.2");
     table.addCell("cell test1");
     cell = new Cell("big cell"); cell.setRowspan(2); cell.setColspan(2);
     table.addCell(cell);
     table.addCell("cell test2");
     
    The result of this code is a table:
    the result of the code above
    header
    example cell with colspan 1 and rowspan 2 1.1 2.1
    1.2 2.2
    cell test1 big cell
    cell test2
    See Also:
    Rectangle, Element, Row, Cell
    • Field Detail

      • autoFillEmptyCells

        protected boolean autoFillEmptyCells
        Boolean to automatically fill empty cells before a table is rendered (takes CPU so may be set to false in case of certainty)
      • convert2pdfptable

        protected boolean convert2pdfptable
        if you want to generate tables the old way, set this value to false.
      • notAddedYet

        protected boolean notAddedYet
        Indicates if this is the first time the section was added.
        Since:
        iText 2.0.8
      • complete

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

        boolean tableFitsPage
        If true this table may not be split over two pages.
      • cellsFitPage

        boolean cellsFitPage
        If true cells may not be split over two pages.
      • offset

        float offset
        This is the offset of the table.
      • columns

        private int columns
        This is the number of columns in the Table.
      • rows

        private java.util.ArrayList<Row> rows
        This is the list of Rows.
      • curPosition

        private java.awt.Point curPosition
        The current Position in the table.
      • defaultCell

        private Cell defaultCell
        This Empty Cell contains the DEFAULT layout of each Cell added with the method addCell(String content).
      • lastHeaderRow

        private int lastHeaderRow
        This is the number of the last row of the table headers.
      • alignment

        private int alignment
        This is the horizontal alignment.
      • cellpadding

        private float cellpadding
        This is cellpadding.
      • cellspacing

        private float cellspacing
        This is cellspacing.
      • width

        private float width
        This is the width of the table (in percent of the available space).
      • locked

        private boolean locked
        Is the width a percentage (false) or an absolute width (true)?
      • widths

        private float[] widths
        This is an array containing the widths (in percentages) of every column.
      • mTableInserted

        private boolean mTableInserted
        Boolean to track if a table was inserted (to avoid unnecessary computations afterwards)
    • Constructor Detail

      • Table

        public Table​(int columns)
              throws BadElementException
        Constructs a Table with a certain number of columns.
        Parameters:
        columns - The number of columns in the table
        Throws:
        BadElementException - if the creator was called with less than 1 column
      • Table

        public Table​(int columns,
                     int rows)
              throws BadElementException
        Constructs a Table with a certain number of columns and a certain number of Rows.
        Parameters:
        columns - The number of columns in the table
        rows - The number of rows
        Throws:
        BadElementException - if the creator was called with less than 1 column
      • Table

        public Table​(Table t)
        Copy constructor (shallow copy).
        Parameters:
        t - ab object of Table new table will created from a shallow copy of this
    • Method Detail

      • 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
        Overrides:
        process in class Rectangle
        Parameters:
        listener - an ElementListener
        Returns:
        true if the element was processed successfully
      • type

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

        public java.util.ArrayList<Element> getChunks()
        Gets all the chunks in this element.
        Specified by:
        getChunks in interface Element
        Overrides:
        getChunks in class Rectangle
        Returns:
        an ArrayList
      • isNestable

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

        public int getColumns()
        Gets the number of columns.
        Returns:
        a value
      • size

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

        public java.awt.Dimension getDimension()
        Gets the dimension of this table
        Returns:
        dimension
      • getDefaultCell

        public Cell getDefaultCell()
        Gets the default layout of the Table.
        Returns:
        a cell with all the defaults
        Since:
        2.0.7
      • setDefaultCell

        public void setDefaultCell​(Cell value)
        Sets the default layout of the Table to the provided Cell
        Parameters:
        value - a cell with all the defaults
        Since:
        2.0.7
      • getLastHeaderRow

        public int getLastHeaderRow()
        Gets the last number of the rows that contain headers.
        Returns:
        a rownumber
      • setLastHeaderRow

        public void setLastHeaderRow​(int value)
        Sets the horizontal alignment.
        Parameters:
        value - the new value
      • endHeaders

        public int endHeaders()
        Marks the last row of the table headers.
        Returns:
        the number of the last row of the table headers
      • getAlignment

        public int getAlignment()
        Gets the horizontal alignment.
        Returns:
        a value
      • getPadding

        public float getPadding()
        Gets the cellpadding.
        Returns:
        a value
      • setPadding

        public void setPadding​(float value)
        Sets the cellpadding.
        Parameters:
        value - the new value
      • getSpacing

        public float getSpacing()
        Gets the cellspacing.
        Returns:
        a value
      • setSpacing

        public void setSpacing​(float value)
        Sets the cellspacing.
        Parameters:
        value - the new value
      • setAutoFillEmptyCells

        public void setAutoFillEmptyCells​(boolean aDoAutoFill)
        Enables/disables automatic insertion of empty cells before table is rendered. (default = false) As some people may want to create a table, fill only a couple of the cells and don't bother with investigating which empty ones need to be added, this default behavior may be very welcome. Disabling is recommended to increase speed. (empty cells should be added through extra code then)
        Parameters:
        aDoAutoFill - enable/disable autofill
      • getWidth

        public float getWidth()
        Gets the table width (a percentage).
        Overrides:
        getWidth in class Rectangle
        Returns:
        the table width
      • setWidth

        public void setWidth​(float width)
        Sets the width of this table (in percentage of the available space).
        Parameters:
        width - the width
      • isLocked

        public boolean isLocked()
        Returns:
        the locked
      • setLocked

        public void setLocked​(boolean locked)
        Parameters:
        locked - the locked to set
      • getProportionalWidths

        public float[] getProportionalWidths()
        Gets the proportional widths of the columns in this Table.
        Returns:
        the proportional widths of the columns in this Table
      • setWidths

        public void setWidths​(float[] widths)
                       throws BadElementException
        Sets the widths of the different columns (percentages).

        You can give up relative values of borderwidths. The sum of these values will be considered 100%. The values will be recalculated as percentages of this sum.

        example:

         float[] widths = {2, 1, 1};
         table.setWidths(widths)
         
        The widths will be: a width of 50% for the first column, 25% for the second and third column.
        Parameters:
        widths - an array with values
        Throws:
        BadElementException - on error
      • setWidths

        public void setWidths​(int[] widths)
                       throws DocumentException
        Sets the widths of the different columns (percentages).

        You can give up relative values of borderwidths. The sum of these values will be considered 100%. The values will be recalculated as percentages of this sum.

        Parameters:
        widths - an array with values
        Throws:
        DocumentException - on error
      • isTableFitsPage

        public boolean isTableFitsPage()
        Checks if this Table has to fit a page.
        Returns:
        true if the table may not be split
      • setTableFitsPage

        public void setTableFitsPage​(boolean fitPage)
        Allows you to control when a page break occurs.

        When a table doesn't fit a page, it is split in two parts. If you want to avoid this, you should set the tableFitsPage value to true.

        Parameters:
        fitPage - enter true if you don't want to split cells
      • isCellsFitPage

        public boolean isCellsFitPage()
        Checks if the cells of this Table have to fit a page.
        Returns:
        true if the cells may not be split
      • setCellsFitPage

        public void setCellsFitPage​(boolean fitPage)
        Allows you to control when a page break occurs.

        When a cell doesn't fit a page, it is split in two parts. If you want to avoid this, you should set the cellsFitPage value to true.

        Parameters:
        fitPage - enter true if you don't want to split cells
      • getOffset

        public float getOffset()
        Gets the offset of this table.
        Returns:
        the space between this table and the previous element.
      • setOffset

        public void setOffset​(float offset)
        Sets the offset of this table.

        Normally a newline is added before you add a Table object. This newline uses the current leading. If you want to control the space between the table and the previous element yourself, you have to set the offset of this table.

        Parameters:
        offset - the space between this table and the previous object.
      • isConvert2pdfptable

        public boolean isConvert2pdfptable()
        Method to check if the Table should be converted to a PdfPTable or not.
        Returns:
        false if the table should be handled the old fashioned way.
      • setConvert2pdfptable

        public void setConvert2pdfptable​(boolean convert2pdfptable)
        If set to true, iText will try to convert the Table to a PdfPTable.
        Parameters:
        convert2pdfptable - true if you want iText to try to convert the Table to a PdfPTable
      • addCell

        public void addCell​(Cell aCell,
                            int row,
                            int column)
                     throws BadElementException
        Adds a Cell to the Table at a certain row and column.
        Parameters:
        aCell - The Cell to add
        row - The row where the Cell will be added
        column - The column where the Cell will be added
        Throws:
        BadElementException - on error
      • addCell

        public void addCell​(Cell aCell,
                            java.awt.Point aLocation)
                     throws BadElementException
        Adds a Cell to the Table at a certain location.
        Parameters:
        aCell - The Cell to add
        aLocation - The location where the Cell will be added
        Throws:
        BadElementException - on error
      • addCell

        public void addCell​(Cell cell)
        Adds a Cell to the Table.
        Parameters:
        cell - a Cell
      • addCell

        public void addCell​(Phrase content)
                     throws BadElementException
        Adds a Cell to the Table.

        This is a shortcut for addCell(Cell cell). The Phrase will be converted to a Cell.

        Parameters:
        content - a Phrase
        Throws:
        BadElementException - this should never happen
      • addCell

        public void addCell​(Phrase content,
                            java.awt.Point location)
                     throws BadElementException
        Adds a Cell to the Table.

        This is a shortcut for addCell(Cell cell, Point location). The Phrase will be converted to a Cell.

        Parameters:
        content - a Phrase
        location - a Point
        Throws:
        BadElementException - this should never happen
      • addCell

        public void addCell​(java.lang.String content)
                     throws BadElementException
        Adds a Cell to the Table.

        This is a shortcut for addCell(Cell cell). The String will be converted to a Cell.

        Parameters:
        content - a String
        Throws:
        BadElementException - this should never happen
      • addCell

        public void addCell​(java.lang.String content,
                            java.awt.Point location)
                     throws BadElementException
        Adds a Cell to the Table.

        This is a shortcut for addCell(Cell cell, Point location). The String will be converted to a Cell.

        Parameters:
        content - a String
        location - a Point
        Throws:
        BadElementException - this should never happen
      • insertTable

        public void insertTable​(Table aTable)
        To put a table within the existing table at the current position generateTable will of course re-arrange the widths of the columns.
        Parameters:
        aTable - the table you want to insert
      • insertTable

        public void insertTable​(Table aTable,
                                int row,
                                int column)
        To put a table within the existing table at the given position generateTable will of course re-arrange the widths of the columns.
        Parameters:
        aTable - The Table to add
        row - The row where the Cell will be added
        column - The column where the Cell will be added
      • insertTable

        public void insertTable​(Table aTable,
                                java.awt.Point aLocation)
        To put a table within the existing table at the given position generateTable will of course re-arrange the widths of the columns.
        Parameters:
        aTable - the table you want to insert
        aLocation - a Point
      • addColumns

        public void addColumns​(int aColumns)
        Gives you the possibility to add columns.
        Parameters:
        aColumns - the number of columns to add
      • deleteColumn

        public void deleteColumn​(int column)
                          throws BadElementException
        Deletes a column in this table.
        Parameters:
        column - the number of the column that has to be deleted
        Throws:
        BadElementException - on error
      • deleteRow

        public boolean deleteRow​(int row)
        Deletes a row.
        Parameters:
        row - the number of the row to delete
        Returns:
        boolean true if the row was deleted; false if not
      • deleteAllRows

        public void deleteAllRows()
        Deletes all rows in this table. (contributed by dperezcar@fcc.es)
      • deleteLastRow

        public boolean deleteLastRow()
        Deletes the last row in this table.
        Returns:
        boolean true if the row was deleted; false if not
      • complete

        public void complete()
        Will fill empty cells with valid blank Cells
      • getElement

        public TableRectangle getElement​(int row,
                                         int column)
        returns the element at the position row, column (Cast to Cell or Table)
        Parameters:
        row - row number
        column - column number
        Returns:
        dimension
        Since:
        2.1.0 (was made private in 2.0.3)
      • mergeInsertedTables

        private void mergeInsertedTables()
        Integrates all added tables and recalculates column widths.
      • fillEmptyMatrixCells

        private void fillEmptyMatrixCells()
        adds newCell's to empty/null spaces.
      • isValidLocation

        private boolean isValidLocation​(Cell aCell,
                                        java.awt.Point aLocation)
        check if Cell 'fits' the table.

        • rowspan/colspan not beyond borders
        • spanned cell don't overlap existing cells
        Parameters:
        aCell - the cell that has to be checked
        aLocation - the location where the cell has to be placed
        Returns:
        true if the location was valid
      • assumeTableDefaults

        private void assumeTableDefaults​(Cell aCell)
        Sets the unset cell properties to be the table defaults.
        Parameters:
        aCell - The cell to set to table defaults as necessary.
      • placeCell

        private void placeCell​(java.util.ArrayList<Row> someRows,
                               Cell aCell,
                               java.awt.Point aPosition)
        Inserts a Cell in a cell-array and reserves cells defined by row-/colspan.
        Parameters:
        someRows - some rows
        aCell - the cell that has to be inserted
        aPosition - the position where the cell has to be placed
      • setCurrentLocationToNextValidPosition

        private void setCurrentLocationToNextValidPosition​(java.awt.Point aLocation)
        Sets current col/row to valid(empty) pos after addCell/Table
        Parameters:
        aLocation - a location in the Table
      • getWidths

        public float[] getWidths​(float left,
                                 float totalWidth)
        Gets an array with the positions of the borders between every column.

        This method translates the widths expressed in percentages into the x-coordinate of the borders of the columns on a real document.

        Parameters:
        left - this is the position of the first border at the left (cellpadding not included)
        totalWidth - this is the space between the first border at the left and the last border at the right (cellpadding not included)
        Returns:
        an array with border positions
      • iterator

        public java.util.Iterator iterator()
        Gets an Iterator of all the Rows.
        Returns:
        an Iterator
      • isNotAddedYet

        public boolean isNotAddedYet()
        Indicates if this is the first time the section is added.
        Returns:
        true if the section wasn't added yet
        Since:
        iText2.0.8
      • setNotAddedYet

        public void setNotAddedYet​(boolean notAddedYet)
        Sets the indication if the section was already added to the document.
        Parameters:
        notAddedYet - notAddedYet
        Since:
        iText2.0.8
      • 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:
        LargeElement.isComplete()
      • 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:
        LargeElement.setComplete(boolean)