0

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

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

4

1 回答 1

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()被调用。

于 2009-11-16T13:36:13.740 回答