【问题标题】:I use itext.dll for generating a PDF using ASP.NET and I want a footer in my document?我使用 itext.dll 使用 ASP.NET 生成 PDF,并且我想要在我的文档中添加页脚?
【发布时间】:2009-10-30 06:35:28
【问题描述】:

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

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

【问题讨论】:

  • 14 个问题,1 个接受的回复...
  • 这纯属iTextSharp问题,与ASP.NET关系不大。

标签: itextsharp


【解决方案1】:

我发现(至少)有两种方法可以做到这一点。

一种是创建没有页脚的文档,然后使用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() 被调用时,我的意思是。

【讨论】:

  • 会为每个页面调用 OnCloseDocument 还是仅为文档调用?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-06-29
  • 1970-01-01
  • 1970-01-01
  • 2017-07-21
  • 2019-11-02
  • 2020-09-28
  • 1970-01-01
相关资源
最近更新 更多