目前正在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 回答
当
OnEndPage()
被触发时,无法知道你是否在最后一页,所以你必须使用一个技巧 . 将一个布尔成员变量添加到PDFFooter
类,并默认将其设置为false
. 仅当此成员变量为true
时才添加页脚 .要确保页面需要一个页脚,请在添加
coverpage
之后将member-variable设置为true
,并在添加endPage
之前将其设置为false .