How to right-align text in a PdfPCell?

I have a C# application that generates a PDF invoice. In this invoice is a table of items and prices. This is generated using a PdfPTable and PdfPCells. I want to be able to right-align the price c

I have a C# application that generates a PDF invoice. In this invoice is a table of items and prices. This is generated using a PdfPTable and PdfPCells.

I want to be able to right-align the price column but I cannot seem to be able to: the text always comes out left-aligned in the cell.

Here is my code for creating the table:

PdfPTable table = new PdfPTable(2);
table.TotalWidth = invoice.PageSize.Width;
float[] widths = { invoice.PageSize.Width - 70f, 70f };
table.SetWidths(widths);
table.AddCell(new Phrase("Item Name", tableHeadFont));
table.AddCell(new Phrase("Price", tableHeadFont));
SqlCommand cmdItems = new SqlCommand("SELECT...", con);
using (SqlDataReader rdrItems = cmdItems.ExecuteReader())
{
    while (rdrItems.Read())
    {
        table.AddCell(new Phrase(rdrItems["itemName"].ToString(), tableFont));
        double price = Convert.ToDouble(rdrItems["price"]);
        PdfPCell pcell = new PdfPCell();
        pcell.HorizontalAlignment = PdfPCell.ALIGN_RIGHT;
        pcell.AddElement(new Phrase(price.ToString("0.00"), tableFont));
        table.AddCell(pcell);
    }
}
Can anyone help?

Posted on StackOverflow on Nov 28, 2012 by colincameron

In iText 7 the following code could help you:

PdfDocument pdfDoc = new PdfDocument(new PdfWriter(dest));
Document doc = new Document(pdfDoc);
Table table = new Table(2);

Cell cell1 = new Cell()
    .add("Item name")
    .setFont(PdfFontFactory.createFont(FontConstants.HELVETICA))
    .setFontSize(16)
    .setTextAlignment(TextAlignment.LEFT)
    .setVerticalAlignment(VerticalAlignment.MIDDLE);
table.addCell(cell1);

Cell cell2 = new Cell()
    .add("price")
    .setFont(PdfFontFactory.createFont(FontConstants.HELVETICA_BOLD))
    .setFontSize(10)
    .setTextAlignment(TextAlignment.RIGHT)
    .setVerticalAlignment(VerticalAlignment.MIDDLE);
table.addCell(cell2);

doc.add(table);
doc.close();

This way you define two Cells with different text alignment, different fonts and sizes. If you don’t want to display the border between these columns, use this method:

cell.setBorder(Border.NO_BORDER);

Another approach is to create a Paragraph instance and use TabStops, as is shown in LeftRight example.

Paragraph p = new Paragraph("Item name")
    .add(new Tab())
    .addTabStops(new TabStop(1000, TabAlignment.RIGHT))
    .add("price");
table.addCell(new Cell().add(p));
table.addCell("Some more text...");

I’ve applied both approaches (each one corresponds to the number of row) so the result looks like this. You can choose the method you like more:

Alignments in Cell
Alignments in Cell

Click this link if you want to see how to answer this question in iText 5.


Share this article

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
Contact

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