Вы создаете ваш Document
как это:
Document doc = new Document(iTextSharp.text.PageSize.LEDGER, 10, 10, 42, 35);
Это означает, что у вас есть верхний край 42 пользовательских единиц и нижний край 35 пользовательских единиц. Вы можете использовать этот запас, чтобы добавить дополнительный контент в событие страницы.
На официальном веб-сайте представлено множество примеров и исчерпывающий раздел Q &. Все примеры и ответы отмечены. Если вы нажмете на тег 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
заголовка, потому что вы создаете страницу формата А4 с верхним краем 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 попытается как можно скорее сбросить содержимое страницы. Если вы добавите код для добавления заголовка/нижнего колонтитула после, вы добавили контент, вы не сможете вернуться назад, чтобы добавить верхний и нижний колонтитулы на страницы, которые уже были сброшены в выходной поток.
Вы должны использовать события страницы. Но они не сложны. – mkl
Можете ли вы быстро пройти меня по этому процессу? – 1Programming1
Отвечает ли вам ответ Бруно? Я не знаю, как лучше объяснить это. – mkl