Example usage for com.lowagie.text.pdf PdfPTable PdfPTable

List of usage examples for com.lowagie.text.pdf PdfPTable PdfPTable

Introduction

In this page you can find the example usage for com.lowagie.text.pdf PdfPTable PdfPTable.

Prototype

public PdfPTable(PdfPTable table) 

Source Link

Document

Constructs a copy of a PdfPTable.

Usage

From source file:org.areasy.common.doclet.document.Members.java

License:Open Source License

/**
 * Prints member information.//  ww w .  j a va  2 s.c  om
 *
 * @param declaration      The modifiers ("public static final..").
 * @param returnType       Phrase with the return type text (might be
 *                         a hyperlink)
 * @param parms            Parameters of a method or constructor, null for a field.
 * @param thrownExceptions Exceptions of a method, null for a field or constructor.
 * @param isFirst          True if it is the first field/method/constructor in the list.
 * @param isField          True if it is a field.
 * @param isConstructor    True if it is a constructor.
 * @throws Exception
 */
public static void printMember(String declaration, Phrase returnType, ProgramElementDoc commentDoc,
        Parameter[] parms, ClassDoc[] thrownExceptions, boolean isFirst, boolean isField, boolean isConstructor,
        boolean isDeprecated, Phrase deprecatedPhrase, Object constantValue) throws Exception {
    String name = commentDoc.name();

    State.setCurrentMember(State.getCurrentClass() + "." + name);
    State.setCurrentDoc(commentDoc);

    // Returns the text, resolving any "inheritDoc" inline tags
    String commentText = DocletUtility.getComment(commentDoc);

    // TODO: The following line may set the wrong page number
    //      in the index, when the member gets printed on a
    //      new page completely (because it is in one table).
    // Solution unknown yet. Probably split up table.
    Doclet.getIndex().addToMemberList(State.getCurrentMember());

    // Prepare list of exceptions (if it throws any)
    String throwsText = "throws";
    int parmsColumn = declaration.length() + (name.length() - throwsText.length());

    // First output text line (declaration of method and first parameter or "()" ).
    // This first line is a special case because the class name is bold,
    // while the rest is regular plain text, so it must be built using three Chunks.
    Paragraph declarationParagraph = new Paragraph((float) 10.0);

    // left part / declaration ("public static..")
    Chunk leftPart = new Chunk(declaration, Fonts.getFont(CODE_FONT, 10));

    declarationParagraph.add(leftPart);

    if (returnType != null) {
        // left middle part / declaration ("public static..")
        declarationParagraph.add(returnType);
        declarationParagraph.add(new Chunk(" ", Fonts.getFont(CODE_FONT, 10)));
        parmsColumn = 2;
    }

    // right middle part / bold class name
    declarationParagraph.add(new Chunk(name, Fonts.getFont(CODE_FONT, BOLD, 10)));

    if (!isField) {
        // 1st parameter or empty brackets

        if ((parms != null) && (parms.length > 0)) {
            Phrase wholePhrase = new Phrase("(", Fonts.getFont(CODE_FONT, 10));
            // create link for parameter type
            wholePhrase.add(PDFUtility.getParameterTypePhrase(parms[0], 10));
            // then normal text for parameter name
            wholePhrase.add(" " + parms[0].name());
            if (parms.length > 1) {
                wholePhrase.add(",");
            } else {
                wholePhrase.add(")");
            }

            // In order to have the parameter types in the bookmark,
            // make the current state text more detailled
            String txt = State.getCurrentMethod() + "(";
            for (int i = 0; i < parms.length; i++) {
                if (i > 0)
                    txt = txt + ",";
                txt = txt + DocletUtility.getParameterType(parms[i]);
            }

            txt = txt + ")";
            State.setCurrentMethod(txt);

            // right part / parameter and brackets
            declarationParagraph.add(wholePhrase);

        } else {
            String lastPart = "()";
            State.setCurrentMethod(State.getCurrentMethod() + lastPart);

            // right part / parameter and brackets
            declarationParagraph.add(new Chunk(lastPart, Fonts.getFont(CODE_FONT, 10)));
        }

    }

    float[] widths = { (float) 6.0, (float) 94.0 };
    PdfPTable table = new PdfPTable(widths);
    table.setWidthPercentage((float) 100);

    // Before the first constructor or method, create a coloured title bar
    if (isFirst) {
        PdfPCell colorTitleCell = null;

        // Some empty space...
        Document.add(new Paragraph((float) 6.0, " "));

        if (isConstructor)
            colorTitleCell = new CustomPdfPCell("Constructors");
        else if (isField)
            colorTitleCell = new CustomPdfPCell("Fields");
        else
            colorTitleCell = new CustomPdfPCell("Methods");

        colorTitleCell.setColspan(2);
        table.addCell(colorTitleCell);
    }

    // Method name (large, first line of a method description block)
    Phrase linkPhrase = Destinations.createDestination(commentDoc.name(), commentDoc,
            Fonts.getFont(TEXT_FONT, BOLD, 14));
    Paragraph nameTitle = new Paragraph(linkPhrase);
    PdfPCell nameCell = new CellNoBorderNoPadding(nameTitle);

    if (isFirst)
        nameCell.setPaddingTop(10);
    else
        nameCell.setPaddingTop(0);

    nameCell.setPaddingBottom(8);
    nameCell.setColspan(1);

    // Create nested table in order to try to prevent the stuff inside
    // this table from being ripped appart over a page break. The method
    // name and the declaration/parm/exception line(s) should always be
    // together, because everything else just looks bad
    PdfPTable linesTable = new PdfPTable(1);
    linesTable.addCell(nameCell);
    linesTable.addCell(new CellNoBorderNoPadding(declarationParagraph));

    if (!isField) {
        // Set up following declaration lines
        Paragraph[] params = PDFUtility.createParameters(parmsColumn, parms);
        Paragraph[] exceps = PDFUtility.createExceptions(parmsColumn, thrownExceptions);

        for (int i = 0; i < params.length; i++) {
            linesTable.addCell(new CellNoBorderNoPadding(params[i]));
        }

        for (int i = 0; i < exceps.length; i++) {
            linesTable.addCell(new CellNoBorderNoPadding(exceps[i]));
        }
    }

    // Create cell for inserting the nested table into the outer table
    PdfPCell cell = new PdfPCell(linesTable);
    cell.setPadding(5);
    cell.setBorder(Rectangle.NO_BORDER);
    cell.setColspan(2);
    table.addCell(cell);

    // The empty, left cell (the invisible indentation column)
    State.setContinued(true);

    PdfPCell leftCell = PDFUtility.createElementCell(5, new Phrase("", Fonts.getFont(TEXT_FONT, BOLD, 6)));
    PdfPCell spacingCell = new PdfPCell();
    spacingCell.setFixedHeight((float) 8.0);
    spacingCell.setBorder(Rectangle.NO_BORDER);
    table.addCell(spacingCell);
    table.addCell(spacingCell);

    // The descriptive method explanation text

    if (isDeprecated) {
        Phrase commentPhrase = new Phrase();
        commentPhrase
                .add(new Phrase(AbstractConfiguration.LB_DEPRECATED_TAG, Fonts.getFont(TEXT_FONT, BOLD, 10)));
        commentPhrase.add(deprecatedPhrase);
        table.addCell(leftCell);
        table.addCell(PDFUtility.createElementCell(0, commentPhrase));

        commentPhrase = new Phrase();
        commentPhrase.add(Chunk.NEWLINE);
        table.addCell(leftCell);
        table.addCell(PDFUtility.createElementCell(0, commentPhrase));
    }

    Element[] objs = HtmlParserWrapper.createPdfObjects(commentText);

    if (objs.length == 1) {
        table.addCell(leftCell);
        table.addCell(PDFUtility.createElementCell(0, objs[0]));
    } else {
        table.addCell(leftCell);
        table.addCell(PDFUtility.createElementCell(0, Element.ALIGN_LEFT, objs));
    }

    // TODO: FORMAT THIS CONSTANT VALUE OUTPUT CORRECTLY

    if (isField) {
        if (constantValue != null) {
            // Add 2nd comment line (left cell empty, right cell text)
            Chunk valueTextChunk = new Chunk("Constant value: ", Fonts.getFont(TEXT_FONT, PLAIN, 10));
            Chunk valueContentChunk = new Chunk(constantValue.toString(), Fonts.getFont(CODE_FONT, BOLD, 10));
            Phrase constantValuePhrase = new Phrase("");
            constantValuePhrase.add(valueTextChunk);
            constantValuePhrase.add(valueContentChunk);
            table.addCell(leftCell);
            table.addCell(PDFUtility.createElementCell(0, constantValuePhrase));
        }
    }

    // Add whole method block to document
    Document.add(table);
}

