Cannot left-align nested tables inside cell

The following code creates a table and a nested table. However, the nested table is always aligned in the middle. I do not know how to perform horizontal alignment correctly.

The following method simply iterates over the list. when this is a simple question, I will add a TextField. if the question contains multiple answers, I insert a nested table using checkboxes and values.

   private PdfPTable CreateQuestionTable(RLQuestionRecordList questions)
    {
        PdfPCell cell;
        PdfPTable table = new PdfPTable(2);
        //table.SetWidths(new int[]{ 50, 50 });
        table.WidthPercentage = 100;
        table.SpacingBefore = 20;
        table.SpacingAfter = 20;
        table.DefaultCell.HorizontalAlignment = Element.ALIGN_LEFT;
        foreach (RCQuestionRecord q in questions)
        {
            //add question to the table
            cell = new PdfPCell(new Phrase(q.ssSTQuestion.ssName, _Normal));
            cell.Border = Rectangle.NO_BORDER;
            cell.Padding = 5.0f;
            table.AddCell(cell);

            //add answer to the table.
            //add generate time we don;t know where the table will be,
            //hence textfields will be generated after the pdf has been generated..

            if (q.ssSTQuestion.ssListOfAnswers.Length > 0)
            {
                // we have radiobuttons, so we add a table inside the cell
                cell = new PdfPCell();
                cell.Border = Rectangle.NO_BORDER;
                cell.Padding = 5.0f;
                //we cannot align the table to the left in the cell for some weird reason...
                cell.HorizontalAlignment = Element.ALIGN_LEFT;
                cell.AddElement(CreateCheckboxTable(q));
                table.AddCell(cell);
            }
            else
            {
                // we have simple textfield, so add that to the cell
                cell = new PdfPCell();
                cell.Border = Rectangle.NO_BORDER;
                cell.Padding = 5.0f;
                cell.HorizontalAlignment = Element.ALIGN_LEFT;
                //simple textfield
                cell.CellEvent = new OOMTextField(string.Format("question_{0}", q.ssSTQuestion.ssQuestionId), q.ssSTQuestion.ssLength, q.ssSTQuestion.ssValue, bf);
                table.AddCell(cell);
            }
        }
        return table;
    }

This is the nested table that I want to insert in the cell above.

    /// <summary>
    /// 
    /// </summary>
    /// <param name="question"></param>
    /// <returns></returns>
    private PdfPTable CreateCheckboxTable(RCQuestionRecord question)
    {
        PdfPCell cell;
        int numCells = question.ssSTQuestion.ssListOfAnswers.Length;

        PdfPTable table = new PdfPTable(numCells);
        float[] widths = new float[numCells];

        int currentColumn = 0;
        //table.SetWidths(new int[]{ 50, 50 });
        foreach (RCAnswerRecord a in question.ssSTQuestion.ssListOfAnswers) {
            //checkbox
            cell = new PdfPCell(new Phrase(a.ssSTAnswer.ssLabel, _Normal));
            cell.Border = Rectangle.NO_BORDER;
            cell.Padding = 0.0f;
            cell.PaddingLeft = 20.0f;
            cell.HorizontalAlignment = Element.ALIGN_LEFT;
            cell.VerticalAlignment = Element.ALIGN_CENTER;
            cell.CellEvent = new OOMCheckBox(string.Format("question_{0}", question.ssSTQuestion.ssQuestionId), a.ssSTAnswer.ssIsSelected, a.ssSTAnswer.ssLabel, bf);
            //checkbox
            table.AddCell(cell);
            widths[currentColumn++] = 20.0f + bf.GetWidthPoint(a.ssSTAnswer.ssLabel, 11); 
        }

        table.SetTotalWidth(widths);
        table.LockedWidth = true;
        table.SpacingBefore = 0;
        return table;
    }

What am I missing to completely align the nested tables to the left inside the cell?

+4
source share
1 answer

Please take a look at the PDF document named nested_tables_aligned.pdf :

enter image description here

. . , , .

PDF Java NestedTablesAligned:

public void createPdf(String dest) throws IOException, DocumentException {
    Document document = new Document(PageSize.A4.rotate());
    PdfWriter.getInstance(document, new FileOutputStream(dest));
    document.open();
    float[] columnWidths = {200f, 200f, 200f};
    PdfPTable table = new PdfPTable(columnWidths);
    table.setTotalWidth(600f);
    table.setLockedWidth(true);
    buildNestedTables(table);
    document.add(table);
    document.close();
}

private void buildNestedTables(PdfPTable outerTable) {
    PdfPTable innerTable1 = new PdfPTable(1);
    innerTable1.setTotalWidth(100f);
    innerTable1.setLockedWidth(true);
    innerTable1.setHorizontalAlignment(Element.ALIGN_LEFT);
    innerTable1.addCell("Cell 1");
    innerTable1.addCell("Cell 2");
    outerTable.addCell(innerTable1);
    PdfPTable innerTable2 = new PdfPTable(2);
    innerTable2.setTotalWidth(100f);
    innerTable2.setLockedWidth(true);
    innerTable2.setHorizontalAlignment(Element.ALIGN_CENTER);
    innerTable2.addCell("Cell 3");
    innerTable2.addCell("Cell 4");
    outerTable.addCell(innerTable2);
    PdfPTable innerTable3 = new PdfPTable(2);
    innerTable3.setTotalWidth(100f);
    innerTable3.setLockedWidth(true);
    innerTable3.setHorizontalAlignment(Element.ALIGN_RIGHT);
    innerTable3.addCell("Cell 5");
    innerTable3.addCell("Cell 6");
    outerTable.addCell(innerTable3);

}

, , . iTextSharp. # PdfPCell, PdfPTable. , .

+7

All Articles