我的文档中有PdfPTable
是使用iTextSharp编写的。每当表溢出到另一个页面时,都会有一些标题行重复出现。其中一行包含带有一些文本的单元格,例如“John Doe。”
我想要的是在每个后续页面上将该文本更改为“John Doe(续)”。据我所知,我需要在OnEndPage
事件中做某事,以某种方式操纵该页面的标题单元格的实例,但我很难找到如何在书面内容中找到单元格然后操纵它。
我如何实现这一目标?
答案 0 :(得分:4)
经过一些反复试验,我得到了一个有效的解决方案。我实现了IPdfCellEvent
,它声明了一个方法CellLayout
。根据{{3}},在渲染单元格之后调用它,这意味着,第一次调用它时,它已经为表格的第一页渲染了单元格。因此,我使用此调用添加额外的文本,以便所有后续渲染都包含其他文本。
这是我的界面实现:
private class ContinuedCellEvent : IPdfPCellEvent
{
public void CellLayout( PdfPCell cell, Rectangle position, PdfContentByte[] canvases )
{
if ( !_continuationApplied )
{
// This is called AFTER cell rendering so this should set the cell for the next time it is rendered
// which will always be on a continuation.
cell.Phrase.Add( new Chunk( " Continued" ) );
_continuationApplied = true;
}
}
private bool _continuationApplied;
}
在定义单元格时使用它:
cell.CellEvent = new ContinuedCellEvent();
答案 1 :(得分:1)
使用onEndPage()
可行,但如果我是你,我会实现PdfPTableEventSplit
接口。我会在创建事件实例时使用membervariable cellContent
并将其设置为"John Doe"
。我会在cellContent
方法中绘制tableLayout()
的内容,并在"John Doe (continued)"
方法中将其内容更改为splitTable()
。
试一试并分享您的代码。如果有效,其他人将得到帮助;如果没有,我会看看出现了什么问题(但请理解我不是C#开发人员;我用Java写了iText;我不得不雇人把它移植到C#)。