From source file:org.areasy.common.doclet.document.Summary.java

License:Open Source License

/**
 * Prints inner classes summaries.//from ww w.j  a va2 s  . c o m
 *
 * @param name
 * @param destination
 * @param isDeprecated
 * @param deprecatedPhrase
 * @param mainTable
 * @throws Exception
 */
private static void printInnerClass(String name, String destination, boolean isDeprecated,
        Phrase deprecatedPhrase, PdfPTable mainTable) throws Exception {

    Element[] objs = HtmlParserWrapper.createPdfObjects(name);

    PdfPTable commentsTable = createColumnsAndDeprecated(objs, isDeprecated, deprecatedPhrase);

    PdfPTable anotherinnertable = new PdfPTable(1);
    anotherinnertable.setWidthPercentage(100f);
    anotherinnertable.getDefaultCell().setBorder(Rectangle.NO_BORDER);

    PdfPTable innerTable = addDeclaration("class", null);

    // right part of the table
    PdfPCell cell = PDFUtility.createElementCell(2,
            new LinkPhrase(destination, name, Fonts.getFont(CODE_FONT, 9)));
    cell.setPaddingTop((float) 2.0);
    cell.setPaddingLeft((float) 7.0);
    anotherinnertable.addCell(cell);
    anotherinnertable.addCell(commentsTable);

    innerTable.addCell(anotherinnertable);
    mainTable.addCell(innerTable);
}

