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 PdfPCell
s.
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 Cell
s 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 TabStop
s, 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
Click this link if you want to see how to answer this question in iText 5.