iTextSharp - 稍后在代码中向单元格添加内容

时间:2014-09-08 13:35:00

标签: itextsharp

我正在使用iTextSharp生成发票PDF。为此,我希望在PDF顶部显示订单号和总金额。但是,实际金额是在产品展示部分计算的。

为简单起见,报告遵循此结构

===========订单号========= ===========总金额=========

//在这里我展示产品,所以这里计算总金额。

==========报告结束=========

为了达到这个目的,我正在创建一个像这样的总量的单元格

PdfPCell cell = new PdfPCell();
PdfPCell headingAmountCell = cell;

//add some components to cell, reinitialize them again with new cells etc. 
//but still have first cell reference in headingAmountCell

//calculate total amount here.

.
.
.
.

headerAmountCell.AddElement(new Phrase("Total Amount:" + totalAmount.ToString());

. 
.
. 

然而,这不起作用。 我可以在顶部看到订单号,但不是总金额。

如果你能帮忙,那就太棒了。

感谢您的期待。

此致 Anshul

更新:

以下是帮助理解问题的一小部分代码

//header
var headerTable = new PdfPTable(logoExists ? 2 : 1);
headerTable.WidthPercentage = 100f;
if (logoExists)
 headerTable.SetWidths(new[] { 50, 50 });

float padding = 5f;
//logo
if (logoExists)
{
var logoFilePath = _pictureService.GetPictureUrl(logoPicture, 0, false);
var cellLogo = new PdfPCell(Image.GetInstance(logoFilePath));
cellLogo.Border = Rectangle.BOTTOM_BORDER;
cellLogo.BorderColorBottom = BaseColor.GRAY;
cellLogo.PaddingBottom = padding;
cellLogo.VerticalAlignment = Rectangle.ALIGN_TOP;

headerTable.AddCell(cellLogo);

}
//store info
var cell = new PdfPCell();
cell.Border = Rectangle.BOTTOM_BORDER;
cell.BorderColorBottom = BaseColor.GRAY;
cell.PaddingBottom = padding;
cell.HorizontalAlignment = Element.ALIGN_RIGHT;
cell.VerticalAlignment = Element.ALIGN_TOP;


//payment method
var paymentMethod = _paymentService.LoadPaymentMethodBySystemName(order.PaymentMethodSystemName);
string paymentMethodStr = paymentMethod != null ? paymentMethod.GetLocalizedFriendlyName(_localizationService, lang.Id) : order.PaymentMethodSystemName;
PdfPCell headingAmountCell = cell;
if (!paymentMethodStr.Contains("COD") && order.PaymentStatus == global::Nop.Core.Domain.Payments.PaymentStatus.Paid)
{
cell.AddElement(new Paragraph("PREPAID", bigFont));
}
else if (paymentMethodStr.Contains("COD") && order.PaymentStatus == global::Nop.Core.Domain.Payments.PaymentStatus.Paid)
{

cell.AddElement(new Phrase("PAYMENT COLLECTED ON DELIVERY", bigFont));

}
else
{
cell.AddElement(new Paragraph("COLLECT ON DELIVERY", bigFont));    
}
string order_number = order.GetOrderNumber();
cell.AddElement(new Paragraph(String.Format(_localizationService.GetResource("PDFInvoice.Order#", lang.Id), order_number), bigFont));
var store = _storeService.GetStoreById(order.StoreId) ?? _storeContext.CurrentStore;

cell.AddElement(new Paragraph(String.Format("Order Date: {0}", _dateTimeHelper.ConvertToUserTime(order.CreatedOnUtc, DateTimeKind.Utc).ToString("D", new CultureInfo(lang.LanguageCulture))), font));
headerTable.AddCell(cell);
doc.Add(headerTable);
//THEN I PERFORM SOME PRODUCT DISPLAY PART WHERE I CALCULATE THE ORDERTOTAL THEN AT THE BOTTOM
//.
//.
..

headingAmountCell.AddElement(new Phrase(Math.Round(orderTotal) + "<-AMOUNT TO COLLECT")));

0 个答案:

没有答案