将参数传递给重写的OnEndPage方法
我需要将参数传递给“OnEndPage”方法的重写版本,当我声明参数时我没有得到任何错误但是当我调用该方法时它告诉我“不能隐式地将void转换为itextsharp.text.pdf .ipdfpageevent”
这是我的OnEndPage方法:
public class pdfPage : iTextSharp.text.pdf.PdfPageEventHelper { public override void OnEndPage(PdfWriter writer, Document doc, int parametro) { PdfPTable headerTbl = new PdfPTable(1); headerTbl.TotalWidth = doc.PageSize.Width; Image logo = Image.GetInstance("logo.png"); logo.ScalePercent(42); PdfPCell cell = new PdfPCell(logo); cell.HorizontalAlignment = Element.ALIGN_LEFT; cell.PaddingRight = 52; cell.Border = 0; headerTbl.AddCell(cell); headerTbl.WriteSelectedRows(0, -1, 0, (doc.PageSize.Height - 10), writer.DirectContent); PdfPTable headerrow = new PdfPTable(7); headerrow.TotalWidth = 570f; headerrow.LockedWidth = true; headerrow.AddCell(new Phrase("TIPO DOCUMENTO", new Font(Font.FontFamily.HELVETICA, 6f))); headerrow.WriteSelectedRows(0, -1, 0, (doc.PageSize.Height - 50), writer.DirectContent); } }
这就是我所说的:
var doc = new Document(PageSize.A4, 10, 10, 170, 10); pdfPage page = new pdfPage(); PdfWriter pdfWriter = PdfWriter.GetInstance(doc, new FileStream( "test.pdf", FileMode.Create)); pdfWriter.PageEvent = page.OnEndPage(pdfWriter, doc, 1234);
要进一步添加Bruno所说的内容,如果要向PdfPageEventHelper
添加其他信息,可以添加其他属性:
public class pdfPage : iTextSharp.text.pdf.PdfPageEventHelper { public int parametro { get; set; } public override void OnEndPage(PdfWriter writer, Document doc) { //... } }
然后:
var page = new pdfPage(); page.parametro = 40; pdfWriter.PageEvent = page;
要不就:
pdfWriter.PageEvent = new pdfPage() { parametro = 40 };
如果要更改此有效“每页”,则需要将逻辑移动到此类而不是调用主体。
page.OnEndPage(
返回void
例如没有。
这意味着pdfWriter.PageEvent = page.OnEndPage(pdfWriter, doc, 1234);
被设置为null
,但是PageEvent
不能设置为null,因为它不可为nullable
因此它会中断。
如果方法签名是public override ipdfpageevent OnEndPage
,它将起作用。
这是一篇关于PageEvent的文章
有一个方法writer.setPageEvent();
你在这一行中犯了一个语法错误:
public override void OnEndPage(PdfWriter writer, Document doc, int parametro)
原始的OnEndPage()
方法有两个参数。 override
它时,只能使用两个参数。 如果添加参数,则不会覆盖该方法,而是重载该方法。 请参阅加州大学圣塔克鲁兹分校网站上的“Overriding vs Overloading”页面。
通过重载方法很难理解你想要实现什么,因为在iTextSharp的核心内调用OnEndPage()
。 iTextSharp无法猜出parametro
是什么。 您必须重写iTextSharp的内部代码才能使其正常工作。
正如LUIFA已经解释的那样,这也是错误的:
pdfWriter.PageEvent = page.OnEndPage(pdfWriter, doc, 1234);
它应该是:
pdfWriter.PageEvent = page;
但是:无论发生什么,您的OnEndPage()
方法的重载版本将永远不会被调用 ,原因对于理解覆盖和重载方法之间差异的人来说应该是显而易见的。
这个答案解释了你的代码是错误的。 你需要更换
public override void OnEndPage(PdfWriter writer, Document doc, int parametro)
同
public override void OnEndPage(PdfWriter writer, Document doc)
并替换
pdfWriter.PageEvent = page.OnEndPage(pdfWriter, doc, 1234);
有:
pdfWriter.PageEvent = page;
现在创建一个新的问题,解释您希望使用parametro
做什么,因为现在,您已将此作为参数添加,但我们没有看到您在任何地方使用此参数。
public class pdfPage : iTextSharp.text.pdf.PdfPageEventHelper { private long OrderId; private string PhoneNumber; //constructor public InvoicePdfEvents(long orderId, string phoneNumber) { OrderId = orderId; PhoneNumber= phoneNumber; } public override void OnEndPage(PdfWriter writer, Document doc) { //Now you can use values //OrderId And PhoneNumber //... } } public class CreatePDF { private void GenerateCreatePDF(OrderListingInfo orderDetail, string contain) { var doc = new Document(PageSize.A4, 10, 10, 170, 10); pdfPage page = new pdfPage(); PdfWriter pdfWriter = PdfWriter.GetInstance(doc, new FileStream( "test.pdf", FileMode.Create)); int orderID=123456789; string phoneNumber="+01 123456789" pdfWriter.PageEvent = page.OnEndPage(pdfWriter, doc, orderID,phoneNumber); } }