iText pdf library
Website search

How to create a nested column?

How can I create a table that looks like the table in the following screen shot:

Screen shot

This is my code so far:

var subTable2 = new PdfPTable(new float[] { 100, 100, 100, 100, 100, 100,100,100 });
subTable2.TotalWidth = 510f;
subTable2.LockedWidth = true;
subTable2.DefaultCell.HorizontalAlignment = Element.ALIGN_CENTER;
subTable2.AddCell(new Phrase("Examination", time51));
subTable2.DefaultCell.HorizontalAlignment = Element.ALIGN_CENTER;
subTable2.AddCell(new Phrase("Board", time51));
subTable2.DefaultCell.HorizontalAlignment = Element.ALIGN_CENTER;
subTable2.AddCell(new Phrase("Month and Year of Passing", time51));
subTable2.DefaultCell.HorizontalAlignment = Element.ALIGN_CENTER;
subTable2.AddCell(new PdfPCell(new Phrase("Mark", time51)));
PdfPTable nested = new PdfPTable(1);
nested.AddCell("Out of");
PdfPCell nesthousing = new PdfPCell(nested);
nesthousing.Padding = 0f;
subTable2.DefaultCell.HorizontalAlignment = Element.ALIGN_CENTER;
subTable2.AddCell(new Phrase("Percentage", time51));
subTable2.DefaultCell.HorizontalAlignment = Element.ALIGN_CENTER;
subTable2.AddCell(new Phrase("Calss/Grade", time51));
Posted on StackOverflow on Jul 7, 2015 by Semil Sebastian

Please take a look at SimpleTable12. It creates a table that looks like this: simple_table12.pdf

Table example
Table example

You could still fine-tune the height of the cells by using a padding or by introducing descender/ascender info, but those are details. What matters is: how to organize the cells?

I've written this small convenience method:

public PdfPCell createCell(String content, int colspan, int rowspan, int border) {
    PdfPCell cell = new PdfPCell(new Phrase(content, font));
    return cell;

You pass some content, a colspan, a rowspan and border info and it creates you the PdfPCell you need. This allows us to create code that is easier to read:

public void createPdf(String dest) throws IOException, DocumentException {
    font = new Font(FontFamily.HELVETICA, 10);
    Document document = new Document();
    PdfWriter.getInstance(document, new FileOutputStream(dest));;
    PdfPTable table = new PdfPTable(8);
    table.addCell(createCell("Examination", 1, 2, PdfPCell.BOX));
    table.addCell(createCell("Board", 1, 2, PdfPCell.BOX));
    table.addCell(createCell("Month and Year of Passing", 1, 2, PdfPCell.BOX));
    table.addCell(createCell("", 1, 1, PdfPCell.TOP));
    table.addCell(createCell("Marks", 2, 1, PdfPCell.TOP));
    table.addCell(createCell("Percentage", 1, 2, PdfPCell.BOX));
    table.addCell(createCell("Class / Grade", 1, 2, PdfPCell.BOX));
    table.addCell(createCell("", 1, 1, PdfPCell.BOX));
    table.addCell(createCell("Obtained", 1, 1, PdfPCell.BOX));
    table.addCell(createCell("Out of", 1, 1, PdfPCell.BOX));
    table.addCell(createCell("12th / I.B. Diploma", 1, 1, PdfPCell.BOX));
    table.addCell(createCell("", 1, 1, PdfPCell.BOX));
    table.addCell(createCell("", 1, 1, PdfPCell.BOX));
    table.addCell(createCell("Aggregate (all subjects)", 1, 1, PdfPCell.BOX));
    table.addCell(createCell("", 1, 1, PdfPCell.BOX));
    table.addCell(createCell("", 1, 1, PdfPCell.BOX));
    table.addCell(createCell("", 1, 1, PdfPCell.BOX));
    table.addCell(createCell("", 1, 1, PdfPCell.BOX));

As you can see, it's a matter of calculating the correct colspan and rowspan values, and applying the correct borders.

Ready to use iText?

Try our iText 7 Library and add-ons FREE for 30 days. Test your proof of concept, and see if our solution is right for you.

Get my FREE trial

Still have questions? 

We're happy to answer your questions. Reach out to us and we'll get back to you shortly.

Contact us
Stay updated

Join 11,000+ subscribers and become an iText PDF expert by staying up to date with our new products, updates, tips, technical solutions and happenings.

Subscribe Now