ITextSharp - 在每个页面上都包含页脚,但第一页和最后一页

时间:2014-06-30 14:41:01

标签: c# pdf itextsharp footer

目前正在C#中使用ITextSharp构建PDF。 PDF由三个“部分”,一个封面,一个可以跨越多个页面的表和一个最终页面组成。具有该表的页面需要在第一页上包含标题,并在所有页面上包含页脚,但封面页和最终页不需要。

我使用XMLWorker构建页面,但这并不重要。我构建页面的代码如下:

    var htmlContext = new HtmlPipelineContext(null);
    htmlContext.SetTagFactory(iTextSharp.tool.xml.html.Tags.GetHtmlTagProcessorFactory());
    var cssResolver = XMLWorkerHelper.GetInstance().GetDefaultCssResolver(false);
    /* cssResolver.AddCssFile(@"style.css", true); */
    cssResolver.AddCssFile(@"style.css", true);
    var pipeline = new CssResolverPipeline(cssResolver, new HtmlPipeline(htmlContext, new PdfWriterPipeline(document, writer)));
    XMLWorker worker = new XMLWorker(pipeline, true);
    XMLParser p = new XMLParser(worker);

    /* write out cover page */
    p.Parse(coverpage);

    /* write out table */
    document.NewPage();
    writer.PageEvent = new PDFFooter();
    p.Parse(header); 
    p.Parse(ContentTable); 

    /* write out end page */
    document.NewPage();
    p.Parse(endPage);

我遇到的麻烦是确定一种方法来阻止页脚出现在结束页面上。我正在重写OnEndPage来制作页脚。有没有办法检测文档的最后一页(不知道确切的页码是什么),并告诉它不要使用覆盖,以便不打印出页脚?

1 个答案:

答案 0 :(得分:2)

OnEndPage()被触发时,无法知道你是否在最后一页,所以你必须使用一个技巧。将布尔成员变量添加到PDFFooter类,默认情况下将其设置为false。仅当此成员变量为true时才添加页脚。

要确保您的页面需要一个页脚,请在添加true后将成员变量设置为coverpage,然后在添加endPage之前将其设置为false