我使用itext.dll使用ASP.NET生成PDF,我希望我的文档中的页脚形式为:
Page 1 of 6
HeaderFooter footer = new HeaderFooter(new Phrase("Page"), new Phrase(" of 6"));
footer.setBorder(Rectangle.NO_BORDER);
footer.setAlignment(Element.ALIGN_CENTER);
document.setFooter(footer);
如果没有对总页数进行硬编码,这是否可行?即有没有一种方法来获取文档中的总页数?
答案 0 :(得分:2)
我发现有(至少)两种方法可以做到这一点。
一种是在没有页脚的情况下创建文档,然后使用PdfStamper
在页面上标记总数。但是当我将压模产品输出到MemoryStream
时,这给我带来了一些问题,并且似乎无法在不关闭流的同时关闭压模。
另一种方法是创建一个PdfTemplate
的实例,它将代表总页数并将其添加到每个页面到页脚或您想要的位置。
接下来,您可以使用自己的PdfPageEventHelper
类并实现OnCloseDocument方法,您可以使用总页数填充模板:
public override void OnCloseDocument(PdfWriter writer, Document document)
{
PageCountTemplate.BeginText();
PageCountTemplate.SetFontAndSize(HeaderFont.BaseFont, HeaderFont.Size);
PageCountTemplate.ShowText((writer.CurrentPageNumber - 1).ToString());
PageCountTemplate.EndText();
}
我个人也使用OnOpenDocument
创建模板,并OnEndPage
将其写在每个页面上。
编辑:
要回答Jan的问题,OnCloseDocument
只在整个文档编写完成时调用一次。当Doc.Close()
被调用时,我的意思是。