Нижний колонтитул PDF внизу с помощью iTextSharp - PullRequest
4 голосов
/ 13 марта 2011

Я пытаюсь создать PDF-документ в C # с помощью iTextSharp 5.0.6. Я хочу добавить верхний и нижний колонтитулы к каждой странице в событиях OnStartPage и OnEndPage соответственно.

В случае нижнего колонтитула существует проблема, что нижний колонтитул создается именно там, где заканчивается страница, тогда как я хотел бы быть внизу страницы.

Есть ли в iTextSharp способ указать высоту страницы, чтобы нижний колонтитул всегда создавался внизу.

Спасибо!

1 Ответ

4 голосов
/ 14 марта 2011

Высота страницы всегда определена:

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, которые касаются этого класса. Посмотри вокруг, ты найдешь их.

...