How do I separate different cell options in separate events?
I'm not sure if it's possible to set multiple events. I would like to separate different cell options in separate events based on my business logic. Sometimes I want to draw an ellipse in it, sometimes a square (or anything else). It would be nice if I could simply attach the events that I need.
Posted on StackOverflow on Mar 18, 2015 by Robert
Yes, you can add multiple cell events to a cell. This is the Java code of the setCellEvent() method:
public void setCellEvent(PdfPCellEvent cellEvent) { if (cellEvent == null) { this.cellEvent = null; } else if (this.cellEvent == null) { this.cellEvent = cellEvent; } else if (this.cellEvent instanceof PdfPCellEventForwarder) { ((PdfPCellEventForwarder) this.cellEvent).addCellEvent(cellEvent); } else { PdfPCellEventForwarder forward = new PdfPCellEventForwarder(); forward.addCellEvent(this.cellEvent); forward.addCellEvent(cellEvent); this.cellEvent = forward; } }
If you pass null, then all existing events are removed from the cell. If no cell event was present, a new cell event is added. If there is already a cell event present, a PdfPCellEventForwarder is created. This is a class that stores different cell events and that eventually will execute all these events one by one.
I found the answer thanks to your response. The PdfPCellEventForwarder class is publicly available in iTextSharp. An instance of this can be set to the CellEvent property of a PdfPCell. On the instance, one can call the AddCellEvent() method.
iTextSharp (C#) is kept in sync with iText (Java), so the Java functionality also works for iTextSharp:
virtual public IPdfPCellEvent CellEvent { get { return this.cellEvent; } set { if (value == null) this.cellEvent = null; else if (this.cellEvent == null) this.cellEvent = value; else if (this.cellEvent is PdfPCellEventForwarder) ((PdfPCellEventForwarder)this.cellEvent).AddCellEvent(value); else { PdfPCellEventForwarder forward = new PdfPCellEventForwarder(); forward.AddCellEvent(this.cellEvent); forward.AddCellEvent(value); this.cellEvent = forward; } } }
There is no need to create your own PdfPCellEventForwarder (although you may do so if you want to), iTextSharp will take care of creating a PdfPCellEventForwarder in your place if you add multiple events to a PdfPCell.