Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Itextsharp 我使用itext.dll使用ASP.NET生成PDF,我想在文档中添加页脚?_Itextsharp - Fatal编程技术网

Itextsharp 我使用itext.dll使用ASP.NET生成PDF,我想在文档中添加页脚?

Itextsharp 我使用itext.dll使用ASP.NET生成PDF,我想在文档中添加页脚?,itextsharp,Itextsharp,我使用itext.dll生成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.setFo

我使用itext.dll生成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); 

这是否可以在不硬编码总页数的情况下实现?即,是否有一种方法可以获取文档中的总页数

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

一种方法是创建不带页脚的文档,然后使用
PdfStamper
在页码上加盖total标记。但是,当我将stampers产品输出到
MemoryStream
时,这给我带来了一些问题,而且似乎没有办法在不同时关闭流的情况下关闭stamper

另一种方法是创建一个表示总页数的
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();
}
我个人还使用
onpendocument
创建模板,并在每页上编写
onedpage

编辑:
为了回答Jan的问题,
OnCloseDocument
在整个文档编写完成后只调用一次。当调用
Doc.Close()
时,我的意思是。

14个问题,1个可接受的回答…这纯粹是一个iTextSharp问题,因此与ASP.NET没有什么关系。是否会为每个页面调用一个closedocument,还是仅为文档调用一个closedocument?