From source file:org.areasy.common.doclet.document.Summary.java

License:Open Source License

/**
 * Prints field summaries.//from   w  ww . java 2s.  co  m
 * @param constantValue
 * @param isDeprecated
 * @param deprecatedPhrase
 * @param mainTable
 * @throws Exception
 */
private static void printField(FieldDoc fieldDoc, Object constantValue, boolean isDeprecated,
        Phrase deprecatedPhrase, PdfPTable mainTable) throws Exception {

    String name = fieldDoc.name();
    String modifier = fieldDoc.modifiers();
    String commentText = DocletUtility.getFirstSentence(fieldDoc);
    String destination = fieldDoc.qualifiedName();

    Element[] objs = HtmlParserWrapper.createPdfObjects(commentText);

    PdfPTable commentsTable = createColumnsAndDeprecated(objs, isDeprecated, deprecatedPhrase);

    if (constantValue != null) {
        // Add 2nd comment line (left cell empty, right cell text)
        commentsTable.addCell(new Phrase(""));
        Chunk valueTextChunk = new Chunk("Value: ", Fonts.getFont(TEXT_FONT, PLAIN, 10));
        Chunk valueContentChunk = new Chunk(constantValue.toString(), Fonts.getFont(CODE_FONT, BOLD, 10));
        Phrase constantValuePhrase = new Phrase("");
        constantValuePhrase.add(valueTextChunk);
        constantValuePhrase.add(valueContentChunk);
        commentsTable.addCell(constantValuePhrase);
    }

    PdfPTable anotherinnertable = new PdfPTable(1);
    anotherinnertable.setWidthPercentage(100f);
    anotherinnertable.getDefaultCell().setBorder(Rectangle.NO_BORDER);

    PdfPTable innerTable = addDeclaration(modifier, null);

    // Link to field
    LinkPhrase linkPhrase = new LinkPhrase(destination, name, Fonts.getFont(CODE_FONT, 9));

    // right part of the table
    PdfPCell cell = PDFUtility.createElementCell(2, linkPhrase);
    cell.setPaddingTop((float) 2.0);
    cell.setPaddingLeft((float) 7.0);
    anotherinnertable.addCell(cell);
    anotherinnertable.addCell(commentsTable);

    innerTable.addCell(anotherinnertable);
    mainTable.addCell(innerTable);
}

From source file:org.areasy.common.doclet.document.Summary.java

License:Open Source License

/**
 * Prints constructor summaries.// w  ww .  ja v  a  2  s. com
 * @param isDeprecated
 * @param deprecatedPhrase
 * @param mainTable
 * @throws Exception
 */
