Вы создаете свой Document
следующим образом:
Document doc = new Document(iTextSharp.text.PageSize.LEDGER, 10, 10, 42, 35);
Это означает, что у вас есть верхнее поле в 42 пользовательских единицы и нижнее поле в 35 пользовательских единиц. Вы можете использовать это поле для добавления дополнительного контента в событие страницы.
На официальном веб-сайте есть множество примеров и обширный раздел вопросов и ответов. Все примеры и ответы помечены. Если щелкнуть тег header, можно найти множество примеров.
Как уже указывалось другими в комментариях, вам необходимо создать реализацию PdfPageEvent
. Самый простой способ сделать это — расширить класс PdfPageEventHelper
.
class MyHeaderFooterEvent : PdfPageEventHelper {
Font FONT = new Font(Font.FontFamily.HELVETICA, 18, Font.BOLD);
public override void OnEndPage(PdfWriter writer, Document document) {
PdfContentByte canvas = writer.DirectContent;
ColumnText.ShowTextAligned(
canvas, Element.ALIGN_LEFT,
new Phrase("Header", FONT), 10, 810, 0
);
ColumnText.ShowTextAligned(
canvas, Element.ALIGN_LEFT,
new Phrase("Footer", FONT), 10, 10, 0
);
}
}
Важно знать:
- Запрещено добавлять контент в событие
OnStartPage()
. Добавьте верхний и нижний колонтитулы, когда весь контент будет добавлен на страницу непосредственно перед тем, как iTextSharp перейдет на новую страницу. Более конкретно: добавьте контент в событие OnEndPage()
.
- Запрещено добавлять контент в объект
Document
, который передается в событие. Этот объект можно использовать только для чтения.
Если вы изучите метод OnEndPage()
в классе MyHeaderFooterEvent
, вы увидите, что мы получаем DirectContent
от автора и что мы добавляем содержимое в этот canvas
с помощью ShowTextAligned
методов. Есть много других способов добавить контент, но вы явно попросили самый простой способ. Этот способ имеет свои ограничения, но он прост.
Я использовал пару жестко закодированных значений: я использовал 10
в качестве значения x
для верхнего и нижнего колонтитула. Это потому, что вы определили левое поле в 10 пользовательских единиц. Верхний и нижний колонтитулы выровнены по левому краю с фактическим содержимым, которое вы добавляете на страницу. Я использовал 810
для значения y
заголовка, потому что вы создаете страницу A4 с верхним полем 42. Верхняя координата y
вашей страницы — 842. Верхняя координата y
верхнего поля — 842 — 42 = 800. Я добавил 10 пользовательских единиц, чтобы ваш заголовок не был приклеен к реальному контенту. Нижняя y
координата страницы равна 0 в вашем случае, а нижняя y
координата поля равна 35. Я использовал 10
для базовой линии нижнего колонтитула.
Вы создали wri
и сразу после создания этого экземпляра PdfWriter
вы открываете экземпляр Document
. Чтобы событие страницы вступило в силу, вы должны добавить следующую ссылку прямо перед открытием Document
:
wri.PageEvent = new MyHeaderFooterEvent();
Теперь метод OnEndPage()
будет вызываться каждый раз, когда ваш основной процесс завершает страницу.
Важно! вы добавили //Code to add header/footer
не в то место. iTextSharp попытается сбросить содержимое страницы как можно скорее. Если вы добавите код для добавления верхнего/нижнего колонтитула после добавления контента, вы не сможете вернуться и добавить верхний и нижний колонтитулы на страницы, которые уже были сброшены в выходной поток.
person
Bruno Lowagie
schedule
28.12.2015