一尘不染

PdfPCell中的右对齐文本

c#

我有一个生成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);
    }
}

有人可以帮忙吗?


阅读 1763

收藏
2020-05-19

共1个答案

一尘不染

我是iText的原始开发人员,我的书中介绍了您遇到的问题。

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

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

如何解决您的问题?

通过以其他方式将您添加到单元格中,可以在 文本模式下 工作Phrase。或以 复合模式
工作并使用Paragraph您为其定义路线的。

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

2020-05-19