В принципе, у вас есть два варианта: либо вы создаете документ за один раз, либо создаете документ за два прохода.
Если вы создаете документ за один раз, вы не знаете, значение Y (общее количество страниц) заранее, поэтому вам нужно создать объект PdfTemplate
в качестве владельца места. Это показано в примере MovieCountries1 .
В этом примере мы создаем класс TableHeader
, который расширяет PdfPageEventHelper
. Мы создаем экземпляр класса PdfTemplate
для total
в методе OnOpenDocument()
, мы используем этот заполнитель total
в методе OnEndPage()
, где добавляем верхний или нижний колонтитул, и мы заполняем общее число страниц в методе OnCloseDocument()
.
Недостатком такого подхода является то, что его трудно предсказать размеры, необходимые для total
. Преимущество состоит в том, что вы можете создать документ за один раз (вам не нужно сначала создавать документ в памяти).
Если вы создаете документ за два прохода, вы создаете документ без заголовка / а затем вы просматриваете документ, чтобы узнать, сколько страниц он содержит. Затем вы используете PdfStamper
для добавления номеров страниц на каждую страницу. Это показано в примере TwoPasses .
Эти примеры взяты из моей книги «iText in Action - Second Edition». Вы можете загрузить главу 6 бесплатно с этого URL-адреса: http://manning.com/lowagie2/samplechapter6.pdf
Обратитесь к официальной документации [ ]] [4], когда вы сомневаетесь в конкретной функциональности.
Обновление: я не понимаю, почему вы предпочитаете смотреть на неофициальные примеры. Пример, который я вам дал, выглядит следующим образом:
using (PdfStamper stamper = new PdfStamper(reader, ms2)) {
// Loop over the pages and add a header to each page
int n = reader.NumberOfPages;
for (int i = 1; i <= n; i++) {
// Add content
}
}
Однако по какой-то причине вы Googled пример, который намного сложнее (и переполняет то, что вам нужно).
Просто замените // Add content
с:
ColumnText.ShowTextAligned(stamper.GetUnderContent(), Element.ALIGN_CENTER, new Phrase((i + 1) + "/" + totalPages, fontetexto), 297f, 15f, 0);
Обратите внимание, что я адаптировал значение x в методе ShowTextAligned()
. Вы создаете страницу размером A4, что означает, что ваша страница имеет 595 пользовательских единиц. Если вы добавите номера страниц в позиции x = 820, нижний колонтитул будет добавлен, но он будет находиться за пределами видимой области страницы. Пожалуйста, не копируйте и не вставляйте код, не зная параметров каждого метода.