ITextSharp使用外部css文件重复PDF格式的HTML表头

时间:2015-10-20 14:33:06

标签: c# itextsharp

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

这是为了显示我的页面标题

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);
    }
}

1 个答案:

答案 0 :(得分:14)

XML Worker允许您通过专有的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的代码,以及CSS属性repeat-header,如上面的HTML示例所示。