Я обнаружил, что есть (по крайней мере) 2 способа сделать это.
Одним из них является создание документа без нижнего колонтитула, а после этого используйте PdfStamper
, чтобы поставить отметки с номерами страниц с общим количеством. Но у меня возникли некоторые проблемы, когда я вывел продукт штампов на MemoryStream
, и, похоже, нет способа закрыть штамповщик без одновременного закрытия потока.
Другой способ - создать один экземпляр PdfTemplate
, который будет представлять общее количество страниц, и добавить его на каждую страницу в нижний колонтитул или в любое другое место.
Далее вы можете использовать свой собственный класс PdfPageEventHelper
и реализовать метод OnCloseDocument, где вы можете заполнить шаблон общим количеством страниц:
public override void OnCloseDocument(PdfWriter writer, Document document)
{
PageCountTemplate.BeginText();
PageCountTemplate.SetFontAndSize(HeaderFont.BaseFont, HeaderFont.Size);
PageCountTemplate.ShowText((writer.CurrentPageNumber - 1).ToString());
PageCountTemplate.EndText();
}
Лично я также использую OnOpenDocument
для создания шаблона и OnEndPage
для написания его на каждой странице.
EDIT:
Чтобы ответить на вопрос Яна, OnCloseDocument
вызывается только один раз, когда весь документ написан. Когда Doc.Close()
называется, я имею в виду.