2015-10-20 130 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); } } –