如何在页面更改时更改标题单元格?

时间:2013-05-31 22:42:43

标签: itextsharp pdfptable

我的文档中有PdfPTable是使用iTextSharp编写的。每当表溢出到另一个页面时,都会有一些标题行重复出现。其中一行包含带有一些文本的单元格,例如“John Doe。”

我想要的是在每个后​​续页面上将该文本更改为“John Doe(续)”。据我所知,我需要在OnEndPage事件中做某事,以某种方式操纵该页面的标题单元格的实例,但我很难找到如何在书面内容中找到单元格然后操纵它。

我如何实现这一目标?

2 个答案:

答案 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#)。