1) Самый последний iText - 5.0.6.
2) Для создания верхнего и нижнего колонтитула страницы необходимо использовать интерфейс PdfPageEvent
. Обычно это делается путем получения от PdfPageEventHelper
и переопределения только тех методов, которые вам нужны.
В PdfPageEvent
вы должны нарисовать PDF, используя PdfContentByte
. Хорошей новостью является то, что вы можете использовать ColumnText
для добавления выровненного текста в заданную ограничивающую рамку, и он будет обрабатывать разрывы строк для вас.
public class HeaderFooterPageEvent extends PdfPageEventHelper {
private String headerStr, footerStr;
private Rectangle hBox, fBox;
public HeaderFooterPageEvent(String hStr, Rectangle _hBox, String fString, Rectangle _fBox) {
headerStr = hStr;
hBox = _hBox;
footerStr = fStr;
fBox = _fBox;
}
public onEndPage(PdfWriter writer, Document doc) {
// draw the header text.
ColumnText.showTextAligned(writer.getDirectContent(),
Element.ALIGN_RIGHT, headerStr, hBox.getRight(), hBox.getTop, 0);
// draw the footer text.
ColumnText.showTextAligned(writer.getDirectContent(),
Element.ALIGN_RIGHT, footerStr, fBox.getRight(), fBox.getTop, 0);
}
}
Это не будет работать так хорошо, если ваш верхний и нижний колонтитулы представлены в HTML. Для этого вам придётся совершить несколько хакерских атак.
1) Создайте новый Document / PdfWriter с полями страницы, соответствующими размеру (высоте и ширине) заголовка.
2) Визуализируйте весь заголовок HTML на этой странице.
3) сохранить в формате pdf.
4) Импортируйте эту страницу PDF в другой документ и нарисуйте ее следующим образом:
public onEndPage(PdfWriter writer, Document doc) {
PdfReader reader = new PdfReader(headerPDFPath);
PdfImportedPage headerPageImport = writer.getImportedPage(reader, 1); // 1 -> first page
PdfContentByte cb = writer.getDirectContent();
cb.addTemplate(headerPageImport, hBox.bottom(), hBox.left());
}