private static void printConstructor(ConstructorDoc constructorDoc, boolean isDeprecated,
        Phrase deprecatedPhrase, PdfPTable mainTable) throws Exception {

    String name = constructorDoc.name();
    String modifier = constructorDoc.modifiers();
    String commentText = DocletUtility.getFirstSentence(constructorDoc);
    String destination = constructorDoc.qualifiedName() + constructorDoc.signature();
    Parameter[] parms = constructorDoc.parameters();

    Element[] objs = HtmlParserWrapper.createPdfObjects(commentText);

    PdfPTable commentsTable = createColumnsAndDeprecated(objs, isDeprecated, deprecatedPhrase);

    PdfPTable anotherinnertable = new PdfPTable(1);
    anotherinnertable.setWidthPercentage(100f);
    anotherinnertable.getDefaultCell().setBorder(Rectangle.NO_BORDER);

    // Link to constructor
    Font constructorFont = Fonts.getFont(CODE_FONT, 9);
    Phrase phrase = new Phrase("", constructorFont);
    phrase.add(new LinkPhrase(destination, name, constructorFont));

    phrase.add("(");
    if ((parms != null) && (parms.length > 0)) {
        for (int i = 0; i < parms.length; i++) {
            phrase.add(PDFUtility.getParameterTypePhrase(parms[i], 9));
            phrase.add(" ");
            phrase.add(parms[i].name());
            if (i != (parms.length - 1)) {
                phrase.add(", ");
            }
        }
    }
    phrase.add(")");

    PdfPCell cell = PDFUtility.createElementCell(2, phrase);
    cell.setPaddingLeft((float) 7.0);
    anotherinnertable.addCell(cell);
    anotherinnertable.addCell(commentsTable);

    PdfPTable innerTable = addDeclaration(modifier, null);
    innerTable.addCell(anotherinnertable);

    mainTable.addCell(innerTable);
}

From source file:org.areasy.common.doclet.document.Summary.java

License:Open Source License

/**
 * Prints the summary tables for a method.
 * @param modifier//from   ww w  .  java  2s.  c o m
 * @param returnType
 * @param isDeprecated
 * @param deprecatedPhrase
 * @param mainTable
 * @throws Exception
 */
private static void printMethod(MethodDoc methodDoc, String modifier, Phrase returnType, boolean isDeprecated,
        Phrase deprecatedPhrase, PdfPTable mainTable) throws Exception {

    String name = methodDoc.name();
    String destination = methodDoc.qualifiedName() + methodDoc.signature();
    String commentText = DocletUtility.getFirstSentence(methodDoc);
    Parameter[] parms = methodDoc.parameters();

    // Create inner table for both columns (left column already filled in)
    PdfPTable rowTable = addDeclaration(modifier, returnType);

    // Inner table with 1st sentence of javadoc of this method.
    // We use a table in order to be able to create two cells
    // in it (1st an empty one for intendation)

    Element[] objs = HtmlParserWrapper.createPdfObjects(commentText);
    // Phrase descPhr = new Phrase();

    PdfPTable commentsTable = createColumnsAndDeprecated(objs, isDeprecated, deprecatedPhrase);

    // Table with 1 column and 2 rows (row 1 is parameters etc.,
    // row 2 is the description
    PdfPTable rightColumnInnerTable = new PdfPTable(1);

    rightColumnInnerTable.setWidthPercentage(100f);
    rightColumnInnerTable.getDefaultCell().setBorder(Rectangle.NO_BORDER);

    // Link to method
    Font methodFont = Fonts.getFont(CODE_FONT, 9);
    Phrase phrase = new Phrase("", methodFont);
    phrase.add(new LinkPhrase(destination, name, methodFont));
    phrase.add("(");
    if ((parms != null) && (parms.length > 0)) {
        for (int i = 0; i < parms.length; i++) {
            phrase.add(PDFUtility.getParameterTypePhrase(parms[i], 9));
            phrase.add(" ");
            phrase.add(parms[i].name());
            if (i != (parms.length - 1)) {
                phrase.add(", ");
            }
        }
    }
    phrase.add(")");

    PdfPCell cell = PDFUtility.createElementCell(2, phrase);
    cell.setPaddingLeft((float) 7.0);
    rightColumnInnerTable.addCell(cell);
    rightColumnInnerTable.addCell(commentsTable);

    // Now fill in right column as well
    rowTable.addCell(rightColumnInnerTable);

    // And add inner table to main summary table as a new row
    mainTable.addCell(rowTable);
}

From source file:org.areasy.common.doclet.document.Summary.java

License:Open Source License

/**
 * Creates the inner table for both columns. The left column
 * already contains the declaration text part.
 *
 * @param text       The text (like "static final"..)
 *///from  w w w  .  j av a  2s.  c om
