我使用itext.dll生成一个使用ASP.NET的PDF,我想在我的文档中有一个页脚?

时间:2009-10-30 06:35:28

标签: itextsharp

我使用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); 

如果没有对总页数进行硬编码,这是否可行?即有没有一种方法来获取文档中的总页数?

1 个答案:

答案 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()被调用时,我的意思是。