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

ami*_*ain 5 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>");
Run Code Online (Sandbox Code Playgroud)

这将显示我的HTML

TextReader xmlString = new StringReader(str.Append(html).ToString());
Run Code Online (Sandbox Code Playgroud)

这是为了附加我的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();
Run Code Online (Sandbox Code Playgroud)

此代码工作正常,但我使用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);
    }
}
Run Code Online (Sandbox Code Playgroud)

rhe*_*ens 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>
Run Code Online (Sandbox Code Playgroud)

在您的上一个代码示例中,您使用HTMLWorker.你不应该.它被弃用了XMLWorker.

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