2015-10-20 128 views
4

我在视图中有一个HTML表格。我正在使用ITextSharp将 HTML转换为PDF。我想为每个页面使用外部CSS和 重复表头。如何使用CSS和页眉在每个页面上显示页眉 ?ITextSharp在PDF中使用外部css文件重复HTML表格标题

这是为了显示我的页头

str.Append("<table class='text-center'>"); 
        str.Append("<tr class='h4'><td> " + companyName + " </ td ></ tr >"); 
        str.Append("</table>"); 

这表明我的HTML

TextReader xmlString = new StringReader(str.Append(html).ToString()); 

这追加我的CSS

ICSSResolver cssResolver = XMLWorkerHelper.GetInstance().GetDefaultCssResolver(false); 
cssResolver.AddCssFile(HttpContext.Current.Server.MapPath(@"~/Content/Print.css"), true); 
IPipeline pipeline = new CssResolverPipeline(cssResolver, 
    new HtmlPipeline(htmlContext, new PdfWriterPipeline(document, writer))); 

var worker = new XMLWorker(pipeline, true); 
var xmlParse = new XMLParser(true, worker); 
xmlParse.Parse(xmlString); 
xmlParse.Flush(); 

此代码工作正常,但 我使用1个表格显示数据,表格标题不会重复 每页。如果我使用此代码重复表格的标题,则CSS不会 工作。我如何解决这个问题,同时使用CSS和重复标题。

using (TextReader sr = new StringReader(html)) 
{ 
    List<IElement> elements = 
     iTextSharp.text.html.simpleparser.HTMLWorker.ParseToList(sr, null); 
    foreach (IElement el in elements) 
    { 
     if (el is PdfPTable) 
     { 
      ((PdfPTable)el).HeaderRows = 2; 
     } 
     document.Add(el); 
     xmlParse.Parse(sr); 
    } 
} 

回答

11

XML工人,您可以通过专有的CSS属性配置重复表的页眉和页脚:repeat-headerrepeat-footer。这些不是CSS规范的一部分。它们仅被XML Worker用于此特定目的。

您可以使用<thead><tfoot>指定页眉和页脚行。

<table style="repeat-header: yes; repeat-footer: yes;"> 
    <tfoot> 
    <tr> 
     <td>Footer 1</td> 
    </tr> 
    </tfoot> 
    <thead> 
    <tr> 
     <td>Header 1</td> 
    </tr> 
    <tr> 
     <td>Header 2</td> 
    </tr> 
    </thead> 
    <tbody> 
    <!-- ... --> 
    </tbody> 
</table> 

在你上一个代码示例中,你使用了HTMLWorker。你不应该。已弃用XMLWorker

因此,只需使用基于XMLWorkerXMLParser的代码,并使用上述HTML示例中所示的CSS属性repeat-header

+0

我不明白你的回答 –

+0

你能澄清一下你不明白的东西吗?如果你像我在我的回答中所展示的那样构造HTML,你会得到重复的表头和页脚。我已经完成了内联CSS(* style =“repeat-header:yes; ...”*),但是您可以对外部CSS文件进行相同的操作。 – rhens

+0

我想用iTextSharp的此代码的工作重复标题为我,但CSS没有使用这些代码的工作(TextReader的SR =新StringReader(HTML)){ 名单 元素 = iTextSharp.text.html.simpleparser.HTMLWorker.ParseToList (sr,null); (el.pdfPTable) ((PdfPTable)el).HeaderRows = 2; } document.Add(el); xmlParse.Parse(sr); } } –