В вашем OnEndPage
методе у вас есть эта строка:
head.WriteSelectedRows(0, -1, 10, page.Height - cellHeight + head.TotalHeight - 30, writer.DirectContent);
Этот код правильно вычисляет место для размещения контента на основе высоты страницы и верхнего поля, но также включает в себя волшебный 30
, которыйзаставляет заголовок быть нарисованным в верхней части таблицы.Измените его на это, и ваш заголовок будет в порядке.
head.WriteSelectedRows(0, -1, 10, page.Height - cellHeight + head.TotalHeight, writer.DirectContent);
Я предполагаю, что 30
пытается включить некоторые отступы между вашим заголовком и самой таблицей.Я бы порекомендовал изменить сами поля документа в основном коде:
document.SetMargins(document.LeftMargin, document.RightMargin, document.TopMargin + 30, document.BottomMargin);
И затем учесть это в методе OnEndPage
:
float cellHeight = document.TopMargin - 30;
Ваш код нижнего колонтитула нефактически не учитывает нижнее поле и просто рисует его на 50
, поэтому оно всегда будет перекрываться.Быстрое решение состоит в том, чтобы изменить его на:
footer.WriteSelectedRows(0, -1, 10, footer.TotalHeight, writer.DirectContent);
Это, по крайней мере, выровняет нижний колонтитул.Если вам нужно больше отступов, как указано выше, просто измените поля документа:
document.SetMargins(document.LeftMargin, document.RightMargin, document.TopMargin + 30, document.BottomMargin + 30);