private static PdfPTable addDeclaration(String text, Phrase returnType) throws DocumentException {
    PdfPTable innerTable = new PdfPTable(2);
    innerTable.setWidthPercentage(100f);
    innerTable.getDefaultCell().setBorder(Rectangle.NO_BORDER);
    innerTable.setWidths(new int[] { 24, 76 });
    Paragraph declarationParagraph = new Paragraph((float) 9.0);
    Chunk leftPart = new Chunk(text, Fonts.getFont(CODE_FONT, 9));
    declarationParagraph.add(leftPart);
    if (returnType != null) {
        declarationParagraph.add(returnType);
        declarationParagraph.add(new Chunk(" ", Fonts.getFont(CODE_FONT, 9)));
    }
    PdfPCell cell = new CustomPdfPCell(Rectangle.RIGHT, declarationParagraph, 1, Color.gray);
    cell.setPaddingTop((float) 4.0);
    cell.setVerticalAlignment(PdfPCell.ALIGN_TOP);

    innerTable.addCell(cell);
    return innerTable;
}

From source file:org.areasy.common.doclet.document.Summary.java

License:Open Source License

/**
 * Creates the two columns for the summary table and, if necessary,
 * fills in the "Deprecated" text. Otherwise, the given elements
 * are filled in.//from   ww w . j av  a 2 s  . c  om
 *
 * @param objs             The description elements.
 * @param isDeprecated     If true, the whole class/method is deprecated.
 * @param deprecatedPhrase The phrase for the deprecated text.
 * @return The summary table columns.
 * @throws DocumentException If something failed.
 */
private static PdfPTable createColumnsAndDeprecated(Element[] objs, boolean isDeprecated,
        Phrase deprecatedPhrase) throws DocumentException {

    PdfPTable commentsTable = null;
    commentsTable = new PdfPTable(2);
    commentsTable.setWidths(new int[] { 5, 95 });
    commentsTable.setWidthPercentage(100f);
    commentsTable.getDefaultCell().setBorder(Rectangle.NO_BORDER);
    commentsTable.addCell(new Phrase(""));

    Phrase descPhr = new Phrase();

    CellNoBorderNoPadding cell = new CellNoBorderNoPadding(descPhr);

    commentsTable.addCell(cell);

    if (isDeprecated) {
        // if the method is deprecated...
        // do not print the comment text...
        // just print the deprecated text
        descPhr.add(new Phrase(AbstractConfiguration.LB_DEPRECATED_TAG, Fonts.getFont(TEXT_FONT, BOLD, 10)));
        descPhr.add(deprecatedPhrase);
    } else if (objs.length != 0) {
        for (int i = 0; i < objs.length; i++) {
            if (objs[i] instanceof List) {
                cell.addElement(objs[i]);
                descPhr = new Phrase("");
                cell.addElement(descPhr);
            } else {
                descPhr.add(objs[i]);
            }
        }
    }

    return commentsTable;
}

From source file:org.areasy.common.doclet.document.TagLists.java

License:Open Source License

/**
 * Prints tags of a class member (method, field).
 *
 * @param title    The bold face title text for the tag (like "Parameters:")
 * @param tags     The list of tags to be printed.
 * @param compress If true, the text of all the given tags will be concatenated
 *                 into one, comma separated. This is used for the author tag,
 *                 for example, where several separate author tags should be
 *                 printed as one only.//from   w w w  .j av  a 2 s. com
 * @param isMember If true, the whole tag paragraph is printed with additional
 *                 intendation (because it's a tag of a method, like the
 *                 "Parameters:" tag).
 * @throws Exception
 */
private static void printTags(String title, Tag[] tags, boolean compress, boolean isMember) throws Exception {
    if ((tags != null) && (tags.length > 0)) {
        float[] widthsMember = { (float) 6.0, (float) 4.0, (float) 94.0 };
        float[] widthsClass = { (float) 6.0, (float) 94.0 };

        PdfPTable table = null;
        if (isMember) {
            table = new PdfPTable(widthsMember);
        } else {
            table = new PdfPTable(widthsClass);
        }
        table.setWidthPercentage((float) 100);

        Paragraph empty = new Paragraph(" ");

        // Add empty line after the title ("Parameters:" etc.)
        if (isMember) {
            table.addCell(new CellNoBorderNoPadding(empty));
            table.addCell(new CellNoBorderNoPadding(empty));
            table.addCell(new CellNoBorderNoPadding(empty));
        }

        PdfPCell titleCell = new CellNoBorderNoPadding(
                new Paragraph((float) 24.0, title, Fonts.getFont(TEXT_FONT, BOLD, 10)));
        titleCell.setColspan(2);
        if (isMember) {
            table.addCell(new CellNoBorderNoPadding(empty)); // indentation
            // column
        }
        table.addCell(titleCell);

        int number = tags.length;
        String tagText = "";
        if (compress) {
            number = 1;
            for (int i = 0; i < tags.length; i++) {
                tagText = tagText + getTagText(tags[i]);
                if (i < tags.length - 1) {
                    tagText = tagText + ", ";
                }
            }
        }

        for (int i = 0; i < number; i++) {

            // indentation columns
            if (isMember) {
                table.addCell(new CellNoBorderNoPadding(empty));
                table.addCell(new CellNoBorderNoPadding(empty));
            } else {
                table.addCell(new CellNoBorderNoPadding(empty));
            }

            if (!compress) {
                tagText = getTagText(tags[i]);
            }

            Element[] elements = HtmlParserWrapper.createPdfObjects(tagText);
            table.addCell(PDFUtility.createElementCell(0, Element.ALIGN_LEFT, elements));
        }

        // Add whole method block to document
        Document.instance().add(table);
    }
}

