Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ITextSharp使用外部css文件以PDF格式重复HTML表格标题_C#_Itextsharp - Fatal编程技术网

C# ITextSharp使用外部css文件以PDF格式重复HTML表格标题

C# ITextSharp使用外部css文件以PDF格式重复HTML表格标题,c#,itextsharp,C#,Itextsharp,我在视图中有一个HTML表。我正在使用ITextSharp转换 HTML转换为PDF。我想使用外部CSS和 为每页重复表格标题。如何让它显示标题 在每个页面上使用CSS和页眉 这是为了显示我的页眉 str.Append("<table class='text-center'>"); str.Append("<tr class='h4'><td> " + companyName + " </ td ></

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

这是为了显示我的页眉

str.Append("<table class='text-center'>");
                    str.Append("<tr class='h4'><td> " + companyName + " </ td ></ tr >");
                    str.Append("</table>");
这是为了附加我的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);
    }
}
使用(TextReader sr=new StringReader(html))
{
列表元素=
iTextSharp.text.html.simpleparser.HTMLWorker.parsetList(sr,null);
foreach(元素中的元素el)
{
如果(el为PdfPTable)
{
((PdfPTable)el)。头误差=2;
}
文件.添加(el);
Parse(sr);
}
}

XML Worker允许您通过专有CSS属性配置重复表的页眉和页脚:
重复页眉
重复页脚
。这些不是CSS规范的一部分。它们仅由XML Worker用于此特定目的

您可以使用
指定页眉和页脚行


页脚1
标题1
标题2
在上一个代码示例中,您使用了
HTMLWorker
。你不应该。它被弃用,取而代之的是
XMLWorker


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

我不明白你的回答你能澄清你不明白的地方吗?如果您像我在回答中显示的那样构造HTML,您将得到重复的表头和表尾。我已经完成了CSS内联(style=“repeat header:yes;…”),但是您可以对外部CSS文件执行相同的操作。我想使用itextsharp重复header这段代码对我有效,但CSS不使用(TextReader sr=new StringReader(html))处理这段代码{List elements=iTextSharp.text.html.simpleparser.HTMLWorker.parsetList(sr,null);foreach(元素中的元素el){if(el是PdfPTable){((PdfPTable)el.HeaderRows=2;}document.Add(el);xmlParse.Parse(sr);}你不应该再使用HTMLWorker了。它已被弃用,取而代之的是XMLWorker。我将更新我的答案。
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);
    }
}
<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>