Skip to main content
Skip table of contents

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 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.

JavaScript errors detected

Please note, these errors can depend on your browser setup.

If this problem persists, please contact our support.