From source file:org.areasy.common.doclet.document.tags.TagTABLE.java

License:Open Source License

private void createTable(int numcols) {
    table = new PdfPTable(numcols);

    String width = getAttribute("width");
    if (width == null)
        table.setWidthPercentage(100);//w w w. j  a v a2 s .  c om
    else if (width.endsWith("%"))
        table.setWidthPercentage(HtmlTagUtility.parseFloat(width, 100f));
    else
        table.setTotalWidth(HtmlTagUtility.parseFloat(width, 400f));

    table.getDefaultCell().setPadding(HtmlTagUtility.parseFloat(getAttribute("cellpadding"), 2.0f));
    table.getDefaultCell().setBackgroundColor(HtmlTagUtility.getColor(getAttribute("bgcolor")));
    table.setHorizontalAlignment(HtmlTagUtility.getAlignment(getAttribute("align"), Element.ALIGN_CENTER));

    /* Border doesn't have to have a value set */
    if (getAttribute("border") != null) {
        table.getDefaultCell().setBorder(Rectangle.BOX);
        table.getDefaultCell().setBorderWidth(HtmlTagUtility.parseFloat(getAttribute("border"), 1.0f));
        table.getDefaultCell().setBorderColor(HtmlTagUtility.getColor("gray"));
    } else {
        table.getDefaultCell().setBorder(Rectangle.NO_BORDER);
        table.getDefaultCell().setBorderWidth(0.0f);
    }

    //set width data for columns.
    setTableWidthsForCells();
}

From source file:org.areasy.common.doclet.utilities.PDFUtility.java

License:Open Source License

/**
 * Create a cell element.//from   ww w  . j  a v a  2s  .  c o m
 */
public static PdfPCell createElementCell(int padding, int alignment, Element[] elements) {
    Element mainElement;

    // If there are no nested tables in content
    if (!hasTablesOrLists(elements)) {
        Paragraph para = new Paragraph();
        para.setAlignment(alignment);

        for (int i = 0; i < elements.length; i++) {
            try {
                para.add(elements[i]);
            } catch (Exception e) {
                String msg = "Failed to add element to paragraph: " + e.toString();
                DocletUtility.error(msg);
            }
        }

        mainElement = para;

    } else {

        PdfPTable cellTable = new PdfPTable(1);
        Paragraph currInnerPara = null;

        for (int i = 0; i < elements.length; i++) {

            Element element = elements[i];

            /* Check for special element created by TagTABLE */
            if (element instanceof TableParagraph)
                element = ((TableParagraph) elements[i]).getTable();

            if (element instanceof PdfPTable || element instanceof List) {

                if (currInnerPara != null) {
                    PdfPCell innerCell = createElementCell(0, alignment, currInnerPara);
                    innerCell.setUseDescender(true); // needs newer iText
                    innerCell.setUseAscender(true); // needs newer iText
                    innerCell.setPaddingBottom(2.0f);
                    cellTable.addCell(innerCell);
                }

                currInnerPara = null;
                cellTable.addCell(createElementCell(0, alignment, element));

            } else {
                if (currInnerPara == null) {
                    currInnerPara = new Paragraph();
                    currInnerPara.setAlignment(alignment);
                }

                try {
                    currInnerPara.add(element);
                } catch (Exception e) {
                    String msg = "Failed to add element to inner paragraph: " + e.toString();
                    DocletUtility.error(msg);
                }
            }
        }

        if (currInnerPara != null)
            cellTable.addCell(createElementCell(0, alignment, currInnerPara));

        mainElement = cellTable;
    }

    return createElementCell(padding, alignment, mainElement);
}