右对齐PdfPCell中的文本

col*_*ron 18 c# itextsharp

我有一个生成PDF发票的C#应用​​程序.在此发票中是项目和价格表.这是使用a PdfPTablePdfPCells 生成的.

我希望能够右对齐价格列,但我似乎无法 - 文本总是在单元格中左对齐.

这是我创建表的代码:

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

有人可以帮忙吗?

Bru*_*gie 23

我是iText的原始开发人员,我在书中解释了您遇到的问题.

您正在混合文本模式复合模式.

文本模式下,PdfPCell使用a Phrase作为构造函数的参数创建,并在单元格级别定义对齐.但是,您正在以复合模式工作.使用该addElement()方法后立即触发此模式.在复合模式下,忽略在单元格级别定义的对齐(这解释了您的问题).相反,使用单独元素的对齐.

如何解决您的问题?

通过以不同的方式将您添加到单元格,可以在文本模式下工作Phrase.或者在复合模式下工作并使用Paragraph您为其定义对齐方式.

复合模式优于文本模式的优点是同一单元格中的不同段落可以具有不同的对齐方式,而在文本模式下只能有一个对齐方式.另一个优点是您可以添加更多文本:您还可以添加图像,列表,表格...... 文本模式的一个优点是速度:处理单元格内容所需的处理时间更短.


小智 10

private static PdfPCell PhraseCell(Phrase phrase, int align)
{
    PdfPCell cell = new PdfPCell(phrase);
    cell.BorderColor = BaseColor.WHITE;
    // cell.VerticalAlignment = PdfCell.ALIGN_TOP;
    //cell.VerticalAlignment = align;
    cell.HorizontalAlignment = align;
    cell.PaddingBottom = 2f;
    cell.PaddingTop = 0f;
    return cell;
}
Run Code Online (Sandbox Code Playgroud)

  • 是的,这是一种可能的解决方案.请参阅我的回答以获得更详细的解释. (2认同)