对不起,如果这是早些时候发布的
我需要打印一份pdf格式的费用清单。该列表可以扩展到任意数量的页面。
我正在通过迭代datarow对象来编写列表。一件重要的事情是,无论何时当前页面即将结束,都需要在页面末尾打印运行总数。我写了一个类,实现PdfPageEventHandler如下
public class PaymentPageEventHandler : iTextSharp.text.pdf.PdfPageEventHelper
{
PdfContentByte cb;
private string subTotal = "";
public string GetSubtotal
{
set{
value = subTotal;
}
get
{
return subTotal;
}
}
public override void OnEndPage(PdfWriter writer, Document document)
{
// base.OnEndPage(writer, document);
cb = writer.DirectContent;
float[] iOuterTblWidth = { 10, 40F, 8, 12, 10 }; column widths of the table.
PdfPTable pdftbl = new PdfPTable(iOuterTblWidth);
PdfPCell cell = new PdfPCell();
cell.Colspan = 4;
cell.AddElement(new Chunk("Sub-Total"));
cell.HorizontalAlignment = 0;
pdftbl.AddCell(cell);
cell = new PdfPCell();
cell.AddElement(new Chunk(GetSubtotal));
cell.HorizontalAlignment = 2;
pdftbl.AddCell(cell);
}
}
上面的onEndPAge事件尝试写两列。上面的代码被调用,但是行没有出现在PDF页面中。
我像下面这样调用上面的类
PaymentPageEventHandler ppem = new PaymentPageEventHandler();
ppem.GetSubtotal = "123"; // test value to print as running total
writer.PageEvent = ppem; // assigning event to writer object
我应该显式调用PdfContentByte变量cb来写。如果是这样,我应该如何将单元格写入pdf。
有谁能帮我一下吗?
需要使用WriteSelectedRows
方法添加表。请阅读文档并看看这个示例(或示例的c#移植)
查找以下语句:
table.WriteSelectedRows(0, -1, 34, 803, writer.DirectContent);
显然,您需要调整坐标