目前正在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来制作页脚。有没有办法检测文档的最后一页(不知道确切的页码是什么),并告诉它不要使用覆盖,以便不打印出页脚?
答案 0 :(得分:2)
当OnEndPage()
被触发时,无法知道你是否在最后一页,所以你必须使用一个技巧。将布尔成员变量添加到PDFFooter
类,默认情况下将其设置为false
。仅当此成员变量为true
时才添加页脚。
要确保您的页面需要一个页脚,请在添加true
后将成员变量设置为coverpage
,然后在添加endPage
之前将其设置为false