Как изменить ячейку заголовка при изменении страницы?

У меня есть PdfPTable в моем документе пишется с использованием iTextSharp. Есть несколько строк заголовка, которые повторяются всякий раз, когда таблица переполняется на другую страницу. Одна из этих строк содержит ячейку с текстом, например "Джон Доу".

Что я хочу, чтобы этот текст был изменен на "Джон Доу (продолжение)" на каждой последующей странице. Из того, что я могу сказать, мне нужно сделать что-то в OnEndPage событие, которое каким-то образом манипулирует экземпляром ячейки заголовка для этой страницы, но я изо всех сил пытаюсь выяснить, как именно найти ячейку в письменном содержимом, а затем манипулировать ею.

Как мне достичь этой цели?

2 ответа

После некоторых проб и ошибок я смог получить рабочее решение. Я реализовал IPdfCellEvent который объявляет один метод, CellLayout, Согласно документации iText, она вызывается после визуализации ячейки, что означает, что при первом вызове она отображала ячейку для самой первой страницы таблицы. Поэтому я использую этот вызов, чтобы добавить дополнительный текст, чтобы во всех последующих визуализациях был добавлен дополнительный текст.

Это моя реализация интерфейса:

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();

С помощью onEndPage() может работать, но я бы реализовал PdfPTableEventSplit интерфейс на вашем месте. Я бы использовал членскую переменную cellContent и установите его "John Doe" при создании экземпляра события. Я бы нарисовал содержание cellContent в tableLayout() метод и изменить его содержание "John Doe (continued)" в splitTable() метод.

Попробуйте и поделитесь своим кодом. Если это сработает, другим помогут; если этого не произойдет, я посмотрю, что происходит не так (но, пожалуйста, поймите, что я не разработчик C#; я написал iText на Java; мне пришлось нанять людей, чтобы перенести его на C#).

Другие вопросы по тегам