2011-03-12 50 views
4

我想创建一个PDF文档在C#中使用iTextSharp 5.0.6。我想分别在OnStartPage和OnEndPage事件的每个页面添加页眉和页脚。PDF页脚在底部使用iTextSharp

在页脚的情况下,有一个问题,页脚是在页面结束的地方创建的,而我想在页面的底部。

iTextSharp是否有方法指定页面高度,以便始终在底部创建页脚。

谢谢!

回答

4

页的身高是总是定义:

document.PageSize.Height // document.getPageSize().getHeight() in Java 

记住,在PDF 0,0是左下角,和你去正确的和UP协调增长。

在PdfPageEvent中,您需要使用绝对坐标。这听起来像是要从文档中获取当前Y,或者在当前位置获取仅绘制材质。不要这样做。另外,如果您想在每个页面上使用相同的页脚,可以将所有内容都绘制到PdfTemplate中,然后将该模板绘制到您想要的各个页面上。

writer.getDirectContent().addTemplateSimple(footerTmpl, 0, 0); 

即使您的页脚的是一样的,你可以使用这种技术来保存:

PdfTemplate footerTmpl = writer.getDirectContent().createTemplate(0, 0, pageWidth, footerHeight); 

footerTmpl.setFontAndSize(someFont, someSize); 
footerTmpl.setTextMatrix(x, y); 
footer.showText("blah"); 
// etc 

然后在你的PdfPageEvent,你可以在你的页面的底部添加footerTempl内存,执行时间和文件大小。此外,如果您不想直接使用PdfContentByte绘图命令,可以通过ColumnText在某种程度上避免它们。有几个标有iText或iTextSharp的SO问题处理该类。打开,你会发现他们。

+0

如何访问“getDirectContent()”函数? iTextSharp在编写器对象上似乎没有这样的方法。 – NickG 2013-10-15 09:46:38

+2

@NickG,在C#中,你可以使用'writer.DirectContent'。 – 2013-11-24 22:37:11

+0

文本“blah”仅在chrome中可见。您可以使用BeginText()和EndText()来包围showtext函数,并使其成为如下形式:footer.BeginText(); footer.ShowText(“blah”); footer.EndText(); – 2014-02-11 11:46:15