首页 文章

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

提问于
浏览
1

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

我使用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 回答

  • 2

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

    要确保页面需要一个页脚,请在添加 coverpage 之后将member-variable设置为 true ,并在添加 endPage 之前将其设置为false .

相关问题