我在视图中有一个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);
}
}
答案 0 :(得分:14)
XML Worker允许您通过专有的CSS属性配置重复的表头和页脚:repeat-header
和repeat-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
。
所以,只需使用基于XMLWorker
和XMLParser
的代码,以及CSS属性repeat-header
,如上面的HTML示例所示。