this.useDescender = cell.isUseDescender();
        this.useBorderPadding = cell.isUseBorderPadding();
        // initialization of some parameters
        PdfChunk chunk;
        LwgElement element;
        PdfChunk overflow;
        lines = new ArrayList();
        images = new ArrayList();
        leading = cell.getLeading();
        int alignment = cell.getHorizontalAlignment();
        left += cellspacing + cellpadding;
        right -= cellspacing + cellpadding;
        left += getBorderWidthInside(LEFT);
        right -= getBorderWidthInside(RIGHT);
        contentHeight = 0;
        rowspan = cell.getRowspan();
        ArrayList allActions;
        int aCounter;
        // we loop over all the elements of the cell
        for (Iterator i = cell.getElements(); i.hasNext();) {
            element = (LwgElement) i.next();
            switch (element.type()) {
                case LwgElement.JPEG:
                case LwgElement.JPEG2000:
                case LwgElement.JBIG2:
                case LwgElement.IMGRAW:
                case LwgElement.IMGTEMPLATE:
                    addImage((LwgImage) element, left, right, 0.4f * leading, alignment); //
                    break;
                    // if the element is a list
                case LwgElement.LIST:
                    if (line != null && line.size() > 0) {
                        line.resetAlignment();
                        addLine(line);
                    }
                    // we loop over all the listitems
                    addList((List)element, left, right, alignment);
                    line = new PdfLine(left, right, alignment, leading);
                    break;
                    // if the element is something else
                default:
                    allActions = new ArrayList();
                    processActions(element, null, allActions);
                    aCounter = 0;
                    float currentLineLeading = leading;
                    float currentLeft = left;
                    float currentRight = right;
                    if (element instanceof LwgPhrase) {
                        currentLineLeading = ((LwgPhrase) element).getLeading();
                    }
                    if (element instanceof Paragraph) {
                        Paragraph p = (Paragraph) element;
                        currentLeft += p.getIndentationLeft();
                        currentRight -= p.getIndentationRight();
                    }
                    if (line == null) {
                        line = new PdfLine(currentLeft, currentRight, alignment, currentLineLeading);
                    }
                    // we loop over the chunks
                    ArrayList chunks = element.getChunks();
                    if (chunks.isEmpty()) {
                       addLine(line); // add empty line - all cells need some lines even if they are empty
                       line = new PdfLine(currentLeft, currentRight, alignment, currentLineLeading);
                    }
                    else {
                        for (Iterator j = chunks.iterator(); j.hasNext();) {
                            Chunk c = (Chunk) j.next();
                            chunk = new PdfChunk(c, (PdfAction) (allActions.get(aCounter++)));
                            while ((overflow = line.add(chunk)) != null) {
                                addLine(line);
                                line = new PdfLine(currentLeft, currentRight, alignment, currentLineLeading);
                                chunk = overflow;
                            }
                        }
                    }
                    // if the element is a paragraph, section or chapter, we reset the alignment and add the line
                    switch (element.type()) {
                        case LwgElement.PARAGRAPH:
                        case LwgElement.SECTION:
                        case LwgElement.CHAPTER:
                            line.resetAlignment();
                            flushCurrentLine();