Высота страницы всегда определена:
document.PageSize.Height // document.getPageSize().getHeight() in Java
Имейте в виду, что в PDF 0,0 - левый нижний угол, и координаты увеличиваются при движении вправо и ВВЕРХ.
В PdfPageEvent вам нужно использовать абсолютные координаты. Похоже, вы либо получаете текущий Y из документа, либо просто рисуете материал в текущем местоположении. Не делай этого.
Кроме того, если вы хотите использовать один и тот же точный нижний колонтитул на каждой странице, вы можете нарисовать все в PdfTemplate, а затем нарисовать этот шаблон на различных страницах, на которых он вам нужен.
PdfTemplate footerTmpl = writer.getDirectContent().createTemplate( 0, 0, pageWidth, footerHeight );
footerTmpl.setFontAndSize( someFont, someSize );
footerTmpl.setTextMatrix( x, y );
footer.showText("blah");
// etc
Тогда в вашем PdfPageEvent
вы можете просто добавить footerTempl
внизу вашей страницы:
writer.getDirectContent().addTemplateSimple( footerTmpl, 0, 0 );
Даже если большинство вашего нижнего колонтитула совпадают, вы можете использовать эту технику для экономии памяти, времени выполнения и размера файла.
Кроме того, если вы не хотите связываться с PdfContentByte
командами рисования напрямую, вы можете в некоторой степени избежать их с помощью ColumnText
. Есть несколько вопросов SO, помеченных с помощью iText или iTextSharp, которые касаются этого класса. Посмотри вокруг, ты найдешь их.