iTextSharp 中的多个布局事件
Multiple layout events in iTextSharp
是否可以将多个布局事件附加到 PdfPCell?
我看到有一种设置单元格事件的方法:http://api.itextpdf.com/itext/com/itextpdf/text/pdf/PdfPCell.html#setCellEvent(com.itextpdf.text.pdf.PdfPCellEvent)
我不确定是否可以设置 多个 事件。我想根据我的业务逻辑在单独的事件中分隔不同的单元格选项。有时我想在其中画一个椭圆,有时想画一个正方形(或其他任何东西)。如果我能简单地附加我需要的事件就好了。
感谢您的回复!
是的,您可以向一个单元格添加多个单元格事件。这是 setCellEvent()
方法的 Java 代码:
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;
}
}
如果您传递 null
,则所有现有事件都会从单元格中删除。如果不存在单元格事件,则添加新的单元格事件。如果已经存在单元格事件,则会创建 PdfPCellEventForwarder
。这是一个class,存储不同的单元格事件,最终会一个一个地执行所有这些事件。
更新:
iTextSharp (C#) 与 iText (Java) 保持同步,因此此功能也适用于 iTextSharp。我刚刚检查了 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;
}
}
}
因此无需创建您自己的 PdfPCellEventForwarder
(尽管您可以根据需要创建),如果您添加多个,iTextSharp 将负责在您的位置创建一个 PdfPCellEventForwarder
PdfPCell
.
事件
是否可以将多个布局事件附加到 PdfPCell?
我看到有一种设置单元格事件的方法:http://api.itextpdf.com/itext/com/itextpdf/text/pdf/PdfPCell.html#setCellEvent(com.itextpdf.text.pdf.PdfPCellEvent)
我不确定是否可以设置 多个 事件。我想根据我的业务逻辑在单独的事件中分隔不同的单元格选项。有时我想在其中画一个椭圆,有时想画一个正方形(或其他任何东西)。如果我能简单地附加我需要的事件就好了。
感谢您的回复!
是的,您可以向一个单元格添加多个单元格事件。这是 setCellEvent()
方法的 Java 代码:
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;
}
}
如果您传递 null
,则所有现有事件都会从单元格中删除。如果不存在单元格事件,则添加新的单元格事件。如果已经存在单元格事件,则会创建 PdfPCellEventForwarder
。这是一个class,存储不同的单元格事件,最终会一个一个地执行所有这些事件。
更新:
iTextSharp (C#) 与 iText (Java) 保持同步,因此此功能也适用于 iTextSharp。我刚刚检查了 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;
}
}
}
因此无需创建您自己的 PdfPCellEventForwarder
(尽管您可以根据需要创建),如果您添加多个,iTextSharp 将负责在您的位置创建一个 PdfPCellEventForwarder
PdfPCell
.